Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 53843 invoked from network); 16 Nov 2006 16:06:46 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 Nov 2006 16:06:46 -0000 Received: (qmail 91152 invoked by uid 500); 16 Nov 2006 16:06:55 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 91116 invoked by uid 500); 16 Nov 2006 16:06:55 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 91101 invoked by uid 99); 16 Nov 2006 16:06:55 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Nov 2006 08:06:55 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Nov 2006 08:06:33 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id 61BF11A9866; Thu, 16 Nov 2006 08:05:35 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r475786 [10/13] - in /directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin: ./ META-INF/ icons/ ressources/ ressources/help/ ressources/help/html/ ressources/help/html/concepts/ ressources/help/html/concepts/images/ ressources/... Date: Thu, 16 Nov 2006 16:05:29 -0000 To: commits@directory.apache.org From: pamarcelot@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061116160535.61BF11A9866@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorOverviewPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorOverviewPage.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorOverviewPage.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorOverviewPage.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,845 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.editors; + + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.apache.directory.ldapstudio.schemas.controller.PoolManagerController; +import org.apache.directory.ldapstudio.schemas.model.ObjectClass; +import org.apache.directory.ldapstudio.schemas.model.Schema; +import org.apache.directory.ldapstudio.schemas.model.SchemaPool; +import org.apache.directory.ldapstudio.schemas.view.IImageKeys; +import org.apache.directory.shared.ldap.schema.ObjectClassTypeEnum; +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.editor.FormEditor; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.events.HyperlinkAdapter; +import org.eclipse.ui.forms.events.HyperlinkEvent; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.Hyperlink; +import org.eclipse.ui.forms.widgets.ScrolledForm; +import org.eclipse.ui.forms.widgets.Section; +import org.eclipse.ui.plugin.AbstractUIPlugin; + + +/** + * This class is the Overview Page of the Object Class Editor + */ +public class ObjectClassFormEditorOverviewPage extends FormPage +{ + + private Text name_text; + private Text oid_text; + private Text description_text; + private Hyperlink sup_label; + private Combo sup_combo; + private Combo classType_combo; + private Button obsolete_checkbox; + private Table mandatoryAttributes_table; + private Table optionnalAttributes_table; + private ObjectClass objectClass; + private String[] aliasesList; + private Button aliases_button; + + + /** + * Default constructor + * @param editor + * @param id + * @param title + */ + public ObjectClassFormEditorOverviewPage( FormEditor editor, String id, String title ) + { + super( editor, id, title ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm) + */ + protected void createFormContent( IManagedForm managedForm ) + { + ScrolledForm form = managedForm.getForm(); + FormToolkit toolkit = managedForm.getToolkit(); + GridLayout layout = new GridLayout( 2, true ); + form.getBody().setLayout( layout ); + + // Getting the input and the objectClass + ObjectClassFormEditorInput input = ( ObjectClassFormEditorInput ) getEditorInput(); + objectClass = ( ObjectClass ) input.getObjectClass(); + + // General Information Section + Section section_general_information = toolkit.createSection( form.getBody(), Section.DESCRIPTION + | Section.TITLE_BAR ); + section_general_information.setDescription( Messages + .getString( "ObjectClassFormEditorOverviewPage.General_Information_Section_Description" ) ); //$NON-NLS-1$ + section_general_information.setText( Messages + .getString( "ObjectClassFormEditorOverviewPage.General_Information_Section_Text" ) ); //$NON-NLS-1$ + + // Creating the layout of the section + Composite client_general_information = toolkit.createComposite( section_general_information ); + GridLayout layout_general_information = new GridLayout(); + layout_general_information.numColumns = 2; + client_general_information.setLayout( layout_general_information ); + toolkit.paintBordersFor( client_general_information ); + section_general_information.setClient( client_general_information ); + section_general_information.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true, 2, 1 ) ); + + // Adding elements to the section + // NAME Field + toolkit + .createLabel( client_general_information, Messages.getString( "ObjectClassFormEditorOverviewPage.Name" ) ); //$NON-NLS-1$ + name_text = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$ + name_text.setLayoutData( new GridData( GridData.FILL, SWT.NONE, true, false ) ); + + // ALIASES Button + toolkit.createLabel( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Aliases" ) ); //$NON-NLS-1$ + aliases_button = toolkit.createButton( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Manage_Aliases" ), SWT.PUSH ); //$NON-NLS-1$ + aliases_button.setLayoutData( new GridData( SWT.NONE, SWT.BEGINNING, false, false ) ); + + // OID Field + toolkit.createLabel( client_general_information, Messages.getString( "ObjectClassFormEditorOverviewPage.OID" ) ); //$NON-NLS-1$ + oid_text = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$ + oid_text.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); + + // DESCRIPTION Field + toolkit.createLabel( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Description" ) ); //$NON-NLS-1$ + description_text = toolkit.createText( client_general_information, "", SWT.MULTI | SWT.V_SCROLL ); //$NON-NLS-1$ + GridData descriptionGridData = new GridData( SWT.FILL, SWT.NONE, true, false ); + descriptionGridData.heightHint = 37; + description_text.setLayoutData( descriptionGridData ); + + // SUP Combo + sup_label = toolkit.createHyperlink( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Superior_class" ), SWT.WRAP ); //$NON-NLS-1$ + sup_combo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE ); + sup_combo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); + + // CLASS TYPE Combo + toolkit.createLabel( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Class_type" ) ); //$NON-NLS-1$ + classType_combo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE ); + classType_combo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); + + // OBSOLETE Checkbox + toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$ + obsolete_checkbox = toolkit.createButton( client_general_information, Messages + .getString( "ObjectClassFormEditorOverviewPage.Obsolete" ), SWT.CHECK ); //$NON-NLS-1$ + obsolete_checkbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) ); + + // Mandatory Attributes Section + createMandatoryAttributesSection( form.getBody(), toolkit ); + + // Optionnal Attributes Section + createOptionnalAttributesSection( form.getBody(), toolkit ); + + // Initialization from the "input" object class + initFieldsContentFromInput(); + + // Listeners initialization + initListeners(); + } + + + private void createMandatoryAttributesSection( Composite parent, FormToolkit toolkit ) + { + // MANDATORY ATTRIBUTES Section + Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR ); + section.setText( Messages.getString( "ObjectClassFormEditorOverviewPage.Mandatory_Attribute_Section_Text" ) ); //$NON-NLS-1$ + section.setDescription( Messages + .getString( "ObjectClassFormEditorOverviewPage.Mandatory_Attribute_Section_Description" ) ); //$NON-NLS-1$ + section.setExpanded( true ); + Composite client = toolkit.createComposite( section ); + section.setClient( client ); + GridData gd = new GridData( GridData.FILL, GridData.FILL, true, true ); + section.setLayoutData( gd ); + toolkit.paintBordersFor( client ); + + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + client.setLayout( layout ); + + mandatoryAttributes_table = toolkit.createTable( client, SWT.NULL ); + gd = new GridData( SWT.FILL, SWT.FILL, true, true ); + gd.verticalSpan = 2; + gd.heightHint = 100; + mandatoryAttributes_table.setLayoutData( gd ); + + final Button add_button = toolkit.createButton( client, Messages + .getString( "ObjectClassFormEditorOverviewPage.Add..." ), SWT.PUSH ); //$NON-NLS-1$ + final Button remove_button = toolkit.createButton( client, Messages + .getString( "ObjectClassFormEditorOverviewPage.Remove" ), SWT.PUSH ); //$NON-NLS-1$ + gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING ); + add_button.setLayoutData( gd ); + remove_button.setLayoutData( gd ); + remove_button.setEnabled( false ); + + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + add_button.setEnabled( false ); + remove_button.setEnabled( false ); + } + else + { + // else we set the listeners + add_button.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + AttributeTypeSelectionDialog selectionDialog = new AttributeTypeSelectionDialog( null ); + if ( selectionDialog.open() != Window.OK ) + { + return; + } + if ( isAttributeTypeAlreadySpecified( selectionDialog.getSelectedAttributeType(), + optionnalAttributes_table ) ) + { + // The selected attribute type is already in the Optionnal Attributes Table + MessageDialog + .openError( + null, + Messages.getString( "ObjectClassFormEditorOverviewPage.Invalid_Selection" ), Messages.getString( "ObjectClassFormEditorOverviewPage.The_selected_attribute_type_is_already_in_the_Optionnal_Attributes_section" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + else + { + if ( isAttributeTypeAlreadySpecified( selectionDialog.getSelectedAttributeType(), + mandatoryAttributes_table ) ) + { + // The selected attribute type is already in the Mandatory Attributes Table + MessageDialog + .openError( + null, + Messages.getString( "ObjectClassFormEditorOverviewPage.Invalid_Selection" ), Messages.getString( "ObjectClassFormEditorOverviewPage.The_selected_attribute_type_is_already_in_the_this_section" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + else + { + // The selected attribute is not in any table, so it can be added + TableItem item = new TableItem( mandatoryAttributes_table, SWT.NONE ); + item.setImage( AbstractUIPlugin.imageDescriptorFromPlugin( Application.PLUGIN_ID, + IImageKeys.ATTRIBUTE_TYPE ).createImage() ); + item.setText( selectionDialog.getSelectedAttributeType() ); + setEditorDirty(); + } + + } + } + } ); + remove_button.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + mandatoryAttributes_table.remove( mandatoryAttributes_table.getSelectionIndex() ); + setEditorDirty(); + remove_button.setEnabled( mandatoryAttributes_table.getSelection().length != 0 ); + } + } ); + } + // This listener needs to be outside of the 'if' so that attribute type editor can be opened from any object class (in a core or a user schema) + mandatoryAttributes_table.addMouseListener( new MouseListener() + { + public void mouseDoubleClick( MouseEvent e ) + { + SchemaPool pool = SchemaPool.getInstance(); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + + AttributeTypeFormEditorInput input = new AttributeTypeFormEditorInput( pool + .getAttributeType( mandatoryAttributes_table.getSelection()[0].getText() ) ); + String editorId = AttributeTypeFormEditor.ID; + try + { + page.openEditor( input, editorId ); + } + catch ( PartInitException exception ) + { + Logger.getLogger( PoolManagerController.class ).debug( "error when opening the editor" ); //$NON-NLS-1$ + } + } + + + public void mouseDown( MouseEvent e ) + { + } + + + public void mouseUp( MouseEvent e ) + { + if ( objectClass.getOriginatingSchema().type != Schema.SchemaType.coreSchema ) + { + remove_button.setEnabled( mandatoryAttributes_table.getSelection().length != 0 ); + } + } + } ); + } + + + private void createOptionnalAttributesSection( Composite parent, FormToolkit toolkit ) + { + // OPTIONNAL ATTRIBUTES Section + Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR ); + section.setText( Messages.getString( "ObjectClassFormEditorOverviewPage.Optionnal_Attributes_Section_Text" ) ); //$NON-NLS-1$ + section.setDescription( Messages + .getString( "ObjectClassFormEditorOverviewPage.Optionnal_Attributes_Section_Description" ) ); //$NON-NLS-1$ + section.setExpanded( true ); + Composite client = toolkit.createComposite( section ); + section.setClient( client ); + GridData gd = new GridData( GridData.FILL, GridData.FILL, true, true ); + section.setLayoutData( gd ); + toolkit.paintBordersFor( client ); + + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + client.setLayout( layout ); + + optionnalAttributes_table = toolkit.createTable( client, SWT.SINGLE | SWT.V_SCROLL ); + gd = new GridData( SWT.FILL, SWT.FILL, true, true ); + gd.verticalSpan = 2; + gd.heightHint = 100; + optionnalAttributes_table.setLayoutData( gd ); + + final Button add_button = toolkit.createButton( client, Messages + .getString( "ObjectClassFormEditorOverviewPage.Add..." ), SWT.PUSH ); //$NON-NLS-1$ + final Button remove_button = toolkit.createButton( client, Messages + .getString( "ObjectClassFormEditorOverviewPage.Remove" ), SWT.PUSH ); //$NON-NLS-1$ + gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING ); + add_button.setLayoutData( gd ); + remove_button.setLayoutData( gd ); + remove_button.setEnabled( false ); + + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + add_button.setEnabled( false ); + remove_button.setEnabled( false ); + } + else + { + // else we set the listeners + add_button.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + AttributeTypeSelectionDialog selectionDialog = new AttributeTypeSelectionDialog( null ); + if ( selectionDialog.open() != Window.OK ) + { + return; + } + if ( isAttributeTypeAlreadySpecified( selectionDialog.getSelectedAttributeType(), + mandatoryAttributes_table ) ) + { + // The selected attribute type is already in the Mandatory Attributes Table + MessageDialog + .openError( + null, + Messages.getString( "ObjectClassFormEditorOverviewPage.Invalid_Selection" ), Messages.getString( "ObjectClassFormEditorOverviewPage.The_selected_attribute_type_is_already_in_the_Mandatory_Attributes_section" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + else + { + if ( isAttributeTypeAlreadySpecified( selectionDialog.getSelectedAttributeType(), + optionnalAttributes_table ) ) + { + // The selected attribute type is already in the Optionnal Attributes Table + MessageDialog + .openError( + null, + Messages.getString( "ObjectClassFormEditorOverviewPage.Invalid_Selection" ), Messages.getString( "ObjectClassFormEditorOverviewPage.The_selected_attribute_type_is_already_in_the_this_section" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + } + else + { + // The selected attribute is not in any table, so it can be added + TableItem item = new TableItem( optionnalAttributes_table, SWT.NONE ); + item.setImage( AbstractUIPlugin.imageDescriptorFromPlugin( Application.PLUGIN_ID, + IImageKeys.ATTRIBUTE_TYPE ).createImage() ); + item.setText( selectionDialog.getSelectedAttributeType() ); + setEditorDirty(); + } + + } + } + } ); + remove_button.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + optionnalAttributes_table.remove( optionnalAttributes_table.getSelectionIndex() ); + setEditorDirty(); + remove_button.setEnabled( optionnalAttributes_table.getSelection().length != 0 ); + } + } ); + } + // This listener needs to be outside of the 'if' so that attribute type editor can be opened from any object class (in a core or a user schema) + optionnalAttributes_table.addMouseListener( new MouseListener() + { + public void mouseDoubleClick( MouseEvent e ) + { + SchemaPool pool = SchemaPool.getInstance(); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + + AttributeTypeFormEditorInput input = new AttributeTypeFormEditorInput( pool + .getAttributeType( optionnalAttributes_table.getSelection()[0].getText() ) ); + String editorId = AttributeTypeFormEditor.ID; + try + { + page.openEditor( input, editorId ); + } + catch ( PartInitException exception ) + { + Logger.getLogger( PoolManagerController.class ).debug( "error when opening the editor" ); //$NON-NLS-1$ + } + } + + + public void mouseDown( MouseEvent e ) + { + } + + + public void mouseUp( MouseEvent e ) + { + if ( objectClass.getOriginatingSchema().type != Schema.SchemaType.coreSchema ) + { + remove_button.setEnabled( optionnalAttributes_table.getSelection().length != 0 ); + } + } + } ); + } + + + private boolean isAttributeTypeAlreadySpecified( String name, Table table ) + { + for ( int i = 0; i < table.getItemCount(); i++ ) + { + if ( table.getItem( i ).getText().equals( name ) ) + { + return true; + } + } + return false; + } + + + private void initFieldsContentFromInput() + { + // NAME Field + if ( objectClass.getNames()[0] != null ) + { + this.name_text.setText( objectClass.getNames()[0] ); + } + + // ALIASES + String[] names = objectClass.getNames(); + ArrayList aliases = new ArrayList(); + for ( int i = 1; i < names.length; i++ ) + { + String name = names[i]; + aliases.add( name ); + } + this.aliasesList = aliases.toArray( new String[0] ); + + // OID Field + if ( objectClass.getOid() != null ) + { + this.oid_text.setText( objectClass.getOid() ); + } + + // DESCRIPTION Field + if ( objectClass.getDescription() != null ) + { + this.description_text.setText( objectClass.getDescription() ); + } + + // SUP Combo + initSup_combo(); + + // CLASSTYPE Combo + initClassType_combo(); + + // OBSOLETE Checkbox + if ( objectClass.isObsolete() ) + { + this.obsolete_checkbox.setSelection( true ); + } + + // MANDATORY ATTRIBUTES Table + initMandatoryAttributes_table(); + + // OPTIONNAL ATTRIBUTES Table + initOptionnalAttributes_table(); + } + + + private void initSup_combo() + { + SchemaPool pool = SchemaPool.getInstance(); + ArrayList ocList = new ArrayList( pool.getObjectClassesAsHashTableByName().values() ); + + //remove duplicate entries + HashSet set = new HashSet( ocList ); + ocList = new ArrayList( set ); + + // Sorting the list + Collections.sort( ocList, new Comparator() + { + public int compare( ObjectClass arg0, ObjectClass arg1 ) + { + String oneName = arg0.getNames()[0]; + String twoName = arg1.getNames()[0]; + return oneName.compareTo( twoName ); + } + } ); + + // Creating the UI + sup_combo.add( Messages.getString( "ObjectClassFormEditorOverviewPage.(None)" ) ); //$NON-NLS-1$ + sup_combo.select( 0 ); + int counter = 1; + for ( ObjectClass oc : ocList ) + { + // TODO : Ajouter une verification pour qu'on ne puisse pas ajouter en sup l'objectclass lui meme et ses alias + sup_combo.add( oc.getNames()[0], counter ); + if ( ( objectClass.getSuperiors().length != 0 ) + && ( oc.getNames()[0].equals( objectClass.getSuperiors()[0] ) ) ) + { + // We select the right superior + sup_combo.select( counter ); + } + counter++; + } + } + + + private void initClassType_combo() + { + classType_combo.add( Messages.getString( "ObjectClassFormEditorOverviewPage.Abstract" ), 0 ); //$NON-NLS-1$ + classType_combo.add( Messages.getString( "ObjectClassFormEditorOverviewPage.Auxiliary" ), 1 ); //$NON-NLS-1$ + classType_combo.add( Messages.getString( "ObjectClassFormEditorOverviewPage.Structural" ), 2 ); //$NON-NLS-1$ + if ( objectClass.getClassType() == ObjectClassTypeEnum.ABSTRACT ) + { + classType_combo.select( 0 ); + } + else if ( objectClass.getClassType() == ObjectClassTypeEnum.AUXILIARY ) + { + classType_combo.select( 1 ); + } + else if ( objectClass.getClassType() == ObjectClassTypeEnum.STRUCTURAL ) + { + classType_combo.select( 2 ); + } + } + + + private void initMandatoryAttributes_table() + { + String[] mustArray = objectClass.getMust(); + for ( int i = 0; i < mustArray.length; i++ ) + { + TableItem item = new TableItem( mandatoryAttributes_table, SWT.NONE ); + item.setImage( AbstractUIPlugin + .imageDescriptorFromPlugin( Application.PLUGIN_ID, IImageKeys.ATTRIBUTE_TYPE ).createImage() ); + item.setText( mustArray[i] ); + } + } + + + private void initOptionnalAttributes_table() + { + String[] mayArray = objectClass.getMay(); + for ( int i = 0; i < mayArray.length; i++ ) + { + TableItem item = new TableItem( optionnalAttributes_table, SWT.NONE ); + item.setImage( AbstractUIPlugin + .imageDescriptorFromPlugin( Application.PLUGIN_ID, IImageKeys.ATTRIBUTE_TYPE ).createImage() ); + item.setText( mayArray[i] ); + } + } + + + private void initListeners() + { + // NAME Field + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + name_text.setEditable( false ); + } + else + { + // else we set the listener + name_text.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setEditorDirty(); + } + } ); + } + + // ALIASES Button + // The user can always access to the Manage Aliases Window, but if the object class is in a core-schema file editing will be disabled + aliases_button.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + ManageAliasesDialog manageDialog = new ManageAliasesDialog( null, aliasesList, ( objectClass + .getOriginatingSchema().type == Schema.SchemaType.coreSchema ) ); + if ( manageDialog.open() != Window.OK ) + { + return; + } + if ( manageDialog.isDirty() ) + { + aliasesList = manageDialog.getAliasesList(); + setEditorDirty(); + } + } + } ); + + // OID Field + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + oid_text.setEditable( false ); + } + else + { + // else we set the listener + oid_text.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setEditorDirty(); + } + } ); + } + + // DESCRIPTION Field + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + description_text.setEditable( false ); + } + else + { + // else we set the listener + description_text.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setEditorDirty(); + } + } ); + } + + // SUP Combo + sup_label.addHyperlinkListener( new HyperlinkAdapter() + { + public void linkActivated( HyperlinkEvent e ) + { + if ( !sup_combo.getItem( sup_combo.getSelectionIndex() ).equals( + Messages.getString( "ObjectClassFormEditorOverviewPage.(None)" ) ) ) { //$NON-NLS-1$ + SchemaPool pool = SchemaPool.getInstance(); + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + + ObjectClassFormEditorInput input = new ObjectClassFormEditorInput( pool.getObjectClass( sup_combo + .getItem( sup_combo.getSelectionIndex() ) ) ); + String editorId = ObjectClassFormEditor.ID; + try + { + page.openEditor( input, editorId ); + } + catch ( PartInitException exception ) + { + Logger.getLogger( ObjectClassFormEditorOverviewPage.class ).debug( + "error when opening the editor" ); //$NON-NLS-1$ + } + } + } + } ); + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + sup_combo.setEnabled( false ); + } + else + { + // else we set the listener + sup_combo.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setEditorDirty(); + } + } ); + } + + // CLASS TYPE Combo + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + classType_combo.setEnabled( false ); + } + else + { + // else we set the listener + classType_combo.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + setEditorDirty(); + } + } ); + } + + // OBSOLETE Checkbox + if ( objectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema ) + { + // If the object class is in a core-schema file, we disable editing + obsolete_checkbox.setEnabled( false ); + } + else + { + // else we set the listener + obsolete_checkbox.addSelectionListener( new SelectionListener() + { + public void widgetDefaultSelected( SelectionEvent e ) + { + } + + + public void widgetSelected( SelectionEvent e ) + { + setEditorDirty(); + } + } ); + } + } + + + private void setEditorDirty() + { + ( ( ObjectClassFormEditor ) getEditor() ).setDirty( true ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormPage#doSave(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void doSave( IProgressMonitor monitor ) + { + // NAME + // if ( name_text.getText().equals("") ){ + // MessageBox messageBox = new MessageBox(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OK|SWT.ICON_ERROR); + // messageBox.setMessage("You must to provide a name to the object class to be able to save it."); + // messageBox.open(); + // monitor.setCanceled(true); + // monitor.done(); + // return; + // } + ArrayList names = new ArrayList(); + names.add( name_text.getText() ); + for ( int i = 0; i < this.aliasesList.length; i++ ) + { + names.add( this.aliasesList[i] ); + } + objectClass.setNames( names.toArray( new String[0] ) ); + + // OID + objectClass.setOid( oid_text.getText() ); + + // DESCRIPTION + objectClass.setDescription( description_text.getText() ); + + // SUP + if ( sup_combo.getItem( sup_combo.getSelectionIndex() ).equals( + Messages.getString( "ObjectClassFormEditorOverviewPage.(None)" ) ) ) { //$NON-NLS-1$ + objectClass.setSuperiors( new String[0] ); + } + else + { + objectClass.setSuperiors( new String[] + { sup_combo.getItem( sup_combo.getSelectionIndex() ) } ); + } + + // CLASS TYPE + if ( classType_combo.getSelectionIndex() == 0 ) + { + objectClass.setClassType( ObjectClassTypeEnum.ABSTRACT ); + } + else if ( classType_combo.getSelectionIndex() == 1 ) + { + objectClass.setClassType( ObjectClassTypeEnum.AUXILIARY ); + } + else if ( classType_combo.getSelectionIndex() == 2 ) + { + objectClass.setClassType( ObjectClassTypeEnum.STRUCTURAL ); + } + + // OBSOLETE + objectClass.setObsolete( obsolete_checkbox.getSelection() ); + + // MANDATORY ATTRIBUTES + ArrayList mustList = new ArrayList(); + for ( int i = 0; i < mandatoryAttributes_table.getItemCount(); i++ ) + { + mustList.add( mandatoryAttributes_table.getItem( i ).getText() ); + } + objectClass.setMust( mustList.toArray( new String[0] ) ); + + // OPTIONNAL ATTRIBUTES + ArrayList mayList = new ArrayList(); + for ( int i = 0; i < optionnalAttributes_table.getItemCount(); i++ ) + { + mayList.add( optionnalAttributes_table.getItem( i ).getText() ); + } + objectClass.setMay( mayList.toArray( new String[0] ) ); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorSourceCodePage.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorSourceCodePage.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorSourceCodePage.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/ObjectClassFormEditorSourceCodePage.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,99 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.editors; + + +import org.apache.directory.ldapstudio.schemas.model.ObjectClass; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.editor.FormEditor; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; + + +/** + * This class is the Source Code Page of the Object Class Editor + */ +public class ObjectClassFormEditorSourceCodePage extends FormPage +{ + private ObjectClass objectClass; + private Text sourceCode_text; + + + /** + * Default constructor + * @param editor + * @param id + * @param title + */ + public ObjectClassFormEditorSourceCodePage( FormEditor editor, String id, String title ) + { + super( editor, id, title ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm) + */ + protected void createFormContent( IManagedForm managedForm ) + { + ScrolledForm form = managedForm.getForm(); + FormToolkit toolkit = managedForm.getToolkit(); + GridLayout layout = new GridLayout(); + form.getBody().setLayout( layout ); + toolkit.paintBordersFor( form.getBody() ); + + // Getting the input and the objectClass + ObjectClassFormEditorInput input = ( ObjectClassFormEditorInput ) getEditorInput(); + objectClass = ( ObjectClass ) input.getObjectClass(); + + // SOURCE CODE Field + sourceCode_text = toolkit.createText( form.getBody(), "", SWT.MULTI ); //$NON-NLS-1$ + sourceCode_text.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) ); + sourceCode_text.setEditable( false ); + + // Initialization from the "input" object class + initFieldsContentFromInput(); + } + + + private void initFieldsContentFromInput() + { + // SOURCE CODE Field + sourceCode_text.setText( objectClass.write() ); + } + + + /** + * Refreshes the source code field + */ + public void refresh() + { + if ( sourceCode_text != null ) + { + initFieldsContentFromInput(); + } + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditor.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditor.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditor.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditor.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.editors; + + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.apache.log4j.Logger; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.forms.editor.FormEditor; + + +/** + * This class is the Schema Editor main class + */ +public class SchemaFormEditor extends FormEditor +{ + private static Logger logger = Logger.getLogger( SchemaFormEditor.class ); + public static final String ID = Application.PLUGIN_ID + ".view.schemaformeditor"; //$NON-NLS-1$ + private SchemaFormEditorSourceCodePage sourceCode; + + + /** + * Default constructor + */ + public SchemaFormEditor() + { + super(); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput) + */ + @Override + public void init( IEditorSite site, IEditorInput input ) throws PartInitException + { + setSite( site ); + setInput( input ); + setPartName( input.getName() ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormEditor#addPages() + */ + @Override + protected void addPages() + { + try + { + sourceCode = new SchemaFormEditorSourceCodePage( this, + "sourceCode", Messages.getString( "SchemaFormEditor.Source_code" ) ); //$NON-NLS-1$ //$NON-NLS-2$ + addPage( sourceCode ); + } + catch ( PartInitException e ) + { + logger.debug( "error when adding pages" ); //$NON-NLS-1$ + } + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor) + */ + @Override + public void doSave( IProgressMonitor monitor ) + { + // There's nothing to save + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.part.EditorPart#doSaveAs() + */ + @Override + public void doSaveAs() + { + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed() + */ + @Override + public boolean isSaveAsAllowed() + { + return false; + } + +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorInput.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorInput.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorInput.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorInput.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,125 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.editors; + + +import org.apache.directory.ldapstudio.schemas.model.Schema; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IPersistableElement; + + +/** + * This class is the Input class for the Schema Editor + */ +public class SchemaFormEditorInput implements IEditorInput +{ + private Schema schema; + + + /** + * Default constructor + * @param schema + */ + public SchemaFormEditorInput( Schema schema ) + { + super(); + this.schema = schema; + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#exists() + */ + public boolean exists() + { + return ( this.schema == null ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getImageDescriptor() + */ + public ImageDescriptor getImageDescriptor() + { + return null; + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getName() + */ + public String getName() + { + return this.schema.getName(); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getPersistable() + */ + public IPersistableElement getPersistable() + { + return null; + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.IEditorInput#getToolTipText() + */ + public String getToolTipText() + { + return Messages.getString( "SchemaFormEditorInput.Source_code_of" ) + this.schema.getName(); //$NON-NLS-1$ + } + + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter( Class adapter ) + { + return null; + } + + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals( Object obj ) + { + if ( this == obj ) + return true; + if ( !( obj instanceof SchemaFormEditorInput ) ) + return false; + SchemaFormEditorInput other = ( SchemaFormEditorInput ) obj; + return other.getSchema().getName().equals( this.schema.getName() ); + } + + + /** + * Returns the input schema + * @return the input schema + */ + public Schema getSchema() + { + return this.schema; + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorSourceCodePage.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorSourceCodePage.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorSourceCodePage.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/editors/SchemaFormEditorSourceCodePage.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.editors; + + +import org.apache.directory.ldapstudio.schemas.model.AttributeType; +import org.apache.directory.ldapstudio.schemas.model.ObjectClass; +import org.apache.directory.ldapstudio.schemas.model.Schema; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.forms.IManagedForm; +import org.eclipse.ui.forms.editor.FormEditor; +import org.eclipse.ui.forms.editor.FormPage; +import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ScrolledForm; + + +/** + * This class is the Source Code Page of the Schema Editor + */ +public class SchemaFormEditorSourceCodePage extends FormPage +{ + private Schema schema; + private Text sourceCode_text; + + + /** + * Default constructor + * @param editor + * @param id + * @param title + */ + public SchemaFormEditorSourceCodePage( FormEditor editor, String id, String title ) + { + super( editor, id, title ); + } + + + /* (non-Javadoc) + * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm) + */ + protected void createFormContent( IManagedForm managedForm ) + { + ScrolledForm form = managedForm.getForm(); + FormToolkit toolkit = managedForm.getToolkit(); + GridLayout layout = new GridLayout(); + form.getBody().setLayout( layout ); + toolkit.paintBordersFor( form.getBody() ); + + // Getting the input and the objectClass + SchemaFormEditorInput input = ( SchemaFormEditorInput ) getEditorInput(); + schema = ( Schema ) input.getSchema(); + + // SOURCE CODE Field + sourceCode_text = toolkit.createText( form.getBody(), "", SWT.MULTI ); //$NON-NLS-1$ + sourceCode_text.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) ); + sourceCode_text.setEditable( false ); + + // Initialization from the "input" object class + initFieldsContentFromInput(); + } + + + private void initFieldsContentFromInput() + { + // SOURCE CODE Field + AttributeType[] attributeTypes = schema.getAttributeTypesAsArray(); + ObjectClass[] objectClasses = schema.getObjectClassesAsArray(); + + StringBuffer sb = new StringBuffer(); + + if ( attributeTypes.length != 0 ) + { + for ( int i = 0; i < attributeTypes.length; i++ ) + { + AttributeType attributeType = attributeTypes[i]; + sb.append( attributeType.write() ); + sb.append( "\n" ); //$NON-NLS-1$ + } + } + if ( objectClasses.length != 0 ) + { + for ( int i = 0; i < objectClasses.length; i++ ) + { + ObjectClass objectClass = objectClasses[i]; + sb.append( objectClass.write() ); + sb.append( "\n" ); //$NON-NLS-1$ + } + } + sourceCode_text.setText( sb.toString() ); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/StandardPerspective.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/StandardPerspective.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/StandardPerspective.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/StandardPerspective.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.perspectives; + + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.apache.directory.ldapstudio.schemas.view.viewers.HierarchicalViewer; +import org.apache.directory.ldapstudio.schemas.view.viewers.PoolManager; +import org.apache.directory.ldapstudio.schemas.view.viewers.SearchViewer; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + + +/** + * This is the standard perspective with hierarchical viewer on the top left, pool manager on bottom left, + * editor in top right, search field on bottom right. + * + */ +public class StandardPerspective implements IPerspectiveFactory +{ + public static final String ID = Application.PLUGIN_ID + ".perspective"; //$NON-NLS-1$ + + + public void createInitialLayout( IPageLayout layout ) + { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible( true ); + + layout.addStandaloneView( HierarchicalViewer.ID, true, IPageLayout.LEFT, 0.3f, editorArea ); + layout.getViewLayout( HierarchicalViewer.ID ).setCloseable( false ); + + layout.addStandaloneView( PoolManager.ID, true, IPageLayout.BOTTOM, 0.5f, HierarchicalViewer.ID ); + layout.getViewLayout( PoolManager.ID ).setCloseable( false ); + + layout.addStandaloneView( SearchViewer.ID, true, IPageLayout.BOTTOM, 0.7f, editorArea ); + layout.getViewLayout( SearchViewer.ID ).setCloseable( false ); + + layout.addPerspectiveShortcut( StandardPerspective.ID ); + //layout.addPerspectiveShortcut(TreePerspective.ID); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/TreePerspective.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/TreePerspective.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/TreePerspective.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/perspectives/TreePerspective.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.perspectives; + + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.apache.directory.ldapstudio.schemas.view.viewers.HierarchicalViewer; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + + +/** + * Shows only the tree view + * WARNING: This is a test perspective + * + */ +public class TreePerspective implements IPerspectiveFactory +{ + + public static final String ID = Application.PLUGIN_ID + ".treeperspective"; //$NON-NLS-1$ + + + public void createInitialLayout( IPageLayout layout ) + { + String editorArea = layout.getEditorArea(); + layout.setEditorAreaVisible( false ); + + layout.addStandaloneView( HierarchicalViewer.ID, true, IPageLayout.LEFT, 1f, editorArea ); + layout.getViewLayout( HierarchicalViewer.ID ).setCloseable( false ); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/GeneralPreferencePage.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/GeneralPreferencePage.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/GeneralPreferencePage.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/GeneralPreferencePage.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.preferences; + + +import java.io.IOException; + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.eclipse.core.runtime.preferences.ConfigurationScope; +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.jface.preference.StringFieldEditor; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.preferences.ScopedPreferenceStore; + + +/** + * General Preference Page (actually contains everything related to object classes + * and attribute types). + * From there you can configure the company OID and auto-prefix settings. + * + */ +public class GeneralPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage +{ + + public static final String COMPANY_OID = "prefs_company_oid"; //$NON-NLS-1$ + public static final String AUTO_OID = "prefs_auto_oid"; //$NON-NLS-1$ + + private ScopedPreferenceStore preferences; + + + public GeneralPreferencePage() + { + super( GRID ); + preferences = new ScopedPreferenceStore( new ConfigurationScope(), Application.PLUGIN_ID ); + setPreferenceStore( preferences ); + } + + + public void init( IWorkbench workbench ) + { + } + + + @Override + protected void createFieldEditors() + { + + StringFieldEditor oidEditor = new StringFieldEditor( COMPANY_OID, Messages + .getString( "GeneralPreferencePage.Your_organizations_default_OID" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( oidEditor ); + + BooleanFieldEditor autoOidEditor = new BooleanFieldEditor( AUTO_OID, Messages + .getString( "GeneralPreferencePage.Automatically_prefix_new_elements_with_this_OID" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( autoOidEditor ); + } + + + public boolean performOk() + { + try + { + preferences.save(); + } + catch ( IOException e ) + { + } + return super.performOk(); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/Messages.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/Messages.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/Messages.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/Messages.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.preferences; + + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + + +public class Messages +{ + private static final String BUNDLE_NAME = "org.apache.directory.ldapstudio.schemas.view.preferences.messages"; //$NON-NLS-1$ + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle( BUNDLE_NAME ); + + + private Messages() + { + } + + + public static String getString( String key ) + { + try + { + return RESOURCE_BUNDLE.getString( key ); + } + catch ( MissingResourceException e ) + { + return '!' + key + '!'; + } + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/SchemaPreferencePage.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/SchemaPreferencePage.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/SchemaPreferencePage.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/preferences/SchemaPreferencePage.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,108 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.preferences; + + +import java.io.IOException; + +import org.apache.directory.ldapstudio.schemas.controller.Application; +import org.eclipse.core.runtime.preferences.ConfigurationScope; +import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.DirectoryFieldEditor; +import org.eclipse.jface.preference.FieldEditorPreferencePage; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.preferences.ScopedPreferenceStore; + + +/** + * Schema Preference Page. + * From there you can access schema related preferences. + * + */ +public class SchemaPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage +{ + + public static final String DEFAULT_DIRECTORY = "prefs_default_directory"; //$NON-NLS-1$ + public static final String SAVE_WORKSPACE = "prefs_save_workspace"; //$NON-NLS-1$ + public static final String SPECIFIC_CORE = "prefs_specific_core"; //$NON-NLS-1$ + public static final String SPECIFIC_CORE_DIRECTORY = "prefs_specific_core_directory"; //$NON-NLS-1$ + + private ScopedPreferenceStore preferences; + + + public SchemaPreferencePage() + { + super( GRID ); + preferences = new ScopedPreferenceStore( new ConfigurationScope(), Application.PLUGIN_ID ); + setPreferenceStore( preferences ); + } + + + public void init( IWorkbench workbench ) + { + // TODO Auto-generated method stub + + } + + + @Override + protected void createFieldEditors() + { + + DirectoryFieldEditor directoryEditor = new DirectoryFieldEditor( DEFAULT_DIRECTORY, Messages + .getString( "SchemaPreferencePage.Default_save-load_dialogs_directory" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( directoryEditor ); + + BooleanFieldEditor saveWorkspaceEditor = new BooleanFieldEditor( SAVE_WORKSPACE, Messages + .getString( "SchemaPreferencePage.Save_schemas_configuration_when_exiting_LDAP_Studio" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( saveWorkspaceEditor ); + + BooleanFieldEditor specificCore = new BooleanFieldEditor( SPECIFIC_CORE, Messages + .getString( "SchemaPreferencePage.Use_specific_core_files" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( specificCore ); + + DirectoryFieldEditor coreDirectoryEditor = new DirectoryFieldEditor( SPECIFIC_CORE_DIRECTORY, Messages + .getString( "SchemaPreferencePage.Core_schemas_directory" ), //$NON-NLS-1$ + getFieldEditorParent() ); + + addField( coreDirectoryEditor ); + } + + + public boolean performOk() + { + try + { + preferences.save(); + } + catch ( IOException e ) + { + } + return super.performOk(); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalContentProvider.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalContentProvider.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalContentProvider.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalContentProvider.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,327 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.viewers; + + +import java.util.Collection; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.Iterator; + +import org.apache.directory.ldapstudio.schemas.model.AttributeType; +import org.apache.directory.ldapstudio.schemas.model.ObjectClass; +import org.apache.directory.ldapstudio.schemas.model.SchemaPool; +import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.AlphabeticalOrderComparator; +import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.AttributeTypeWrapper; +import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.IntermediateNode; +import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.ObjectClassWrapper; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; + + +public class HierarchicalContentProvider implements SortableContentProvider, IStructuredContentProvider, + ITreeContentProvider +{ + private SchemaPool schemaPool; + private Hashtable objectClassTable; + private Hashtable attributeTypeTable; + private Comparator order = new AlphabeticalOrderComparator(); + + + public HierarchicalContentProvider( SchemaPool schemaPool ) + { + this.schemaPool = schemaPool; + + objectClassTable = schemaPool.getObjectClassesAsHashTableByName(); + + attributeTypeTable = schemaPool.getAttributeTypesAsHashTableByName(); + } + + + /****************************************** + * Interfaces Implementation * + ******************************************/ + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) + */ + public Object[] getElements( Object inputElement ) + { + return getChildren( inputElement ); + } + + + /** + * Disposes of this content provider. This is called by the viewer when it is disposed. + */ + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() + { + } + + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) + */ + public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) + { + } + + + /****************************************** + * ITreeContentProvider Impl * + ******************************************/ + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) + */ + public Object[] getChildren( Object parentElement ) + { + + if ( parentElement instanceof ObjectClassWrapper ) + { + //we are looking for the childrens of the contained objectClass + ObjectClass objectClass = ( ObjectClass ) ( ( ( ObjectClassWrapper ) parentElement ).getMyObjectClass() ); + + IntermediateNode sub = new IntermediateNode( "Sub-types", ( ObjectClassWrapper ) parentElement, this ); //$NON-NLS-1$ + IntermediateNode may = new IntermediateNode( + "Optionnal Attributes", ( ObjectClassWrapper ) parentElement, this ); //$NON-NLS-1$ + IntermediateNode must = new IntermediateNode( + "Mandatory Attributes", ( ObjectClassWrapper ) parentElement, this ); //$NON-NLS-1$ + + //-> we need to compare each and every other objectClass's sup against them + //-> we also need to find a better way to do this (complexity wise) + + Collection objectClasses = objectClassTable.values(); + for ( Iterator iter = objectClasses.iterator(); iter.hasNext(); ) + { + ObjectClass oClass = ( ObjectClass ) iter.next(); + + //not this object class + if ( oClass.getOid() != objectClass.getOid() ) + { + String[] sups = oClass.getSuperiors(); + for ( String sup : sups ) + { + ObjectClass oClassSup = objectClassTable.get( sup ); + if ( oClassSup != null ) + { + //the current object class is a sup of oClass + if ( oClassSup.equals( objectClass ) ) + { + //we use an objectClass wrapper + sub.addElement( new ObjectClassWrapper( oClass, sub ) ); + break; //break only the inner for + } + } + } + } + } + + //complete optionnal attributes + String[] optAttributes = objectClass.getMay(); + for ( String name : optAttributes ) + { + AttributeType attr = attributeTypeTable.get( name ); + //A CHANGER, ON FAIT SAUTER LES ATTR QUI NE SONT PAS DEFINIS + //DANS LE SCHEMA COURANT (ATTRS PAR DEFAUT) + if ( attr == null ) + continue; + //we use an attribute-type wrapper + may.addElement( new AttributeTypeWrapper( attr, may ) ); + } + + //complete mandatory attributes + String[] mandAttributes = objectClass.getMust(); + for ( String name : mandAttributes ) + { + AttributeType attr = attributeTypeTable.get( name ); + //A CHANGER, ON FAIT SAUTER LES ATTR QUI NE SONT PAS DEFINIS + //DANS LE SCHEMA COURANT (ATTRS PAR DEFAUT) + if ( attr == null ) + continue; + + //we use an attribute-type wrapper + must.addElement( new AttributeTypeWrapper( attr, must ) ); + } + + return new Object[] + { sub, may, must }; + } + + else if ( parentElement instanceof IntermediateNode ) + { + IntermediateNode intermediate = ( IntermediateNode ) parentElement; + + if ( intermediate.getName().equals( "**Primary Node**" ) ) { //$NON-NLS-1$ + //if we are asked for the primary node it's because the whole viewer + //is beeing refreshed + // -> the pool has been modified or it's the first display + // -> we need to regenerate the hashmaps containing the schemas elements + refresh(); + + //clear the primary node (because it's always the same instance we need to + //refresh it manually) + intermediate.clearChildrens(); + + //bootstrap the tree exploring process by adding the top node into the tree + ObjectClass top = schemaPool.getObjectClass( "top" ); //$NON-NLS-1$ + if ( top != null ) + { + ObjectClassWrapper topWrapper = new ObjectClassWrapper( top, intermediate ); + intermediate.addElement( topWrapper ); + } + + //add the unresolved object-classes to the top of the hierarchy + Collection objectClasses = objectClassTable.values(); + for ( Iterator iter = objectClasses.iterator(); iter.hasNext(); ) + { + ObjectClass oClass = ( ObjectClass ) iter.next(); + String[] sups = oClass.getSuperiors(); + //if no supperiors had been set + if ( sups.length == 0 ) + { + ObjectClassWrapper wrapper = new ObjectClassWrapper( oClass, intermediate ); + wrapper.setState( ObjectClassWrapper.State.unResolved ); + intermediate.addElement( wrapper ); + } + else + { + for ( String sup : sups ) + { + ObjectClass oClassSup = objectClassTable.get( sup ); + if ( oClassSup == null ) + { + ObjectClassWrapper wrapper = new ObjectClassWrapper( oClass, intermediate ); + wrapper.setState( ObjectClassWrapper.State.unResolved ); + intermediate.addElement( wrapper ); + } + } + } + } + } + + return intermediate.getChildren(); + } + return new Object[0]; + } + + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object) + */ + public Object getParent( Object element ) + { + if ( element instanceof ObjectClassWrapper ) + { + return ( ( ObjectClassWrapper ) element ).getParent(); + } + else if ( element instanceof AttributeTypeWrapper ) + { + return ( ( AttributeTypeWrapper ) element ).getParent(); + } + else if ( element instanceof IntermediateNode ) + { + return ( ( IntermediateNode ) element ).getParent(); + } + + return null; + } + + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object) + */ + public boolean hasChildren( Object element ) + { + if ( element instanceof ObjectClassWrapper ) + { + return true; + } + else if ( element instanceof AttributeTypeWrapper ) + { + return false; + } + else if ( element instanceof IntermediateNode ) + { + if ( ( ( IntermediateNode ) element ).getChildren().length > 0 ) + return true; + } + + return false; + } + + + /****************************************** + * Internal Logic * + ******************************************/ + + private void refresh() + { + objectClassTable = schemaPool.getObjectClassesAsHashTableByName(); + + attributeTypeTable = schemaPool.getAttributeTypesAsHashTableByName(); + } + + + /****************************************** + * Logic * + ******************************************/ + + /** + * Specify the comparator that will be used to sort the elements in the view + * @param order the comparator + */ + public void setOrder( Comparator order ) + { + this.order = order; + } + + + /** + * Returns the comparator used to sort the elements in the view + * @return + */ + public Comparator getOrder() + { + return order; + } + + + /** + * Initialize a tree viewer to display the information provided by the specified content + * provider + * @param viewer the tree viewer + */ + public void bindToTreeViewer( TreeViewer viewer ) + { + viewer.setContentProvider( this ); + viewer.setLabelProvider( new HierarchicalLabelProvider() ); + + IntermediateNode invisibleNode = new IntermediateNode( "**Primary Node**", null, this ); //$NON-NLS-1$ + viewer.setInput( invisibleNode ); + } +} Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalLabelProvider.java URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalLabelProvider.java?view=auto&rev=475786 ============================================================================== --- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalLabelProvider.java (added) +++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-schemas-plugin/src/main/java/org/apache/directory/ldapstudio/schemas/view/viewers/HierarchicalLabelProvider.java Thu Nov 16 08:05:20 2006 @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.directory.ldapstudio.schemas.view.viewers; + + +import org.apache.directory.ldapstudio.schemas.view.viewers.wrappers.DisplayableTreeElement; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.PlatformUI; + + +/** + * Eclipse RPC programming pattern for tree-viewers + * + */ +public class HierarchicalLabelProvider extends LabelProvider +{ + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object) + */ + public String getText( Object obj ) + { + if ( obj instanceof DisplayableTreeElement ) + return ( ( DisplayableTreeElement ) obj ).getDisplayName(); + + //default + return obj.toString(); + } + + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object) + */ + public Image getImage( Object obj ) + { + if ( obj instanceof DisplayableTreeElement ) + return ( ( DisplayableTreeElement ) obj ).getDisplayImage(); + + //default + return PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_OBJS_WARN_TSK ); + + } +}