You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2007/07/04 15:05:20 UTC

svn commit: r553196 [4/5] - in /directory/studio/trunk/studio-apacheds-schemaeditor: ./ META-INF/ src/main/java/org/apache/directory/studio/apacheds/schemaeditor/ src/main/java/org/apache/directory/studio/apacheds/schemaeditor/controller/ src/main/java...

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorOverviewPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorOverviewPage.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorOverviewPage.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorOverviewPage.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,1087 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.objectclass;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.shared.asn1.primitives.OID;
+import org.apache.directory.shared.ldap.schema.ObjectClassTypeEnum;
+import org.apache.directory.studio.apacheds.schemaeditor.Activator;
+import org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.apacheds.schemaeditor.model.AttributeTypeImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.view.ViewUtils;
+import org.apache.directory.studio.apacheds.schemaeditor.view.dialogs.AttributeTypeSelectionDialog;
+import org.apache.directory.studio.apacheds.schemaeditor.view.dialogs.EditAliasesDialog;
+import org.apache.directory.studio.apacheds.schemaeditor.view.dialogs.ObjectClassSelectionDialog;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.NonExistingAttributeType;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.NonExistingObjectClass;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.attributetype.AttributeTypeEditor;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.attributetype.AttributeTypeEditorInput;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.schema.SchemaEditor;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.schema.SchemaEditorInput;
+import org.apache.log4j.Logger;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+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.MouseAdapter;
+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.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+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.Label;
+import org.eclipse.swt.widgets.Table;
+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;
+
+
+/**
+ * This class is the Overview Page of the Object Class Editor
+ */
+public class ObjectClassEditorOverviewPage extends FormPage
+{
+    /** The page ID */
+    public static final String ID = ObjectClassEditor.ID + "overviewPage"; //$NON-NLS-1$
+
+    /** The page title*/
+    public static final String TITLE = "Overview";
+
+    /** The original object class */
+    private ObjectClassImpl originalObjectClass;
+
+    /** The modified object class */
+    private ObjectClassImpl modifiedObjectClass;
+
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    // UI fields
+    private Label aliasesLabel;
+    private Button aliasesButton;
+    private Text oidText;
+    private Hyperlink schemaLink;
+    private Label schemaLabel;
+    private Text descriptionText;
+    private Table superiorsTable;
+    private TableViewer superiorsTableViewer;
+    private Button addButtonSuperiorsTable;
+    private Button removeButtonSuperiorsTable;
+    private Combo classTypeCombo;
+    private Button obsoleteCheckbox;
+    private Table mandatoryAttributesTable;
+    private TableViewer mandatoryAttributesTableViewer;
+    private Button addButtonMandatoryTable;
+    private Button removeButtonMandatoryTable;
+    private Table optionalAttributesTable;
+    private TableViewer optionalAttributesTableViewer;
+    private Button addButtonOptionalTable;
+    private Button removeButtonOptionalTable;
+
+    // Listeners
+    /** The listener for Aliases Button Widget */
+    private SelectionAdapter aliasesButtonListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            EditAliasesDialog editDialog = new EditAliasesDialog( modifiedObjectClass.getNames() );
+            if ( editDialog.open() != Window.OK )
+            {
+                return;
+            }
+            if ( editDialog.isDirty() )
+            {
+                modifiedObjectClass.setNames( editDialog.getAliases() );
+                if ( ( modifiedObjectClass.getNames() != null ) && ( modifiedObjectClass.getNames().length != 0 ) )
+                {
+                    aliasesLabel.setText( ViewUtils.concateAliases( modifiedObjectClass.getNames() ) );
+                }
+                else
+                {
+                    aliasesLabel.setText( "(None)" );
+                }
+                setEditorDirty();
+            }
+        }
+    };
+
+    /** The Modify listener for the OID Text Widget */
+    private ModifyListener oidTextModifyListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            oidText.setForeground( ViewUtils.COLOR_BLACK );
+            oidText.setToolTipText( "" ); //$NON-NLS-1$
+
+            String oid = oidText.getText();
+
+            if ( OID.isOID( oid ) )
+            {
+                if ( ( originalObjectClass.getOid().equals( oid ) )
+                    || !( schemaHandler.isAliasOrOidAlreadyTaken( oid ) ) )
+                {
+                    modifiedObjectClass.setOid( oid );
+                    setEditorDirty();
+                }
+                else
+                {
+                    oidText.setForeground( ViewUtils.COLOR_RED );
+                    oidText.setToolTipText( "An element with same oid already exists." );
+                }
+            }
+            else
+            {
+                oidText.setForeground( ViewUtils.COLOR_RED );
+                oidText.setToolTipText( "Malformed_OID." );
+            }
+        }
+    };
+
+    /** The Verify listener for the OID Text Widget */
+    private VerifyListener oidTextVerifyListener = new VerifyListener()
+    {
+        public void verifyText( VerifyEvent e )
+        {
+            if ( !e.text.matches( "([0-9]*\\.?)*" ) ) //$NON-NLS-1$
+            {
+                e.doit = false;
+            }
+        }
+    };
+
+    /** The listener for the Schema Hyperlink Widget*/
+    private HyperlinkAdapter schemaLinkListener = new HyperlinkAdapter()
+    {
+        public void linkActivated( HyperlinkEvent e )
+        {
+            IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+            SchemaEditorInput input = new SchemaEditorInput( schemaHandler.getSchema( modifiedObjectClass.getSchema() ) );
+            String editorId = SchemaEditor.ID;
+            try
+            {
+                page.openEditor( input, editorId );
+            }
+            catch ( PartInitException exception )
+            {
+                Logger.getLogger( ObjectClassEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+            }
+        }
+    };
+
+    /** The listener for Description Text Widget */
+    private ModifyListener descriptionTextListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            int caretPosition = descriptionText.getCaretPosition();
+            modifiedObjectClass.setDescription( descriptionText.getText() );
+            descriptionText.setSelection( caretPosition );
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Class Type Widget */
+    private ModifyListener classTypeListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            if ( classTypeCombo.getSelectionIndex() == 0 )
+            {
+                modifiedObjectClass.setType( ObjectClassTypeEnum.ABSTRACT );
+            }
+            else if ( classTypeCombo.getSelectionIndex() == 1 )
+            {
+                modifiedObjectClass.setType( ObjectClassTypeEnum.AUXILIARY );
+            }
+            else if ( classTypeCombo.getSelectionIndex() == 2 )
+            {
+                modifiedObjectClass.setType( ObjectClassTypeEnum.STRUCTURAL );
+            }
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Obsolete Widget */
+    private SelectionAdapter obsoleteListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            modifiedObjectClass.setObsolete( obsoleteCheckbox.getSelection() );
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Mandatory Attributes Table Widget */
+    private MouseListener mandatoryAttributesTableListener = new MouseListener()
+    {
+        public void mouseDoubleClick( MouseEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) mandatoryAttributesTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                if ( selectedElement instanceof AttributeTypeImpl )
+                {
+                    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+                    try
+                    {
+                        page.openEditor( new AttributeTypeEditorInput( ( AttributeTypeImpl ) selectedElement ),
+                            AttributeTypeEditor.ID );
+                    }
+                    catch ( PartInitException exception )
+                    {
+                        Logger.getLogger( ObjectClassEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+                    }
+                }
+            }
+        }
+
+
+        public void mouseDown( MouseEvent e )
+        {
+        }
+
+
+        public void mouseUp( MouseEvent e )
+        {
+            removeButtonMandatoryTable.setEnabled( mandatoryAttributesTable.getSelection().length != 0 );
+        }
+    };
+
+    /** The listener for Add Button Widget of the Mandatory Attributes section */
+    private SelectionAdapter addButtonMandatoryTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            AttributeTypeSelectionDialog dialog = new AttributeTypeSelectionDialog();
+            List<AttributeTypeImpl> hiddenATs = new ArrayList<AttributeTypeImpl>();
+            for ( String must : modifiedObjectClass.getMustNamesList() )
+            {
+                AttributeTypeImpl at = schemaHandler.getAttributeType( must );
+                if ( at != null )
+                {
+                    hiddenATs.add( at );
+                }
+            }
+            for ( String may : modifiedObjectClass.getMayNamesList() )
+            {
+                AttributeTypeImpl at = schemaHandler.getAttributeType( may );
+                if ( at != null )
+                {
+                    hiddenATs.add( at );
+                }
+            }
+            dialog.setHiddenAttributeTypes( hiddenATs.toArray( new AttributeTypeImpl[0] ) );
+
+            if ( dialog.open() != Window.OK )
+            {
+                return;
+            }
+
+            AttributeTypeImpl at = dialog.getSelectedAttributeType();
+            if ( at == null )
+            {
+                return;
+            }
+
+            List<String> newMusts = new ArrayList<String>();
+            String[] musts = modifiedObjectClass.getMustNamesList();
+            for ( String must : musts )
+            {
+                newMusts.add( must );
+            }
+            newMusts.add( at.getNames()[0] );
+            modifiedObjectClass.setMustNamesList( newMusts.toArray( new String[0] ) );
+
+            fillInMandatoryAttributesTable();
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Remove Button Widget of the Mandatory Attributes section */
+    private SelectionAdapter removeButtonMandatoryTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) mandatoryAttributesTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                List<String> newMusts = new ArrayList<String>();
+                String[] musts = modifiedObjectClass.getMustNamesList();
+                for ( String must : musts )
+                {
+                    newMusts.add( must );
+                }
+
+                if ( selectedElement instanceof AttributeTypeImpl )
+                {
+                    for ( String name : ( ( AttributeTypeImpl ) selectedElement ).getNames() )
+                    {
+                        newMusts.remove( name );
+                    }
+                }
+                else if ( selectedElement instanceof NonExistingAttributeType )
+                {
+                    newMusts.remove( ( ( NonExistingAttributeType ) selectedElement ).getName() );
+                }
+
+                modifiedObjectClass.setMustNamesList( newMusts.toArray( new String[0] ) );
+
+                fillInMandatoryAttributesTable();
+                addButtonMandatoryTable.setFocus();
+                removeButtonMandatoryTable.setEnabled( mandatoryAttributesTable.getSelection().length != 0 );
+                setEditorDirty();
+            }
+        }
+    };
+
+    /** The listener for Optional Attributes Table Widget */
+    private MouseListener optionalAttributesTableListener = new MouseAdapter()
+    {
+        public void mouseDoubleClick( MouseEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) optionalAttributesTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                if ( selectedElement instanceof AttributeTypeImpl )
+                {
+                    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+                    try
+                    {
+                        page.openEditor( new AttributeTypeEditorInput( ( AttributeTypeImpl ) selectedElement ),
+                            AttributeTypeEditor.ID );
+                    }
+                    catch ( PartInitException exception )
+                    {
+                        Logger.getLogger( ObjectClassEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+                    }
+                }
+            }
+        }
+
+
+        public void mouseUp( MouseEvent e )
+        {
+            removeButtonOptionalTable.setEnabled( optionalAttributesTable.getSelection().length != 0 );
+        }
+    };
+
+    /** The listener for Add Button Widget of the Optional Attributes section */
+    private SelectionAdapter addButtonOptionalTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            AttributeTypeSelectionDialog dialog = new AttributeTypeSelectionDialog();
+            List<AttributeTypeImpl> hiddenATs = new ArrayList<AttributeTypeImpl>();
+            for ( String must : modifiedObjectClass.getMustNamesList() )
+            {
+                AttributeTypeImpl at = schemaHandler.getAttributeType( must );
+                if ( at != null )
+                {
+                    hiddenATs.add( at );
+                }
+            }
+            for ( String may : modifiedObjectClass.getMayNamesList() )
+            {
+                AttributeTypeImpl at = schemaHandler.getAttributeType( may );
+                if ( at != null )
+                {
+                    hiddenATs.add( at );
+                }
+            }
+            dialog.setHiddenAttributeTypes( hiddenATs.toArray( new AttributeTypeImpl[0] ) );
+
+            if ( dialog.open() != Window.OK )
+            {
+                return;
+            }
+
+            AttributeTypeImpl at = dialog.getSelectedAttributeType();
+            if ( at == null )
+            {
+                return;
+            }
+
+            List<String> newMays = new ArrayList<String>();
+            String[] mays = modifiedObjectClass.getMayNamesList();
+            for ( String may : mays )
+            {
+                newMays.add( may );
+            }
+            newMays.add( at.getNames()[0] );
+            modifiedObjectClass.setMayNamesList( newMays.toArray( new String[0] ) );
+
+            fillInOptionalAttributesTable();
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Remove Button Widget of the Optional Attributes section */
+    private SelectionAdapter removeButtonOptionalTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) optionalAttributesTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                List<String> newMays = new ArrayList<String>();
+                String[] mays = modifiedObjectClass.getMayNamesList();
+                for ( String may : mays )
+                {
+                    newMays.add( may );
+                }
+
+                if ( selectedElement instanceof AttributeTypeImpl )
+                {
+                    for ( String name : ( ( AttributeTypeImpl ) selectedElement ).getNames() )
+                    {
+                        newMays.remove( name );
+                    }
+                }
+                else if ( selectedElement instanceof NonExistingAttributeType )
+                {
+                    newMays.remove( ( ( NonExistingAttributeType ) selectedElement ).getName() );
+                }
+
+                modifiedObjectClass.setMayNamesList( newMays.toArray( new String[0] ) );
+
+                fillInOptionalAttributesTable();
+                addButtonOptionalTable.setFocus();
+                removeButtonOptionalTable.setEnabled( optionalAttributesTable.getSelection().length != 0 );
+                setEditorDirty();
+            }
+        }
+    };
+
+    /** The listener for Superiors Table Widget */
+    private MouseListener superiorsTableListener = new MouseAdapter()
+    {
+        public void mouseDoubleClick( MouseEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) superiorsTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                if ( selectedElement instanceof ObjectClassImpl )
+                {
+                    IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+                    try
+                    {
+                        page.openEditor( new ObjectClassEditorInput( ( ObjectClassImpl ) selectedElement ),
+                            ObjectClassEditor.ID );
+                    }
+                    catch ( PartInitException exception )
+                    {
+                        Logger.getLogger( ObjectClassEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+                    }
+                }
+            }
+        }
+
+
+        public void mouseUp( MouseEvent e )
+        {
+            removeButtonSuperiorsTable.setEnabled( superiorsTable.getSelection().length != 0 );
+        }
+    };
+
+    /** The listener for Add Button Widget of the Superiors Table */
+    private SelectionAdapter addButtonSuperiorsTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            ObjectClassSelectionDialog dialog = new ObjectClassSelectionDialog();
+            List<ObjectClassImpl> hiddenOCs = new ArrayList<ObjectClassImpl>();
+            for ( String sup : modifiedObjectClass.getSuperClassesNames() )
+            {
+                ObjectClassImpl oc = schemaHandler.getObjectClass( sup );
+                if ( oc != null )
+                {
+                    hiddenOCs.add( oc );
+                }
+            }
+            hiddenOCs.add( originalObjectClass );
+            dialog.setHiddenObjectClasses( hiddenOCs.toArray( new ObjectClassImpl[0] ) );
+
+            if ( dialog.open() != Window.OK )
+            {
+                return;
+            }
+
+            ObjectClassImpl oc = dialog.getSelectedObjectClass();
+            if ( oc == null )
+            {
+                return;
+            }
+
+            List<String> superiors = new ArrayList<String>();
+            String[] sups = modifiedObjectClass.getSuperClassesNames();
+            for ( String sup : sups )
+            {
+                superiors.add( sup );
+            }
+            superiors.add( oc.getNames()[0] );
+            modifiedObjectClass.setSuperClassesNames( superiors.toArray( new String[0] ) );
+
+            fillInSuperiorsTable();
+            setEditorDirty();
+        }
+    };
+
+    /** The listener for Remove Button Widget of the Superiors Table */
+    private SelectionAdapter removeButtonSuperiorsTableListener = new SelectionAdapter()
+    {
+        public void widgetSelected( SelectionEvent e )
+        {
+            StructuredSelection selection = ( StructuredSelection ) superiorsTableViewer.getSelection();
+            if ( selection.isEmpty() )
+            {
+                return;
+            }
+
+            Object selectedElement = selection.getFirstElement();
+            if ( selectedElement != null )
+            {
+                List<String> superiors = new ArrayList<String>();
+                String[] sups = modifiedObjectClass.getSuperClassesNames();
+                for ( String sup : sups )
+                {
+                    superiors.add( sup );
+                }
+
+                if ( selectedElement instanceof ObjectClassImpl )
+                {
+                    for ( String name : ( ( ObjectClassImpl ) selectedElement ).getNames() )
+                    {
+                        superiors.remove( name );
+                    }
+                }
+                else if ( selectedElement instanceof NonExistingObjectClass )
+                {
+                    superiors.remove( ( ( NonExistingObjectClass ) selectedElement ).getName() );
+                }
+
+                modifiedObjectClass.setSuperClassesNames( superiors.toArray( new String[0] ) );
+
+                fillInSuperiorsTable();
+                addButtonSuperiorsTable.setFocus();
+                removeButtonSuperiorsTable.setEnabled( superiorsTable.getSelection().length != 0 );
+                setEditorDirty();
+            }
+        }
+    };
+
+
+    /**
+     * Default constructor
+     * @param editor
+     *      the associated editor
+     */
+    public ObjectClassEditorOverviewPage( FormEditor editor )
+    {
+        super( editor, ID, TITLE );
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+        //        schemaHandler.addListener( this ); // TODO
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
+     */
+    protected void createFormContent( IManagedForm managedForm )
+    {
+        // Getting the original and modified object classes
+        modifiedObjectClass = ( ( ObjectClassEditor ) getEditor() ).getModifiedObjectClass();
+        originalObjectClass = ( ( ObjectClassEditor ) getEditor() ).getOriginalObjectClass();
+
+        // Creating the base UI
+        ScrolledForm form = managedForm.getForm();
+        FormToolkit toolkit = managedForm.getToolkit();
+        form.getBody().setLayout( new GridLayout() );
+
+        // General Information Section
+        createGeneralInformationSection( form.getBody(), toolkit );
+
+        Composite bottomComposite = toolkit.createComposite( form.getBody() );
+        bottomComposite.setLayout( new GridLayout( 2, true ) );
+        bottomComposite.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Mandatory Attributes Section
+        createMandatoryAttributesSection( bottomComposite, toolkit );
+
+        // Optionnal Attributes Section
+        createOptionalAttributesSection( bottomComposite, toolkit );
+
+        // Enabling or disabling the fields
+        //        setFieldsEditableState();
+
+        // Filling the UI with values from the object class
+        fillInUiFields();
+
+        // Listeners initialization
+        addListeners();
+    }
+
+
+    /**
+     * Creates the General Information Section.
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the FormToolKit to use
+     */
+    private void createGeneralInformationSection( Composite parent, FormToolkit toolkit )
+    {
+        // General Information Section
+        Section section_general_information = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
+        section_general_information.setDescription( "General_Information_Section_Description" ); //TODO
+        section_general_information.setText( "General_Information_Section_Text" ); //TODO
+        section_general_information.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, true ) );
+
+        // Creating the layout of the section
+        Composite client_general_information = toolkit.createComposite( section_general_information );
+        client_general_information.setLayout( new GridLayout( 3, false ) );
+        toolkit.paintBordersFor( client_general_information );
+        section_general_information.setClient( client_general_information );
+
+        // ALIASES Button
+        toolkit.createLabel( client_general_information, "Aliases" );
+        aliasesLabel = toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
+        aliasesLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+        toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
+        aliasesButton = toolkit.createButton( client_general_information, "Edit_Aliases", SWT.PUSH );
+        aliasesButton.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false, 2, 1 ) );
+
+        // OID Field
+        toolkit.createLabel( client_general_information, "OID" );
+        oidText = toolkit.createText( client_general_information, "" ); //$NON-NLS-1$
+        oidText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+
+        // SCHEMA Field
+        schemaLink = toolkit.createHyperlink( client_general_information, "Schema", SWT.WRAP );
+        schemaLabel = toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
+        schemaLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+
+        // DESCRIPTION Field
+        toolkit.createLabel( client_general_information, "Description" );
+        descriptionText = toolkit.createText( client_general_information, "", SWT.MULTI | SWT.V_SCROLL ); //$NON-NLS-1$
+        GridData descriptionGridData = new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 );
+        descriptionGridData.heightHint = 42;
+        descriptionText.setLayoutData( descriptionGridData );
+
+        // SUPERIORS Table
+        toolkit.createLabel( client_general_information, "Superior classes" );
+        superiorsTable = toolkit.createTable( client_general_information, SWT.SINGLE | SWT.V_SCROLL );
+        GridData gridData = new GridData( SWT.FILL, SWT.NONE, true, false );
+        gridData.heightHint = 45;
+        gridData.minimumHeight = 45;
+        superiorsTable.setLayoutData( gridData );
+        superiorsTableViewer = new TableViewer( superiorsTable );
+        superiorsTableViewer.setContentProvider( new ObjectClassEditorSuperiorsTableContentProvider() );
+        superiorsTableViewer.setLabelProvider( new ObjectClassEditorSuperiorsTableLabelProvider() );
+        Composite superiorsButtonComposite = toolkit.createComposite( client_general_information );
+        superiorsButtonComposite.setLayout( new GridLayout() );
+        addButtonSuperiorsTable = toolkit.createButton( superiorsButtonComposite, "Add...", SWT.PUSH );
+        addButtonSuperiorsTable.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) );
+        removeButtonSuperiorsTable = toolkit.createButton( superiorsButtonComposite, "Remove", SWT.PUSH );
+        removeButtonSuperiorsTable.setLayoutData( new GridData( SWT.FILL, SWT.NONE, false, false ) );
+
+        // CLASS TYPE Combo
+        toolkit.createLabel( client_general_information, "Class type:" );
+        classTypeCombo = new Combo( client_general_information, SWT.READ_ONLY | SWT.SINGLE );
+        classTypeCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+        initClassTypeCombo();
+
+        // OBSOLETE Checkbox
+        toolkit.createLabel( client_general_information, "" ); //$NON-NLS-1$
+        obsoleteCheckbox = toolkit.createButton( client_general_information, "Obsolete", SWT.CHECK );
+        obsoleteCheckbox.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+    }
+
+
+    /**
+     * Creates the Mandatory Attributes Section.
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the FormToolKit to use
+     */
+    private void createMandatoryAttributesSection( Composite parent, FormToolkit toolkit )
+    {
+        // MANDATORY ATTRIBUTES Section
+        Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
+        section.setText( "Mandatory_Attribute_Section_Text" ); //TODO
+        section.setDescription( "Mandatory_Attribute_Section_Description" ); //TODO
+        section.setExpanded( true );
+        Composite client = toolkit.createComposite( section );
+        section.setClient( client );
+        GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false );
+        section.setLayoutData( gd );
+        toolkit.paintBordersFor( client );
+
+        GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        client.setLayout( layout );
+
+        mandatoryAttributesTable = toolkit.createTable( client, SWT.NULL );
+        gd = new GridData( SWT.FILL, SWT.NONE, true, false );
+        gd.verticalSpan = 2;
+        gd.heightHint = 108;
+        mandatoryAttributesTable.setLayoutData( gd );
+        mandatoryAttributesTableViewer = new TableViewer( mandatoryAttributesTable );
+        mandatoryAttributesTableViewer.setContentProvider( new ObjectClassEditorAttributesTableContentProvider() );
+        mandatoryAttributesTableViewer.setLabelProvider( new ObjectClassEditorAttributesTableLabelProvider() );
+
+        addButtonMandatoryTable = toolkit.createButton( client, "Add...", SWT.PUSH );
+        removeButtonMandatoryTable = toolkit.createButton( client, "Remove", SWT.PUSH );
+        gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING );
+        addButtonMandatoryTable.setLayoutData( gd );
+        removeButtonMandatoryTable.setLayoutData( gd );
+
+        // By default, no element is selected
+        removeButtonMandatoryTable.setEnabled( false );
+    }
+
+
+    /**
+     * Creates the Optional Attributes Section.
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the FormToolKit to use
+     */
+    private void createOptionalAttributesSection( Composite parent, FormToolkit toolkit )
+    {
+        // OPTIONAL ATTRIBUTES Section
+        Section section = toolkit.createSection( parent, Section.DESCRIPTION | Section.TITLE_BAR );
+        section.setText( "Optionnal_Attributes_Section_Text" ); //TODO
+        section.setDescription( "Optionnal_Attributes_Section_Description" ); //TODO
+        section.setExpanded( true );
+        Composite client = toolkit.createComposite( section );
+        section.setClient( client );
+        GridData gd = new GridData( SWT.FILL, SWT.NONE, true, false );
+        section.setLayoutData( gd );
+        toolkit.paintBordersFor( client );
+
+        GridLayout layout = new GridLayout();
+        layout.numColumns = 2;
+        client.setLayout( layout );
+
+        optionalAttributesTable = toolkit.createTable( client, SWT.SINGLE | SWT.V_SCROLL );
+        gd = new GridData( SWT.FILL, SWT.NONE, true, false );
+        gd.verticalSpan = 2;
+        gd.heightHint = 108;
+        optionalAttributesTable.setLayoutData( gd );
+        optionalAttributesTableViewer = new TableViewer( optionalAttributesTable );
+        optionalAttributesTableViewer.setContentProvider( new ObjectClassEditorAttributesTableContentProvider() );
+        optionalAttributesTableViewer.setLabelProvider( new ObjectClassEditorAttributesTableLabelProvider() );
+
+        addButtonOptionalTable = toolkit.createButton( client, "Add...", SWT.PUSH );
+        removeButtonOptionalTable = toolkit.createButton( client, "Remove", SWT.PUSH );
+        gd = new GridData( GridData.VERTICAL_ALIGN_BEGINNING );
+        addButtonOptionalTable.setLayoutData( gd );
+        removeButtonOptionalTable.setLayoutData( gd );
+
+        // By default, no element is selected
+        removeButtonOptionalTable.setEnabled( false );
+    }
+
+
+    /**
+     * Initializes the UI fields from the input.
+     */
+    private void fillInUiFields()
+    {
+        // ALIASES Label
+        if ( ( modifiedObjectClass.getNames() != null ) && ( modifiedObjectClass.getNames().length != 0 ) )
+        {
+            aliasesLabel.setText( ViewUtils.concateAliases( modifiedObjectClass.getNames() ) );
+        }
+        else
+        {
+            aliasesLabel.setText( "(None)" );
+        }
+
+        // OID Field
+        if ( modifiedObjectClass.getOid() != null )
+        {
+            oidText.setText( modifiedObjectClass.getOid() );
+        }
+
+        schemaLabel.setText( modifiedObjectClass.getSchema() );
+
+        // DESCRIPTION Field
+        if ( modifiedObjectClass.getDescription() != null )
+        {
+            descriptionText.setText( modifiedObjectClass.getDescription() );
+        }
+
+        // SUPERIORS Table
+        fillInSuperiorsTable();
+
+        // CLASS TYPE Combo
+        fillInClassType();
+
+        // OBSOLETE Checkbox
+        obsoleteCheckbox.setSelection( modifiedObjectClass.isObsolete() );
+
+        // MANDATORY ATTRIBUTES Table
+        fillInMandatoryAttributesTable();
+
+        // OPTIONNAL ATTRIBUTES Table
+        fillInOptionalAttributesTable();
+    }
+
+
+    /**
+     * Fills in the Superiors Table.
+     */
+    private void fillInSuperiorsTable()
+    {
+        superiorsTableViewer.setInput( modifiedObjectClass.getSuperClassesNames() );
+    }
+
+
+    /**
+     * Initializes the Class Type Combo
+     */
+    private void initClassTypeCombo()
+    {
+        classTypeCombo.add( "Abstract", 0 );
+        classTypeCombo.add( "Auxiliary", 1 );
+        classTypeCombo.add( "Structural", 2 );
+    }
+
+
+    /**
+     * Fills in the Class Type Combo
+     */
+    private void fillInClassType()
+    {
+        if ( modifiedObjectClass.getType() == ObjectClassTypeEnum.ABSTRACT )
+        {
+            classTypeCombo.select( 0 );
+        }
+        else if ( modifiedObjectClass.getType() == ObjectClassTypeEnum.AUXILIARY )
+        {
+            classTypeCombo.select( 1 );
+        }
+        else if ( modifiedObjectClass.getType() == ObjectClassTypeEnum.STRUCTURAL )
+        {
+            classTypeCombo.select( 2 );
+        }
+    }
+
+
+    /**
+     * Initializes the Mandatory Attributes Table
+     */
+    private void fillInMandatoryAttributesTable()
+    {
+        mandatoryAttributesTableViewer.setInput( modifiedObjectClass.getMustNamesList() );
+    }
+
+
+    /**
+     * Initializes the Optional Attributes Table
+     */
+    private void fillInOptionalAttributesTable()
+    {
+        optionalAttributesTableViewer.setInput( modifiedObjectClass.getMayNamesList() );
+    }
+
+
+    //    /**
+    //     * Enalbes/Disables the UI fields
+    //     */
+    //    private void setFieldsEditableState()
+    //    {
+    //        if ( modifiedObjectClass.getOriginatingSchema().type == Schema.SchemaType.coreSchema )
+    //        {
+    //            // If the object class is in a core-schema file, we disable editing
+    //            aliasesButton.setEnabled( false );
+    //            oidText.setEditable( false );
+    //            descriptionText.setEditable( false );
+    //            addButtonSuperiorsTable.setEnabled( false );
+    //            removeButtonSuperiorsTable.setEnabled( false );
+    //            classTypeCombo.setEnabled( false );
+    //            obsoleteCheckbox.setEnabled( false );
+    //            addButtonMandatoryTable.setEnabled( false );
+    //            removeButtonMandatoryTable.setEnabled( false );
+    //            addButtonOptionalTable.setEnabled( false );
+    //            removeButtonOptionalTable.setEnabled( false );
+    //        }
+    //        else
+    //        {
+    //            removeButtonSuperiorsTable.setEnabled( superiorsTable.getSelectionIndex() != -1 );
+    //            removeButtonMandatoryTable.setEnabled( mandatoryAttributesTable.getSelectionIndex() != -1 );
+    //            removeButtonOptionalTable.setEnabled( optionalAttributesTable.getSelectionIndex() != -1 );
+    //        }
+    //    }
+
+    /**
+     * Adds listeners to UI fields
+     */
+    private void addListeners()
+    {
+        aliasesButton.addSelectionListener( aliasesButtonListener );
+        oidText.addModifyListener( oidTextModifyListener );
+        oidText.addVerifyListener( oidTextVerifyListener );
+        descriptionText.addModifyListener( descriptionTextListener );
+        addButtonSuperiorsTable.addSelectionListener( addButtonSuperiorsTableListener );
+        removeButtonSuperiorsTable.addSelectionListener( removeButtonSuperiorsTableListener );
+        classTypeCombo.addModifyListener( classTypeListener );
+        obsoleteCheckbox.addSelectionListener( obsoleteListener );
+        addButtonMandatoryTable.addSelectionListener( addButtonMandatoryTableListener );
+        removeButtonMandatoryTable.addSelectionListener( removeButtonMandatoryTableListener );
+        addButtonOptionalTable.addSelectionListener( addButtonOptionalTableListener );
+        removeButtonOptionalTable.addSelectionListener( removeButtonOptionalTableListener );
+        schemaLink.addHyperlinkListener( schemaLinkListener );
+        superiorsTable.addMouseListener( superiorsTableListener );
+        mandatoryAttributesTable.addMouseListener( mandatoryAttributesTableListener );
+        optionalAttributesTable.addMouseListener( optionalAttributesTableListener );
+    }
+
+
+    /**
+     * Removes listeners from UI fields
+     */
+    private void removeListeners()
+    {
+        aliasesButton.removeSelectionListener( aliasesButtonListener );
+        oidText.removeModifyListener( oidTextModifyListener );
+        oidText.removeVerifyListener( oidTextVerifyListener );
+        schemaLink.removeHyperlinkListener( schemaLinkListener );
+        descriptionText.removeModifyListener( descriptionTextListener );
+        superiorsTable.removeMouseListener( superiorsTableListener );
+        addButtonSuperiorsTable.removeSelectionListener( addButtonSuperiorsTableListener );
+        removeButtonSuperiorsTable.removeSelectionListener( removeButtonSuperiorsTableListener );
+        classTypeCombo.removeModifyListener( classTypeListener );
+        obsoleteCheckbox.removeSelectionListener( obsoleteListener );
+        mandatoryAttributesTable.removeMouseListener( mandatoryAttributesTableListener );
+        addButtonMandatoryTable.removeSelectionListener( addButtonMandatoryTableListener );
+        removeButtonMandatoryTable.removeSelectionListener( removeButtonMandatoryTableListener );
+        optionalAttributesTable.removeMouseListener( optionalAttributesTableListener );
+        addButtonOptionalTable.removeSelectionListener( addButtonOptionalTableListener );
+        removeButtonOptionalTable.removeSelectionListener( removeButtonOptionalTableListener );
+    }
+
+
+    /**
+     * Sets the editor as dirty
+     */
+    private void setEditorDirty()
+    {
+        ( ( ObjectClassEditor ) getEditor() ).setDirty( true );
+    }
+
+
+    /**
+     * Refreshes the UI.
+     */
+    public void refreshUI()
+    {
+        removeListeners();
+        fillInUiFields();
+        addListeners();
+//        setFieldsEditableState();
+    }
+
+
+//    /* (non-Javadoc)
+//     * @see org.apache.directory.studio.schemas.model.PoolListener#poolChanged(org.apache.directory.studio.schemas.model.SchemaPool, org.apache.directory.studio.schemas.model.LDAPModelEvent)
+//     */
+//    public void poolChanged( SchemaPool p, LDAPModelEvent e )
+//    {
+//        removeListeners();
+//        fillInSuperiorsTable();
+//        fillInMandatoryAttributesTable();
+//        fillInOptionalAttributesTable();
+//        addListeners();
+//        setFieldsEditableState();
+//    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#dispose()
+     */
+    public void dispose()
+    {
+//        schemaPool.removeListener( this );
+        removeListeners();
+
+        super.dispose();
+    }
+}

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSourceCodePage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSourceCodePage.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSourceCodePage.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSourceCodePage.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,195 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.objectclass;
+
+
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.List;
+
+import org.apache.directory.server.core.tools.schema.ObjectClassLiteral;
+import org.apache.directory.server.core.tools.schema.OpenLdapSchemaParser;
+import org.apache.directory.studio.apacheds.schemaeditor.PluginUtils;
+import org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.view.widget.SchemaSourceViewer;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+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 ObjectClassEditorSourceCodePage extends FormPage
+{
+    /** The page ID */
+    public static final String ID = ObjectClassEditor.ID + "sourceCodePage"; //$NON-NLS-1$
+
+    /** The page title*/
+    public static final String TITLE = "Source Code"; //$NON-NLS-1$
+
+    /** The modified object class */
+    private ObjectClassImpl modifiedObjectClass;
+
+    /** The Schema Source Viewer */
+    private SchemaSourceViewer schemaSourceViewer;
+
+    /** The flag to indicate if the user can leave the Source Code page */
+    private boolean canLeaveThePage = true;
+
+    /** The listener of the Schema Source Viewer Widget */
+    private ModifyListener schemaSourceViewerListener = new ModifyListener()
+    {
+        public void modifyText( ModifyEvent e )
+        {
+            canLeaveThePage = true;
+            try
+            {
+                ( ( ObjectClassEditor ) getEditor() ).setDirty( true );
+                OpenLdapSchemaParser parser = new OpenLdapSchemaParser();
+                parser.parse( schemaSourceViewer.getTextWidget().getText() );
+
+                List objectclasses = parser.getObjectClassTypes();
+                if ( objectclasses.size() != 1 )
+                {
+                    // TODO Throw an exception and return
+                }
+                else
+                {
+                    updateObjectClass( ( ObjectClassLiteral ) objectclasses.get( 0 ) );
+                }
+            }
+            catch ( IOException e1 )
+            {
+                canLeaveThePage = false;
+            }
+            catch ( ParseException exception )
+            {
+                canLeaveThePage = false;
+            }
+        }
+    };
+
+
+    /**
+     * Default constructor
+     * @param editor
+     *      the associated editor
+     */
+    public ObjectClassEditorSourceCodePage( FormEditor editor )
+    {
+        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();
+        layout.marginWidth = 0;
+        layout.marginHeight = 0;
+        form.getBody().setLayout( layout );
+        toolkit.paintBordersFor( form.getBody() );
+
+        modifiedObjectClass = ( ( ObjectClassEditor ) getEditor() ).getModifiedObjectClass();
+
+        // SOURCE CODE Field
+        schemaSourceViewer = new SchemaSourceViewer( form.getBody(), null, null, false, SWT.BORDER | SWT.H_SCROLL
+            | SWT.V_SCROLL );
+        GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
+        gd.heightHint = 10;
+        schemaSourceViewer.getTextWidget().setLayoutData( gd );
+
+        // set text font
+        Font font = JFaceResources.getFont( JFaceResources.TEXT_FONT );
+        schemaSourceViewer.getTextWidget().setFont( font );
+
+        IDocument document = new Document();
+        schemaSourceViewer.setDocument( document );
+
+        // Initialization from the "input" object class
+        fillInUiFields();
+
+        schemaSourceViewer.getTextWidget().addModifyListener( schemaSourceViewerListener );
+    }
+
+
+    /**
+     * Fills in the User Interface.
+     */
+    private void fillInUiFields()
+    {
+        // SOURCE CODE Field
+        schemaSourceViewer.getDocument().set( PluginUtils.toSourceCode( modifiedObjectClass ) );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#canLeaveThePage()
+     */
+    public boolean canLeaveThePage()
+    {
+        return canLeaveThePage;
+    }
+
+
+    /**
+     * Updates the Modified Object Class from the given Object Class Literal.
+     *
+     * @param ocl
+     *      the Object Class Literal
+     */
+    private void updateObjectClass( ObjectClassLiteral ocl )
+    {
+        modifiedObjectClass.setDescription( ocl.getDescription() );
+        modifiedObjectClass.setMayNamesList( ocl.getMay() );
+        modifiedObjectClass.setMustNamesList( ocl.getMust() );
+        modifiedObjectClass.setNames( ocl.getNames() );
+        modifiedObjectClass.setObsolete( ocl.isObsolete() );
+        modifiedObjectClass.setOid( ocl.getOid() );
+        modifiedObjectClass.setSuperClassesNames( ocl.getSuperiors() );
+        modifiedObjectClass.setType( ocl.getClassType() );
+    }
+
+
+    /**
+     * Refreshes the UI.
+     */
+    public void refreshUI()
+    {
+        fillInUiFields();
+    }
+}

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableContentProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableContentProvider.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableContentProvider.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableContentProvider.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,132 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.objectclass;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.directory.studio.apacheds.schemaeditor.Activator;
+import org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.NonExistingObjectClass;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+
+/**
+ * This class is the Content Provider for the Superiors Table of the Object Class Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ObjectClassEditorSuperiorsTableContentProvider implements IStructuredContentProvider
+{
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+
+    /**
+     * Creates a new instance of ObjectClassFormEditorSuperiorsTableContentProvider.
+     */
+    public ObjectClassEditorSuperiorsTableContentProvider()
+    {
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+     */
+    public Object[] getElements( Object inputElement )
+    {
+        if ( inputElement instanceof String[] )
+        {
+            List<Object> results = new ArrayList<Object>();
+
+            String[] superiors = ( String[] ) inputElement;
+            for ( String superior : superiors )
+            {
+                ObjectClassImpl oc = schemaHandler.getObjectClass( superior );
+                if ( oc != null )
+                {
+                    results.add( oc );
+                }
+                else
+                {
+                    results.add( new NonExistingObjectClass( superior ) );
+                }
+            }
+
+            // Sorting Elements
+            Collections.sort( results, new Comparator<Object>()
+            {
+                public int compare( Object o1, Object o2 )
+                {
+                    if ( o1 instanceof ObjectClassImpl && o2 instanceof ObjectClassImpl )
+                    {
+                        return ( ( ObjectClassImpl ) o1 ).getNames()[0].compareToIgnoreCase( ( ( ObjectClassImpl ) o2 )
+                            .getNames()[0] );
+                    }
+                    else if ( o1 instanceof ObjectClassImpl && o2 instanceof NonExistingObjectClass )
+                    {
+                        return ( ( ObjectClassImpl ) o1 ).getNames()[0]
+                            .compareToIgnoreCase( ( ( NonExistingObjectClass ) o2 ).getName() );
+                    }
+                    else if ( o1 instanceof NonExistingObjectClass && o2 instanceof ObjectClassImpl )
+                    {
+                        return ( ( NonExistingObjectClass ) o1 ).getName().compareToIgnoreCase(
+                            ( ( ObjectClassImpl ) o2 ).getNames()[0] );
+                    }
+                    else if ( o1 instanceof NonExistingObjectClass && o2 instanceof NonExistingObjectClass )
+                    {
+                        return ( ( NonExistingObjectClass ) o1 ).getName().compareToIgnoreCase(
+                            ( ( NonExistingObjectClass ) o2 ).getName() );
+                    }
+
+                    return 0;
+                }
+            } );
+
+            return results.toArray();
+        }
+
+        // Default
+        return null;
+    }
+
+
+    /* (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 )
+    {
+    }
+}

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableLabelProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableLabelProvider.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableLabelProvider.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/objectclass/ObjectClassEditorSuperiorsTableLabelProvider.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,76 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.objectclass;
+
+
+import org.apache.directory.studio.apacheds.schemaeditor.Activator;
+import org.apache.directory.studio.apacheds.schemaeditor.PluginConstants;
+import org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.view.ViewUtils;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.NonExistingObjectClass;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class is the Label Provider for the Superiors Table of the Object Class Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ObjectClassEditorSuperiorsTableLabelProvider extends LabelProvider implements ITableLabelProvider
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
+     */
+    public Image getColumnImage( Object element, int columnIndex )
+    {
+        if ( ( element instanceof ObjectClassImpl ) || ( element instanceof NonExistingObjectClass ) )
+        {
+            return AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID, PluginConstants.IMG_OBJECT_CLASS )
+                .createImage();
+        }
+
+        // Default
+        return null;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
+     */
+    public String getColumnText( Object element, int columnIndex )
+    {
+        if ( element instanceof ObjectClassImpl )
+        {
+            return ViewUtils.concateAliases( ( ( ObjectClassImpl ) element ).getNames() );
+        }
+        else if ( element instanceof NonExistingObjectClass )
+        {
+            return ( ( NonExistingObjectClass ) element ).getDisplayName();
+        }
+
+        // Default
+        return null;
+    }
+}

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditor.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditor.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditor.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,126 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.schema;
+
+
+import org.apache.directory.studio.apacheds.schemaeditor.Activator;
+import org.apache.directory.studio.apacheds.schemaeditor.model.Schema;
+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.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SchemaEditor extends FormEditor
+{
+    /** The logger */
+    private static Logger logger = Logger.getLogger( SchemaEditor.class );
+
+    /** The ID of the Editor */
+    public static final String ID = Activator.PLUGIN_ID + ".view.schemaformeditor"; //$NON-NLS-1$
+
+    /** The Overview Page */
+    private SchemaEditorOverviewPage overview;
+
+    /** The Source Code page */
+    private SchemaEditorSourceCodePage sourceCode;
+
+    /** The associated schema */
+    private Schema schema;
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormEditor#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+     */
+    public void init( IEditorSite site, IEditorInput input ) throws PartInitException
+    {
+        setSite( site );
+        setInput( input );
+        setPartName( input.getName() );
+
+        schema = ( ( SchemaEditorInput ) getEditorInput() ).getSchema();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
+     */
+    protected void addPages()
+    {
+        try
+        {
+            overview = new SchemaEditorOverviewPage( this );
+            addPage( overview );
+            sourceCode = new SchemaEditorSourceCodePage( this );
+            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)
+     */
+    public void doSave( IProgressMonitor monitor )
+    {
+        // There's nothing to save
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
+     */
+    public void doSaveAs()
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
+     */
+    public boolean isSaveAsAllowed()
+    {
+        return false;
+    }
+
+
+    /**
+     * Gets the associated schema.
+     *
+     * @return
+     *      the associated schema
+     */
+    public Schema getSchema()
+    {
+        return schema;
+    }
+}

Added: directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorInput.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorInput.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorInput.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorInput.java Wed Jul  4 06:05:16 2007
@@ -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.studio.apacheds.schemaeditor.view.editors.schema;
+
+
+import org.apache.directory.studio.apacheds.schemaeditor.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 SchemaEditorInput implements IEditorInput
+{
+    private Schema schema;
+
+
+    /**
+     * Default constructor
+     * @param schema
+     */
+    public SchemaEditorInput( 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 getName();
+    }
+
+
+    /* (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 SchemaEditorInput ) )
+            return false;
+        SchemaEditorInput other = ( SchemaEditorInput ) 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/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorOverviewPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorOverviewPage.java?view=auto&rev=553196
==============================================================================
--- directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorOverviewPage.java (added)
+++ directory/studio/trunk/studio-apacheds-schemaeditor/src/main/java/org/apache/directory/studio/apacheds/schemaeditor/view/editors/schema/SchemaEditorOverviewPage.java Wed Jul  4 06:05:16 2007
@@ -0,0 +1,368 @@
+/*
+ *  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.studio.apacheds.schemaeditor.view.editors.schema;
+
+
+import org.apache.directory.studio.apacheds.schemaeditor.Activator;
+import org.apache.directory.studio.apacheds.schemaeditor.PluginConstants;
+import org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener;
+import org.apache.directory.studio.apacheds.schemaeditor.model.AttributeTypeImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.model.MatchingRuleImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.model.Schema;
+import org.apache.directory.studio.apacheds.schemaeditor.model.SyntaxImpl;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.attributetype.AttributeTypeEditor;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.attributetype.AttributeTypeEditorInput;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.objectclass.ObjectClassEditor;
+import org.apache.directory.studio.apacheds.schemaeditor.view.editors.objectclass.ObjectClassEditorInput;
+import org.apache.log4j.Logger;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+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.widgets.FormToolkit;
+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 Schema Editore.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SchemaEditorOverviewPage extends FormPage
+{
+    /** The page ID */
+    public static final String ID = SchemaEditor.ID + "overviewPage"; //$NON-NLS-1$
+
+    /** The page title */
+    public static final String TITLE = "Overview";
+
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    /** The associated schema */
+    private Schema schema;
+
+    private SchemaListener schemaListener = new SchemaListener()
+    {
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#attributeTypeAdded(org.apache.directory.studio.apacheds.schemaeditor.model.AttributeTypeImpl)
+         */
+        public void attributeTypeAdded( AttributeTypeImpl at )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#attributeTypeModified(org.apache.directory.studio.apacheds.schemaeditor.model.AttributeTypeImpl)
+         */
+        public void attributeTypeModified( AttributeTypeImpl at )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#attributeTypeRemoved(org.apache.directory.studio.apacheds.schemaeditor.model.AttributeTypeImpl)
+         */
+        public void attributeTypeRemoved( AttributeTypeImpl at )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#matchingRuleAdded(org.apache.directory.studio.apacheds.schemaeditor.model.MatchingRuleImpl)
+         */
+        public void matchingRuleAdded( MatchingRuleImpl mr )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#matchingRuleModified(org.apache.directory.studio.apacheds.schemaeditor.model.MatchingRuleImpl)
+         */
+        public void matchingRuleModified( MatchingRuleImpl mr )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#matchingRuleRemoved(org.apache.directory.studio.apacheds.schemaeditor.model.MatchingRuleImpl)
+         */
+        public void matchingRuleRemoved( MatchingRuleImpl mr )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#objectClassAdded(org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl)
+         */
+        public void objectClassAdded( ObjectClassImpl oc )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#objectClassModified(org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl)
+         */
+        public void objectClassModified( ObjectClassImpl oc )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#objectClassRemoved(org.apache.directory.studio.apacheds.schemaeditor.model.ObjectClassImpl)
+         */
+        public void objectClassRemoved( ObjectClassImpl oc )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#syntaxAdded(org.apache.directory.studio.apacheds.schemaeditor.model.SyntaxImpl)
+         */
+        public void syntaxAdded( SyntaxImpl syntax )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#syntaxModified(org.apache.directory.studio.apacheds.schemaeditor.model.SyntaxImpl)
+         */
+        public void syntaxModified( SyntaxImpl syntax )
+        {
+            fillInUiFields();
+        }
+
+
+        /* (non-Javadoc)
+         * @see org.apache.directory.studio.apacheds.schemaeditor.controller.SchemaListener#syntaxRemoved(org.apache.directory.studio.apacheds.schemaeditor.model.SyntaxImpl)
+         */
+        public void syntaxRemoved( SyntaxImpl syntax )
+        {
+            fillInUiFields();
+        }
+    };
+
+    // UI Fields
+    private Table attributeTypesTable;
+    private Table objectClassesTable;
+
+    // Listeners
+    /** The listener of the Attribute Types Table*/
+    private MouseAdapter attributeTypesTableListener = new MouseAdapter()
+    {
+        public void mouseDoubleClick( MouseEvent e )
+        {
+            IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+            AttributeTypeEditorInput input = new AttributeTypeEditorInput( schemaHandler
+                .getAttributeType( attributeTypesTable.getSelection()[0].getText() ) );
+            String editorId = AttributeTypeEditor.ID;
+            try
+            {
+                page.openEditor( input, editorId );
+            }
+            catch ( PartInitException exception )
+            {
+                Logger.getLogger( SchemaEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+            }
+        }
+    };
+    /** The listener of the Object Classes Table*/
+    private MouseAdapter objectClassesTableListener = new MouseAdapter()
+    {
+        public void mouseDoubleClick( MouseEvent e )
+        {
+            IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+
+            ObjectClassEditorInput input = new ObjectClassEditorInput( schemaHandler.getObjectClass( objectClassesTable
+                .getSelection()[0].getText() ) );
+            String editorId = ObjectClassEditor.ID;
+            try
+            {
+                page.openEditor( input, editorId );
+            }
+            catch ( PartInitException exception )
+            {
+                Logger.getLogger( SchemaEditorOverviewPage.class ).debug( "error when opening the editor" ); //$NON-NLS-1$
+            }
+        }
+    };
+
+
+    /**
+     * Creates a new instance of SchemaFormEditorOverviewPage.
+     *
+     * @param editor
+     *      the associated editor
+     */
+    public SchemaEditorOverviewPage( FormEditor editor )
+    {
+        super( editor, ID, TITLE );
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.forms.editor.FormPage#createFormContent(org.eclipse.ui.forms.IManagedForm)
+     */
+    protected void createFormContent( IManagedForm managedForm )
+    {
+        // Getting the associated schema
+        schema = ( ( SchemaEditor ) getEditor() ).getSchema();
+        schemaHandler.addListener( schema, schemaListener );
+
+        // Creating the base UI
+        ScrolledForm form = managedForm.getForm();
+        FormToolkit toolkit = managedForm.getToolkit();
+        GridLayout layout = new GridLayout( 2, true );
+        form.getBody().setLayout( layout );
+
+        createAttributeTypesSection( form.getBody(), toolkit );
+
+        createObjectClassesSection( form.getBody(), toolkit );
+
+        // Initializes the UI from the schema
+        fillInUiFields();
+
+        // Listeners initialization
+        addListeners();
+    }
+
+
+    /**
+     * Create the Attribute Types Section.
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the FormToolKit to use
+     */
+    private void createAttributeTypesSection( Composite parent, FormToolkit toolkit )
+    {
+        // Attribute Types Section
+        Section attributeTypesSection = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
+            | Section.TITLE_BAR );
+        attributeTypesSection.setDescription( "The schema" + schema.getName()
+            + "contains the following attribute types." );
+        attributeTypesSection.setText( "Attribute Types" );
+
+        // Creating the layout of the section
+        Composite attributeTypesSectionClient = toolkit.createComposite( attributeTypesSection );
+        attributeTypesSectionClient.setLayout( new GridLayout() );
+        toolkit.paintBordersFor( attributeTypesSectionClient );
+        attributeTypesSection.setClient( attributeTypesSectionClient );
+        attributeTypesSection.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
+
+        attributeTypesTable = toolkit.createTable( attributeTypesSectionClient, SWT.NONE );
+        GridData gridData = new GridData( GridData.FILL, GridData.FILL, true, true );
+        gridData.heightHint = 1;
+        attributeTypesTable.setLayoutData( gridData );
+    }
+
+
+    /**
+     * Create the Object Classes Section.
+     *
+     * @param parent
+     *      the parent composite
+     * @param toolkit
+     *      the FormToolKit to use
+     */
+    private void createObjectClassesSection( Composite parent, FormToolkit toolkit )
+    {
+        // Attribute Types Section
+        Section objectClassesSection = toolkit.createSection( parent, Section.DESCRIPTION | Section.EXPANDED
+            | Section.TITLE_BAR );
+        objectClassesSection
+            .setDescription( "The_schema" + schema.getName() + "contains the following object classes." );
+        objectClassesSection.setText( "Object Classes" );
+
+        // Creating the layout of the section
+        Composite objectClassesSectionClient = toolkit.createComposite( objectClassesSection );
+        objectClassesSectionClient.setLayout( new GridLayout() );
+        toolkit.paintBordersFor( objectClassesSectionClient );
+        objectClassesSection.setClient( objectClassesSectionClient );
+        objectClassesSection.setLayoutData( new GridData( GridData.FILL, GridData.FILL, true, true ) );
+
+        objectClassesTable = toolkit.createTable( objectClassesSectionClient, SWT.NONE );
+        GridData gridData = new GridData( GridData.FILL, GridData.FILL, true, true );
+        gridData.heightHint = 1;
+        objectClassesTable.setLayoutData( gridData );
+    }
+
+
+    /**
+     * Fills in the fields of the User Interface.
+     */
+    private void fillInUiFields()
+    {
+        for ( AttributeTypeImpl at : schema.getAttributeTypes() )
+        {
+            TableItem item = new TableItem( attributeTypesTable, SWT.NONE );
+            item.setImage( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+                PluginConstants.IMG_ATTRIBUTE_TYPE ).createImage() );
+            item.setText( at.getNames()[0] );
+        }
+
+        for ( ObjectClassImpl oc : schema.getObjectClasses() )
+        {
+            TableItem item = new TableItem( objectClassesTable, SWT.NONE );
+            item.setImage( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+                PluginConstants.IMG_OBJECT_CLASS ).createImage() );
+            item.setText( oc.getNames()[0] );
+        }
+    }
+
+
+    /**
+     * Initializes and adds the listners.
+     */
+    private void addListeners()
+    {
+        attributeTypesTable.addMouseListener( attributeTypesTableListener );
+        objectClassesTable.addMouseListener( objectClassesTableListener );
+    }
+}