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

svn commit: r592094 [25/35] - in /directory/sandbox/felixk/studio-schemaeditor: ./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/directory/studio/ src/m...

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportProjectsWizardPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportProjectsWizardPage.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportProjectsWizardPage.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportProjectsWizardPage.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,334 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class represents the WizardPage of the ImportProjectsWizard.
+ * <p>
+ * It is used to let the user enter the informations about the
+ * schemas he wants to import.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ImportProjectsWizardPage extends WizardPage
+{
+    // UI Fields
+    private Text fromDirectoryText;
+    private Button fromDirectoryButton;
+    private CheckboxTableViewer projectFilesTableViewer;
+    private Button projectFilesTableSelectAllButton;
+    private Button projectFilesTableDeselectAllButton;
+
+
+    /**
+     * Creates a new instance of ImportSchemasFromOpenLdapWizardPage.
+     */
+    protected ImportProjectsWizardPage()
+    {
+        super( "ImportProjectsWizardPage" );
+        setTitle( "Import schema projects" );
+        setDescription( "Please select the schema project to import." );
+        setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+            PluginConstants.IMG_PROJECT_IMPORT_WIZARD ) );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NULL );
+        GridLayout layout = new GridLayout();
+        composite.setLayout( layout );
+
+        // From Directory Group
+        Group fromDirectoryGroup = new Group( composite, SWT.NONE );
+        fromDirectoryGroup.setText( "From directory" );
+        fromDirectoryGroup.setLayout( new GridLayout( 3, false ) );
+        fromDirectoryGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // From Directory
+        Label fromDirectoryLabel = new Label( fromDirectoryGroup, SWT.NONE );
+        fromDirectoryLabel.setText( "From directory:" );
+        fromDirectoryText = new Text( fromDirectoryGroup, SWT.BORDER );
+        fromDirectoryText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        fromDirectoryText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                dialogChanged();
+            }
+        } );
+        fromDirectoryButton = new Button( fromDirectoryGroup, SWT.PUSH );
+        fromDirectoryButton.setText( "Browse..." );
+        fromDirectoryButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                chooseFromDirectory();
+            }
+        } );
+
+        // Schema Files Group
+        Group schemaFilesGroup = new Group( composite, SWT.NONE );
+        schemaFilesGroup.setText( "Schema project files" );
+        schemaFilesGroup.setLayout( new GridLayout( 2, false ) );
+        schemaFilesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Schema Files
+        projectFilesTableViewer = new CheckboxTableViewer( new Table( schemaFilesGroup, SWT.BORDER | SWT.CHECK
+            | SWT.FULL_SELECTION ) );
+        GridData schemasTableViewerGridData = new GridData( SWT.FILL, SWT.NONE, true, false, 1, 2 );
+        schemasTableViewerGridData.heightHint = 125;
+        projectFilesTableViewer.getTable().setLayoutData( schemasTableViewerGridData );
+        projectFilesTableViewer.setContentProvider( new ArrayContentProvider() );
+        projectFilesTableViewer.setLabelProvider( new LabelProvider()
+        {
+            public String getText( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return ( ( File ) element ).getName();
+                }
+
+                // Default
+                return super.getText( element );
+            }
+
+
+            public Image getImage( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+                        PluginConstants.IMG_PROJECT_FILE ).createImage();
+                }
+
+                // Default
+                return super.getImage( element );
+            }
+        } );
+        projectFilesTableViewer.addCheckStateListener( new ICheckStateListener()
+        {
+            /**
+             * Notifies of a change to the checked state of an element.
+             *
+             * @param event
+             *      event object describing the change
+             */
+            public void checkStateChanged( CheckStateChangedEvent event )
+            {
+                dialogChanged();
+            }
+        } );
+        projectFilesTableSelectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        projectFilesTableSelectAllButton.setText( "Select All" );
+        projectFilesTableSelectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        projectFilesTableSelectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                projectFilesTableViewer.setAllChecked( true );
+                dialogChanged();
+            }
+        } );
+        projectFilesTableDeselectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        projectFilesTableDeselectAllButton.setText( "Deselect All" );
+        projectFilesTableDeselectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        projectFilesTableDeselectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                projectFilesTableViewer.setAllChecked( false );
+                dialogChanged();
+            }
+        } );
+
+        initFields();
+
+        setControl( composite );
+    }
+
+
+    /**
+     * Initializes the UI Fields.
+     */
+    private void initFields()
+    {
+        displayErrorMessage( null );
+        setPageComplete( false );
+    }
+
+
+    /**
+     * This method is called when the exportMultipleFiles 'browse' button is selected.
+     */
+    private void chooseFromDirectory()
+    {
+        DirectoryDialog dialog = new DirectoryDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() );
+        dialog.setText( "Choose Folder" );
+        dialog.setMessage( "Select the folder from which import the files." );
+
+        String selectedDirectory = dialog.open();
+        if ( selectedDirectory != null )
+        {
+            fromDirectoryText.setText( selectedDirectory );
+            fillInSchemaFilesTable( selectedDirectory );
+        }
+    }
+
+
+    /**
+     * Fills in the SchemaFilesTable with the schema files found in the given path.
+     *
+     * @param path
+     *      the path to search schema files in
+     */
+    private void fillInSchemaFilesTable( String path )
+    {
+        List<File> schemaFiles = new ArrayList<File>();
+        File selectedDirectory = new File( path );
+        if ( selectedDirectory.exists() )
+        {
+            for ( File file : selectedDirectory.listFiles() )
+            {
+                String fileName = file.getName();
+                if ( fileName.endsWith( ".schemaproject" ) )
+                {
+                    schemaFiles.add( file );
+                }
+            }
+        }
+
+        projectFilesTableViewer.setInput( schemaFiles );
+    }
+
+
+    /**
+     * This method is called when the user modifies something in the UI.
+     */
+    private void dialogChanged()
+    {
+        // Export Directory
+        String directory = fromDirectoryText.getText();
+        if ( ( directory == null ) || ( directory.equals( "" ) ) )
+        {
+            displayErrorMessage( "A directory must be selected." );
+            return;
+        }
+        else
+        {
+            File directoryFile = new File( directory );
+            if ( !directoryFile.exists() )
+            {
+                displayErrorMessage( "The selected directory does not exist." );
+                return;
+            }
+            else if ( !directoryFile.isDirectory() )
+            {
+                displayErrorMessage( "The selected directory is not a directory." );
+                return;
+            }
+            else if ( !directoryFile.canRead() )
+            {
+                displayErrorMessage( "The selected directory is not readable." );
+                return;
+            }
+        }
+
+        // Schemas table
+        if ( projectFilesTableViewer.getCheckedElements().length == 0 )
+        {
+            displayErrorMessage( "One or several schema project files must be selected." );
+            return;
+        }
+
+        displayErrorMessage( null );
+    }
+
+
+    /**
+     * Displays an error message and set the page status as incomplete
+     * if the message is not null.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayErrorMessage( String message )
+    {
+        setErrorMessage( message );
+        setPageComplete( message == null );
+    }
+
+
+    /**
+     * Gets the selected project files.
+     *
+     * @return
+     *      the selected project files
+     */
+    public File[] getSelectedProjectFiles()
+    {
+        Object[] selectedProjectFile = projectFilesTableViewer.getCheckedElements();
+
+        List<File> schemaFiles = new ArrayList<File>();
+        for ( Object projectFile : selectedProjectFile )
+        {
+            schemaFiles.add( ( File ) projectFile );
+        }
+
+        return schemaFiles.toArray( new File[0] );
+    }
+
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportProjectsWizardPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizard.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizard.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizard.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizard.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,138 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginUtils;
+import org.apache.directory.studio.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.schemaeditor.model.Schema;
+import org.apache.directory.studio.schemaeditor.model.io.OpenLdapSchemaFileImportException;
+import org.apache.directory.studio.schemaeditor.model.io.OpenLdapSchemaFileImporter;
+import org.apache.directory.studio.schemaeditor.model.schemachecker.SchemaChecker;
+import org.apache.directory.studio.schemaeditor.view.ViewUtils;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+
+/**
+ * This class represents the wizard to import schemas from OpenLdap format.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ImportSchemasFromOpenLdapWizard extends Wizard implements IImportWizard
+{
+    public static final String ID = Activator.PLUGIN_ID + ".wizards.ImportSchemasFromOpenLdapWizard";
+
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    /** The SchemaChecker */
+    private SchemaChecker schemaChecker;
+
+    // The pages of the wizard
+    private ImportSchemasFromOpenLdapWizardPage page;
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    public void addPages()
+    {
+        // Creating pages
+        page = new ImportSchemasFromOpenLdapWizardPage();
+
+        // Adding pages
+        addPage( page );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    public boolean performFinish()
+    {
+        final File[] selectedSchemasFiles = page.getSelectedSchemaFiles();
+
+        schemaChecker.disableModificationsListening();
+
+        try
+        {
+            getContainer().run( true, false, new IRunnableWithProgress()
+            {
+                public void run( IProgressMonitor monitor )
+                {
+                    monitor.beginTask( "Importing schemas: ", selectedSchemasFiles.length );
+
+                    for ( File schemaFile : selectedSchemasFiles )
+                    {
+                        monitor.subTask( schemaFile.getName() );
+                        try
+                        {
+                            Schema schema = OpenLdapSchemaFileImporter.getSchema( schemaFile.getAbsolutePath() );
+                            schemaHandler.addSchema( schema );
+                        }
+                        catch ( OpenLdapSchemaFileImportException e )
+                        {
+                            PluginUtils.logError( "An error occured when importing the schema " + schemaFile.getName()
+                                + ".", e );
+                            ViewUtils.displayErrorMessageBox( "Error", "An error occured when importing the schema "
+                                + schemaFile.getName() + "." );
+                        }
+                        monitor.worked( 1 );
+                    }
+
+                    monitor.done();
+                }
+            } );
+        }
+        catch ( InvocationTargetException e )
+        {
+            // Nothing to do (it will never occur)
+        }
+        catch ( InterruptedException e )
+        {
+            // Nothing to do.
+        }
+
+        schemaChecker.enableModificationsListening();
+
+        return true;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+     */
+    public void init( IWorkbench workbench, IStructuredSelection selection )
+    {
+        setNeedsProgressMonitor( true );
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+        schemaChecker = Activator.getDefault().getSchemaChecker();
+    }
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizard.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizardPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizardPage.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizardPage.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizardPage.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,334 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class represents the WizardPage of the ImportSchemasFromOpenLdapWizard.
+ * <p>
+ * It is used to let the user enter the informations about the
+ * schemas he wants to import.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ImportSchemasFromOpenLdapWizardPage extends WizardPage
+{
+    // UI Fields
+    private Text fromDirectoryText;
+    private Button fromDirectoryButton;
+    private CheckboxTableViewer schemaFilesTableViewer;
+    private Button schemaFilesTableSelectAllButton;
+    private Button schemaFilesTableDeselectAllButton;
+
+
+    /**
+     * Creates a new instance of ImportSchemasFromOpenLdapWizardPage.
+     */
+    protected ImportSchemasFromOpenLdapWizardPage()
+    {
+        super( "ImportSchemasFromOpenLdapWizardPage" );
+        setTitle( "Import schemas from OpenLdap files" );
+        setDescription( "Please select the OpenLdap schema files to import." );
+        setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+            PluginConstants.IMG_SCHEMAS_IMPORT_WIZARD ) );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NULL );
+        GridLayout layout = new GridLayout();
+        composite.setLayout( layout );
+
+        // From Directory Group
+        Group fromDirectoryGroup = new Group( composite, SWT.NONE );
+        fromDirectoryGroup.setText( "From directory" );
+        fromDirectoryGroup.setLayout( new GridLayout( 3, false ) );
+        fromDirectoryGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // From Directory
+        Label fromDirectoryLabel = new Label( fromDirectoryGroup, SWT.NONE );
+        fromDirectoryLabel.setText( "From directory:" );
+        fromDirectoryText = new Text( fromDirectoryGroup, SWT.BORDER );
+        fromDirectoryText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        fromDirectoryText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                dialogChanged();
+            }
+        } );
+        fromDirectoryButton = new Button( fromDirectoryGroup, SWT.PUSH );
+        fromDirectoryButton.setText( "Browse..." );
+        fromDirectoryButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                chooseFromDirectory();
+            }
+        } );
+
+        // Schema Files Group
+        Group schemaFilesGroup = new Group( composite, SWT.NONE );
+        schemaFilesGroup.setText( "Schema files" );
+        schemaFilesGroup.setLayout( new GridLayout( 2, false ) );
+        schemaFilesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Schema Files
+        schemaFilesTableViewer = new CheckboxTableViewer( new Table( schemaFilesGroup, SWT.BORDER | SWT.CHECK
+            | SWT.FULL_SELECTION ) );
+        GridData schemasTableViewerGridData = new GridData( SWT.FILL, SWT.NONE, true, false, 1, 2 );
+        schemasTableViewerGridData.heightHint = 125;
+        schemaFilesTableViewer.getTable().setLayoutData( schemasTableViewerGridData );
+        schemaFilesTableViewer.setContentProvider( new ArrayContentProvider() );
+        schemaFilesTableViewer.setLabelProvider( new LabelProvider()
+        {
+            public String getText( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return ( ( File ) element ).getName();
+                }
+
+                // Default
+                return super.getText( element );
+            }
+
+
+            public Image getImage( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID, PluginConstants.IMG_SCHEMA )
+                        .createImage();
+                }
+
+                // Default
+                return super.getImage( element );
+            }
+        } );
+        schemaFilesTableViewer.addCheckStateListener( new ICheckStateListener()
+        {
+            /**
+             * Notifies of a change to the checked state of an element.
+             *
+             * @param event
+             *      event object describing the change
+             */
+            public void checkStateChanged( CheckStateChangedEvent event )
+            {
+                dialogChanged();
+            }
+        } );
+        schemaFilesTableSelectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        schemaFilesTableSelectAllButton.setText( "Select All" );
+        schemaFilesTableSelectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        schemaFilesTableSelectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                schemaFilesTableViewer.setAllChecked( true );
+                dialogChanged();
+            }
+        } );
+        schemaFilesTableDeselectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        schemaFilesTableDeselectAllButton.setText( "Deselect All" );
+        schemaFilesTableDeselectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        schemaFilesTableDeselectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                schemaFilesTableViewer.setAllChecked( false );
+                dialogChanged();
+            }
+        } );
+
+        initFields();
+
+        setControl( composite );
+    }
+
+
+    /**
+     * Initializes the UI Fields.
+     */
+    private void initFields()
+    {
+        displayErrorMessage( null );
+        setPageComplete( false );
+    }
+
+
+    /**
+     * This method is called when the exportMultipleFiles 'browse' button is selected.
+     */
+    private void chooseFromDirectory()
+    {
+        DirectoryDialog dialog = new DirectoryDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() );
+        dialog.setText( "Choose Folder" );
+        dialog.setMessage( "Select the folder from which import the files." );
+
+        String selectedDirectory = dialog.open();
+        if ( selectedDirectory != null )
+        {
+            fromDirectoryText.setText( selectedDirectory );
+            fillInSchemaFilesTable( selectedDirectory );
+        }
+    }
+
+
+    /**
+     * Fills in the SchemaFilesTable with the schema files found in the given path.
+     *
+     * @param path
+     *      the path to search schema files in
+     */
+    private void fillInSchemaFilesTable( String path )
+    {
+        List<File> schemaFiles = new ArrayList<File>();
+        File selectedDirectory = new File( path );
+        if ( selectedDirectory.exists() )
+        {
+            for ( File file : selectedDirectory.listFiles() )
+            {
+                String fileName = file.getName();
+                if ( fileName.endsWith( ".schema" ) )
+                {
+                    schemaFiles.add( file );
+                }
+            }
+        }
+
+        schemaFilesTableViewer.setInput( schemaFiles );
+    }
+
+
+    /**
+     * This method is called when the user modifies something in the UI.
+     */
+    private void dialogChanged()
+    {
+        // Export Directory
+        String directory = fromDirectoryText.getText();
+        if ( ( directory == null ) || ( directory.equals( "" ) ) )
+        {
+            displayErrorMessage( "A directory must be selected." );
+            return;
+        }
+        else
+        {
+            File directoryFile = new File( directory );
+            if ( !directoryFile.exists() )
+            {
+                displayErrorMessage( "The selected directory does not exist." );
+                return;
+            }
+            else if ( !directoryFile.isDirectory() )
+            {
+                displayErrorMessage( "The selected directory is not a directory." );
+                return;
+            }
+            else if ( !directoryFile.canRead() )
+            {
+                displayErrorMessage( "The selected directory is not readable." );
+                return;
+            }
+        }
+
+        // Schemas table
+        if ( schemaFilesTableViewer.getCheckedElements().length == 0 )
+        {
+            displayErrorMessage( "One or several schema files must be selected." );
+            return;
+        }
+
+        displayErrorMessage( null );
+    }
+
+
+    /**
+     * Displays an error message and set the page status as incomplete
+     * if the message is not null.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayErrorMessage( String message )
+    {
+        setErrorMessage( message );
+        setPageComplete( message == null );
+    }
+
+
+    /**
+     * Gets the selected schema files.
+     *
+     * @return
+     *      the selected schema files
+     */
+    public File[] getSelectedSchemaFiles()
+    {
+        Object[] selectedSchemaFile = schemaFilesTableViewer.getCheckedElements();
+
+        List<File> schemaFiles = new ArrayList<File>();
+        for ( Object schemaFile : selectedSchemaFile )
+        {
+            schemaFiles.add( ( File ) schemaFile );
+        }
+
+        return schemaFiles.toArray( new File[0] );
+    }
+
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromOpenLdapWizardPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizard.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizard.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizard.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizard.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,152 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginUtils;
+import org.apache.directory.studio.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.schemaeditor.model.Schema;
+import org.apache.directory.studio.schemaeditor.model.io.XMLSchemaFileImportException;
+import org.apache.directory.studio.schemaeditor.model.io.XMLSchemaFileImporter;
+import org.apache.directory.studio.schemaeditor.model.io.XMLSchemaFileImporter.SchemaFileType;
+import org.apache.directory.studio.schemaeditor.model.schemachecker.SchemaChecker;
+import org.apache.directory.studio.schemaeditor.view.ViewUtils;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.ui.IImportWizard;
+import org.eclipse.ui.IWorkbench;
+
+
+/**
+ * This class represents the wizard to import schemas from XML format.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ImportSchemasFromXmlWizard extends Wizard implements IImportWizard
+{
+    public static final String ID = Activator.PLUGIN_ID + ".wizards.ImportSchemasFromXmlWizard";
+
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    /** The SchemaChecker */
+    private SchemaChecker schemaChecker;
+
+    // The pages of the wizard
+    private ImportSchemasFromXmlWizardPage page;
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#addPages()
+     */
+    public void addPages()
+    {
+        // Creating pages
+        page = new ImportSchemasFromXmlWizardPage();
+
+        // Adding pages
+        addPage( page );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.wizard.Wizard#performFinish()
+     */
+    public boolean performFinish()
+    {
+        final String[] selectedSchemasFiles = page.getSelectedSchemaFiles();
+
+        schemaChecker.disableModificationsListening();
+
+        try
+        {
+            getContainer().run( true, false, new IRunnableWithProgress()
+            {
+                public void run( IProgressMonitor monitor )
+                {
+                    monitor.beginTask( "Importing schemas: ", selectedSchemasFiles.length );
+
+                    for ( String schemaFile : selectedSchemasFiles )
+                    {
+                        monitor.subTask( new File( schemaFile ).getName() );
+                        try
+                        {
+                            SchemaFileType schemaFileType = XMLSchemaFileImporter.getSchemaFileType( schemaFile );
+                            switch ( schemaFileType )
+                            {
+                                case SINGLE:
+                                    Schema importedSchema = XMLSchemaFileImporter.getSchema( schemaFile );
+                                    schemaHandler.addSchema( importedSchema );
+                                    break;
+                                case MULTIPLE:
+                                    Schema[] schemas = XMLSchemaFileImporter.getSchemas( schemaFile );
+                                    for ( Schema schema : schemas )
+                                    {
+                                        schemaHandler.addSchema( schema );
+                                    }
+                                    break;
+                            }
+                        }
+                        catch ( XMLSchemaFileImportException e )
+                        {
+                            PluginUtils.logError( "An error occured when importing  the schema " + schemaFile + ".", e );
+                            ViewUtils.displayErrorMessageBox( "Error", "An error occured when saving the schema "
+                                + schemaFile + "." );
+                        }
+                        monitor.worked( 1 );
+                    }
+
+                    monitor.done();
+                    schemaChecker.enableModificationsListening();
+                }
+            } );
+        }
+        catch ( InvocationTargetException e )
+        {
+            // Nothing to do (it will never occur)
+        }
+        catch ( InterruptedException e )
+        {
+            // Nothing to do.
+        }
+
+        schemaChecker.enableModificationsListening();
+
+        return true;
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection)
+     */
+    public void init( IWorkbench workbench, IStructuredSelection selection )
+    {
+        setNeedsProgressMonitor( true );
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+        schemaChecker = Activator.getDefault().getSchemaChecker();
+    }
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizard.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizardPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizardPage.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizardPage.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizardPage.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,334 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class represents the WizardPage of the ImportSchemasFromOpenLdapWizard.
+ * <p>
+ * It is used to let the user enter the informations about the
+ * schemas he wants to import.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ImportSchemasFromXmlWizardPage extends WizardPage
+{
+    // UI Fields
+    private Text fromDirectoryText;
+    private Button fromDirectoryButton;
+    private CheckboxTableViewer schemaFilesTableViewer;
+    private Button schemaFilesTableSelectAllButton;
+    private Button schemaFilesTableDeselectAllButton;
+
+
+    /**
+     * Creates a new instance of ImportSchemasFromOpenLdapWizardPage.
+     */
+    protected ImportSchemasFromXmlWizardPage()
+    {
+        super( "ImportSchemasFromXmlWizardPage" );
+        setTitle( "Import schemas from XML file(s)" );
+        setDescription( "Please select the XML schema files to import." );
+        setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+            PluginConstants.IMG_SCHEMAS_IMPORT_WIZARD ) );
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NULL );
+        GridLayout layout = new GridLayout();
+        composite.setLayout( layout );
+
+        // From Directory Group
+        Group fromDirectoryGroup = new Group( composite, SWT.NONE );
+        fromDirectoryGroup.setText( "From directory" );
+        fromDirectoryGroup.setLayout( new GridLayout( 3, false ) );
+        fromDirectoryGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // From Directory
+        Label fromDirectoryLabel = new Label( fromDirectoryGroup, SWT.NONE );
+        fromDirectoryLabel.setText( "From directory:" );
+        fromDirectoryText = new Text( fromDirectoryGroup, SWT.BORDER );
+        fromDirectoryText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        fromDirectoryText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent e )
+            {
+                dialogChanged();
+            }
+        } );
+        fromDirectoryButton = new Button( fromDirectoryGroup, SWT.PUSH );
+        fromDirectoryButton.setText( "Browse..." );
+        fromDirectoryButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                chooseFromDirectory();
+            }
+        } );
+
+        // Schema Files Group
+        Group schemaFilesGroup = new Group( composite, SWT.NONE );
+        schemaFilesGroup.setText( "Schema files" );
+        schemaFilesGroup.setLayout( new GridLayout( 2, false ) );
+        schemaFilesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Schema Files
+        schemaFilesTableViewer = new CheckboxTableViewer( new Table( schemaFilesGroup, SWT.BORDER | SWT.CHECK
+            | SWT.FULL_SELECTION ) );
+        GridData schemasTableViewerGridData = new GridData( SWT.FILL, SWT.NONE, true, false, 1, 2 );
+        schemasTableViewerGridData.heightHint = 125;
+        schemaFilesTableViewer.getTable().setLayoutData( schemasTableViewerGridData );
+        schemaFilesTableViewer.setContentProvider( new ArrayContentProvider() );
+        schemaFilesTableViewer.setLabelProvider( new LabelProvider()
+        {
+            public String getText( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return ( ( File ) element ).getName();
+                }
+
+                // Default
+                return super.getText( element );
+            }
+
+
+            public Image getImage( Object element )
+            {
+                if ( element instanceof File )
+                {
+                    return AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID, PluginConstants.IMG_SCHEMA )
+                        .createImage();
+                }
+
+                // Default
+                return super.getImage( element );
+            }
+        } );
+        schemaFilesTableViewer.addCheckStateListener( new ICheckStateListener()
+        {
+            /**
+             * Notifies of a change to the checked state of an element.
+             *
+             * @param event
+             *      event object describing the change
+             */
+            public void checkStateChanged( CheckStateChangedEvent event )
+            {
+                dialogChanged();
+            }
+        } );
+        schemaFilesTableSelectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        schemaFilesTableSelectAllButton.setText( "Select All" );
+        schemaFilesTableSelectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        schemaFilesTableSelectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                schemaFilesTableViewer.setAllChecked( true );
+                dialogChanged();
+            }
+        } );
+        schemaFilesTableDeselectAllButton = new Button( schemaFilesGroup, SWT.PUSH );
+        schemaFilesTableDeselectAllButton.setText( "Deselect All" );
+        schemaFilesTableDeselectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, false, false ) );
+        schemaFilesTableDeselectAllButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent e )
+            {
+                schemaFilesTableViewer.setAllChecked( false );
+                dialogChanged();
+            }
+        } );
+
+        initFields();
+
+        setControl( composite );
+    }
+
+
+    /**
+     * Initializes the UI Fields.
+     */
+    private void initFields()
+    {
+        displayErrorMessage( null );
+        setPageComplete( false );
+    }
+
+
+    /**
+     * This method is called when the exportMultipleFiles 'browse' button is selected.
+     */
+    private void chooseFromDirectory()
+    {
+        DirectoryDialog dialog = new DirectoryDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell() );
+        dialog.setText( "Choose Folder" );
+        dialog.setMessage( "Select the folder from which import the files." );
+
+        String selectedDirectory = dialog.open();
+        if ( selectedDirectory != null )
+        {
+            fromDirectoryText.setText( selectedDirectory );
+            fillInSchemaFilesTable( selectedDirectory );
+        }
+    }
+
+
+    /**
+     * Fills in the SchemaFilesTable with the schema files found in the given path.
+     *
+     * @param path
+     *      the path to search schema files in
+     */
+    private void fillInSchemaFilesTable( String path )
+    {
+        List<File> schemaFiles = new ArrayList<File>();
+        File selectedDirectory = new File( path );
+        if ( selectedDirectory.exists() )
+        {
+            for ( File file : selectedDirectory.listFiles() )
+            {
+                String fileName = file.getName();
+                if ( fileName.endsWith( ".xml" ) )
+                {
+                    schemaFiles.add( file );
+                }
+            }
+        }
+
+        schemaFilesTableViewer.setInput( schemaFiles );
+    }
+
+
+    /**
+     * This method is called when the user modifies something in the UI.
+     */
+    private void dialogChanged()
+    {
+        // Export Directory
+        String directory = fromDirectoryText.getText();
+        if ( ( directory == null ) || ( directory.equals( "" ) ) )
+        {
+            displayErrorMessage( "A directory must be selected." );
+            return;
+        }
+        else
+        {
+            File directoryFile = new File( directory );
+            if ( !directoryFile.exists() )
+            {
+                displayErrorMessage( "The selected directory does not exist." );
+                return;
+            }
+            else if ( !directoryFile.isDirectory() )
+            {
+                displayErrorMessage( "The selected directory is not a directory." );
+                return;
+            }
+            else if ( !directoryFile.canRead() )
+            {
+                displayErrorMessage( "The selected directory is not readable." );
+                return;
+            }
+        }
+
+        // Schemas table
+        if ( schemaFilesTableViewer.getCheckedElements().length == 0 )
+        {
+            displayErrorMessage( "One or several schema files must be selected." );
+            return;
+        }
+
+        displayErrorMessage( null );
+    }
+
+
+    /**
+     * Displays an error message and set the page status as incomplete
+     * if the message is not null.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayErrorMessage( String message )
+    {
+        setErrorMessage( message );
+        setPageComplete( message == null );
+    }
+
+
+    /**
+     * Gets the selected schema files.
+     *
+     * @return
+     *      the selected schema files
+     */
+    public String[] getSelectedSchemaFiles()
+    {
+        Object[] selectedSchemaFile = schemaFilesTableViewer.getCheckedElements();
+
+        List<String> schemaFiles = new ArrayList<String>();
+        for ( Object schemaFile : selectedSchemaFile )
+        {
+            schemaFiles.add( ( ( File ) schemaFile ).getAbsolutePath() );
+        }
+
+        return schemaFiles.toArray( new String[0] );
+    }
+
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/ImportSchemasFromXmlWizardPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeContentWizardPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeContentWizardPage.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeContentWizardPage.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeContentWizardPage.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,478 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.directory.shared.ldap.schema.UsageEnum;
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginConstants;
+import org.apache.directory.studio.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.schemaeditor.model.AttributeTypeImpl;
+import org.apache.directory.studio.schemaeditor.model.SyntaxImpl;
+import org.apache.directory.studio.schemaeditor.view.dialogs.AttributeTypeSelectionDialog;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+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.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class represents the Content WizardPage of the NewAttributeTypeWizard.
+ * <p>
+ * It is used to let the user enter content information about the
+ * attribute type he wants to create (superior, usage, syntax and properties).
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class NewAttributeTypeContentWizardPage extends WizardPage
+{
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    // The Usage values
+    private static final String DIRECTORY_OPERATION = "Directory Operation";
+    private static final String DISTRIBUTED_OPERATION = "Distributed Operation";
+    private static final String DSA_OPERATION = "DSA Operation";
+    private static final String USER_APPLICATIONS = "User Applications";
+
+    // UI Fields
+    private Text superiorText;
+    private Button superiorButton;
+    private ComboViewer usageComboViewer;
+    private ComboViewer syntaxComboViewer;
+    private Spinner lengthSpinner;
+    private Button obsoleteCheckbox;
+    private Button singleValueCheckbox;
+    private Button collectiveCheckbox;
+    private Button noUserModificationCheckbox;
+
+
+    /**
+     * Creates a new instance of NewAttributeTypeContentWizardPage.
+     */
+    protected NewAttributeTypeContentWizardPage()
+    {
+        super( "NewAttributeTypeContentWizardPage" );
+        setTitle( "Attribute Type Content" );
+        setDescription( "Please enter the superior, usage, syntax and properties for the attribute type." );
+        setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+            PluginConstants.IMG_ATTRIBUTE_TYPE_NEW_WIZARD ) );
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NULL );
+        GridLayout layout = new GridLayout();
+        composite.setLayout( layout );
+
+        // Superior and Usage Group
+        Group superiorUsageGroup = new Group( composite, SWT.NONE );
+        superiorUsageGroup.setText( "Superior and Usage" );
+        superiorUsageGroup.setLayout( new GridLayout( 3, false ) );
+        superiorUsageGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Superior
+        Label superiorLabel = new Label( superiorUsageGroup, SWT.NONE );
+        superiorLabel.setText( "Superior:" );
+        superiorText = new Text( superiorUsageGroup, SWT.BORDER );
+        superiorText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        superiorText.addModifyListener( new ModifyListener()
+        {
+            public void modifyText( ModifyEvent arg0 )
+            {
+                verifySuperior();
+            }
+        } );
+        superiorButton = new Button( superiorUsageGroup, SWT.PUSH );
+        superiorButton.setText( "Choose..." );
+        superiorButton.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false ) );
+        superiorButton.addSelectionListener( new SelectionAdapter()
+        {
+            public void widgetSelected( SelectionEvent arg0 )
+            {
+                AttributeTypeSelectionDialog dialog = new AttributeTypeSelectionDialog();
+                if ( dialog.open() == Dialog.OK )
+                {
+                    AttributeTypeImpl selectedAT = dialog.getSelectedAttributeType();
+                    String[] aliases = selectedAT.getNames();
+                    if ( ( aliases != null ) && ( aliases.length > 0 ) )
+                    {
+                        superiorText.setText( aliases[0] );
+                    }
+                    else
+                    {
+                        superiorText.setText( selectedAT.getOid() );
+                    }
+                }
+            }
+        } );
+
+        // Usage
+        Label usageLabel = new Label( superiorUsageGroup, SWT.NONE );
+        usageLabel.setText( "Usage:" );
+        Combo usageCombo = new Combo( superiorUsageGroup, SWT.READ_ONLY );
+        usageCombo.setLayoutData( new GridData( SWT.NONE, SWT.NONE, false, false, 2, 1 ) );
+        usageComboViewer = new ComboViewer( usageCombo );
+        usageComboViewer.setLabelProvider( new LabelProvider() );
+        usageComboViewer.setContentProvider( new ArrayContentProvider() );
+        usageComboViewer.setInput( new String[]
+            { DIRECTORY_OPERATION, DISTRIBUTED_OPERATION, DSA_OPERATION, USER_APPLICATIONS } );
+        usageComboViewer.setSelection( new StructuredSelection( USER_APPLICATIONS ) );
+
+        // Syntax Group
+        Group syntaxGroup = new Group( composite, SWT.NONE );
+        syntaxGroup.setText( "Syntax" );
+        syntaxGroup.setLayout( new GridLayout( 2, false ) );
+        syntaxGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Syntax
+        Label syntaxLabel = new Label( syntaxGroup, SWT.NONE );
+        syntaxLabel.setText( "Syntax:" );
+        Combo syntaxCombo = new Combo( syntaxGroup, SWT.READ_ONLY );
+        syntaxCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        syntaxComboViewer = new ComboViewer( syntaxCombo );
+        syntaxComboViewer.setContentProvider( new ArrayContentProvider() );
+        syntaxComboViewer.setLabelProvider( new LabelProvider()
+        {
+            public String getText( Object element )
+            {
+                if ( element instanceof SyntaxImpl )
+                {
+                    SyntaxImpl syntax = ( SyntaxImpl ) element;
+
+                    String name = syntax.getName();
+                    if ( name != null )
+                    {
+                        return name + "  -  (" + syntax.getOid() + ")";
+                    }
+                    else
+                    {
+                        return "(None)  -  (" + syntax.getOid() + ")";
+                    }
+                }
+
+                return super.getText( element );
+            }
+        } );
+
+        // Syntax Length
+        Label lengthLabel = new Label( syntaxGroup, SWT.NONE );
+        lengthLabel.setText( "Length:" );
+        lengthSpinner = new Spinner( syntaxGroup, SWT.BORDER );
+        lengthSpinner.setIncrement( 1 );
+        lengthSpinner.setMinimum( 0 );
+        lengthSpinner.setMaximum( Integer.MAX_VALUE );
+        GridData lengthSpinnerGridData = new GridData( SWT.NONE, SWT.NONE, false, false );
+        lengthSpinnerGridData.widthHint = 42;
+        lengthSpinner.setLayoutData( lengthSpinnerGridData );
+
+        // Properties Group
+        Group propertiesGroup = new Group( composite, SWT.NONE );
+        propertiesGroup.setText( "Properties" );
+        propertiesGroup.setLayout( new GridLayout() );
+        propertiesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Obsolete
+        new Label( composite, SWT.NONE );
+        obsoleteCheckbox = new Button( propertiesGroup, SWT.CHECK );
+        obsoleteCheckbox.setText( "Obsolete" );
+
+        // Single value
+        new Label( composite, SWT.NONE );
+        singleValueCheckbox = new Button( propertiesGroup, SWT.CHECK );
+        singleValueCheckbox.setText( "Single Value" );
+
+        // Collective
+        new Label( composite, SWT.NONE );
+        collectiveCheckbox = new Button( propertiesGroup, SWT.CHECK );
+        collectiveCheckbox.setText( "Collective" );
+
+        // No User Modification
+        new Label( composite, SWT.NONE );
+        noUserModificationCheckbox = new Button( propertiesGroup, SWT.CHECK );
+        noUserModificationCheckbox.setText( "No User Modification" );
+
+        initFields();
+
+        setControl( composite );
+    }
+
+
+    /**
+     * Initializes the UI fields.
+     */
+    @SuppressWarnings("unchecked")
+    private void initFields()
+    {
+        if ( schemaHandler != null )
+        {
+            // Getting the syntaxes
+            List<Object> syntaxes = new ArrayList( schemaHandler.getSyntaxes() );
+            // Adding the (None) Syntax
+            String none = "(None)";
+            syntaxes.add( none );
+
+            // Sorting the syntaxes
+            Collections.sort( syntaxes, new Comparator<Object>()
+            {
+                public int compare( Object o1, Object o2 )
+                {
+                    if ( ( o1 instanceof SyntaxImpl ) && ( o2 instanceof SyntaxImpl ) )
+                    {
+                        String[] o1Names = ( ( SyntaxImpl ) o1 ).getNames();
+                        String[] o2Names = ( ( SyntaxImpl ) o2 ).getNames();
+
+                        // Comparing the First Name
+                        if ( ( o1Names != null ) && ( o2Names != null ) )
+                        {
+                            if ( ( o1Names.length > 0 ) && ( o2Names.length > 0 ) )
+                            {
+                                return o1Names[0].compareToIgnoreCase( o2Names[0] );
+                            }
+                            else if ( ( o1Names.length == 0 ) && ( o2Names.length > 0 ) )
+                            {
+                                return "".compareToIgnoreCase( o2Names[0] );
+                            }
+                            else if ( ( o1Names.length > 0 ) && ( o2Names.length == 0 ) )
+                            {
+                                return o1Names[0].compareToIgnoreCase( "" );
+                            }
+                        }
+                    }
+                    else if ( ( o1 instanceof String ) && ( o2 instanceof SyntaxImpl ) )
+                    {
+                        return Integer.MIN_VALUE;
+                    }
+                    else if ( ( o1 instanceof SyntaxImpl ) && ( o2 instanceof String ) )
+                    {
+                        return Integer.MAX_VALUE;
+                    }
+
+                    // Default
+                    return o1.toString().compareToIgnoreCase( o2.toString() );
+                }
+            } );
+
+            // Setting the input
+            syntaxComboViewer.setInput( syntaxes );
+            syntaxComboViewer.setSelection( new StructuredSelection( none ) );
+        }
+    }
+
+
+    /**
+     * Verifies if the superior exists and displays an error if not.
+     */
+    private void verifySuperior()
+    {
+        String superior = superiorText.getText();
+        if ( ( superior != null ) && ( !superior.equals( "" ) ) )
+        {
+            if ( schemaHandler.getAttributeType( superiorText.getText() ) == null )
+            {
+                displayErrorMessage( "The superior attribute type does not exist." );
+                return;
+            }
+        }
+
+        displayErrorMessage( null );
+    }
+
+
+    /**
+     * Displays an error message and set the page status as incomplete
+     * if the message is not null.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayErrorMessage( String message )
+    {
+        setErrorMessage( message );
+        setPageComplete( message == null );
+    }
+
+
+    /**
+     * Gets the superior value.
+     *
+     * @return
+     *      the superior value
+     */
+    public String getSuperiorValue()
+    {
+        String superior = superiorText.getText();
+        if ( ( superior != null ) && ( !superior.equals( "" ) ) )
+        {
+            return superior;
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+
+    /**
+     * Gets the usage value.
+     *
+     * @return
+     *      the usage value
+     */
+    public UsageEnum getUsageValue()
+    {
+        StructuredSelection selection = ( StructuredSelection ) usageComboViewer.getSelection();
+        if ( !selection.isEmpty() )
+        {
+            String selectedUsage = ( String ) selection.getFirstElement();
+            if ( selectedUsage.equals( DIRECTORY_OPERATION ) )
+            {
+                return UsageEnum.DIRECTORY_OPERATION;
+            }
+            else if ( selectedUsage.equals( DISTRIBUTED_OPERATION ) )
+            {
+                return UsageEnum.DISTRIBUTED_OPERATION;
+            }
+            else if ( selectedUsage.equals( DSA_OPERATION ) )
+            {
+                return UsageEnum.DSA_OPERATION;
+            }
+            else if ( selectedUsage.equals( USER_APPLICATIONS ) )
+            {
+                return UsageEnum.USER_APPLICATIONS;
+            }
+            else
+            {
+                return UsageEnum.USER_APPLICATIONS;
+            }
+        }
+        else
+        {
+            return UsageEnum.USER_APPLICATIONS;
+        }
+    }
+
+
+    /**
+     * Gets the syntax value.
+     *
+     * @return
+     *      the syntax value
+     */
+    public String getSyntax()
+    {
+        Object selection = ( ( StructuredSelection ) syntaxComboViewer.getSelection() ).getFirstElement();
+
+        if ( selection instanceof SyntaxImpl )
+        {
+            return ( ( SyntaxImpl ) selection ).getOid();
+        }
+
+        return null;
+    }
+
+
+    /**
+     * Gets the syntax length value.
+     *
+     * @return
+     *      the syntax length value
+     */
+    public int getSyntaxLengthValue()
+    {
+        return lengthSpinner.getSelection();
+    }
+
+
+    /**
+     * Gets the 'Obsolete' value.
+     *
+     * @return
+     *      the 'Obsolete' value
+     */
+    public boolean getObsoleteValue()
+    {
+        return obsoleteCheckbox.getSelection();
+    }
+
+
+    /**
+     * Gets the 'Single Value' value
+     *
+     * @return
+     *      the 'Single Value' value
+     */
+    public boolean getSingleValueValue()
+    {
+        return singleValueCheckbox.getSelection();
+    }
+
+
+    /**
+     * Gets the 'Collective' value.
+     *
+     * @return
+     *      the 'Collective' value
+     */
+    public boolean getCollectiveValue()
+    {
+        return collectiveCheckbox.getSelection();
+    }
+
+
+    /**
+     * Gets the 'No User Modification' value.
+     *
+     * @return
+     *      the 'No User Modification' value
+     */
+    public boolean getNoUserModificationValue()
+    {
+        return noUserModificationCheckbox.getSelection();
+    }
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeContentWizardPage.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeGeneralWizardPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeGeneralWizardPage.java?rev=592094&view=auto
==============================================================================
--- directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeGeneralWizardPage.java (added)
+++ directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeGeneralWizardPage.java Mon Nov  5 09:14:24 2007
@@ -0,0 +1,424 @@
+/*
+ *  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.schemaeditor.view.wizards;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.directory.shared.asn1.primitives.OID;
+import org.apache.directory.studio.schemaeditor.Activator;
+import org.apache.directory.studio.schemaeditor.PluginConstants;
+import org.apache.directory.studio.schemaeditor.controller.SchemaHandler;
+import org.apache.directory.studio.schemaeditor.model.Schema;
+import org.apache.directory.studio.schemaeditor.view.dialogs.EditAliasesDialog;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.DialogPage;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ComboViewer;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+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.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+
+/**
+ * This class represents the General WizardPage of the NewAttributeTypeWizard.
+ * <p>
+ * It is used to let the user enter general information about the
+ * attribute type he wants to create (schema, OID, aliases an description).
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class NewAttributeTypeGeneralWizardPage extends WizardPage
+{
+    /** The SchemaHandler */
+    private SchemaHandler schemaHandler;
+
+    /** The aliases */
+    private String[] aliases;
+
+    /** The selected schema */
+    private Schema selectedSchema;
+
+    // UI fields
+    private ComboViewer schemaComboViewer;
+    private Text oidText;
+    private Text aliasesText;
+    private Button aliasesButton;
+    private Text descriptionText;
+
+
+    /**
+     * Creates a new instance of NewAttributeTypeGeneralWizardPage.
+     */
+    protected NewAttributeTypeGeneralWizardPage()
+    {
+        super( "NewAttributeTypeGeneralWizardPage" );
+        setTitle( "Attribute Type" );
+        setDescription( "Create a new attribute type." );
+        setImageDescriptor( AbstractUIPlugin.imageDescriptorFromPlugin( Activator.PLUGIN_ID,
+            PluginConstants.IMG_ATTRIBUTE_TYPE_NEW_WIZARD ) );
+
+        schemaHandler = Activator.getDefault().getSchemaHandler();
+        aliases = new String[0];
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
+     */
+    public void createControl( Composite parent )
+    {
+        Composite composite = new Composite( parent, SWT.NULL );
+        GridLayout layout = new GridLayout();
+        composite.setLayout( layout );
+
+        // Schema Group
+        Group schemaGroup = new Group( composite, SWT.NONE );
+        schemaGroup.setText( "Schema" );
+        schemaGroup.setLayout( new GridLayout( 2, false ) );
+        schemaGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Schema
+        Label schemaLabel = new Label( schemaGroup, SWT.NONE );
+        schemaLabel.setText( "Schema:" );
+        Combo schemaCombo = new Combo( schemaGroup, SWT.READ_ONLY );
+        schemaCombo.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        schemaComboViewer = new ComboViewer( schemaCombo );
+        schemaComboViewer.setContentProvider( new ArrayContentProvider() );
+        schemaComboViewer.setLabelProvider( new LabelProvider()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
+             */
+            public String getText( Object element )
+            {
+                if ( element instanceof Schema )
+                {
+                    return ( ( Schema ) element ).getName();
+                }
+
+                // Default
+                return super.getText( element );
+            }
+        } );
+        schemaComboViewer.addSelectionChangedListener( new ISelectionChangedListener()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+             */
+            public void selectionChanged( SelectionChangedEvent event )
+            {
+                dialogChanged();
+            }
+        } );
+
+        // Naming and Description Group
+        Group namingDescriptionGroup = new Group( composite, SWT.NONE );
+        namingDescriptionGroup.setText( "Naming and Description" );
+        namingDescriptionGroup.setLayout( new GridLayout( 3, false ) );
+        namingDescriptionGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // OID
+        Label oidLabel = new Label( namingDescriptionGroup, SWT.NONE );
+        oidLabel.setText( "OID:" );
+        oidText = new Text( namingDescriptionGroup, SWT.BORDER );
+        oidText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 ) );
+        oidText.addModifyListener( new ModifyListener()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+             */
+            public void modifyText( ModifyEvent arg0 )
+            {
+                dialogChanged();
+            }
+        } );
+        oidText.addVerifyListener( new VerifyListener()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.swt.events.VerifyListener#verifyText(org.eclipse.swt.events.VerifyEvent)
+             */
+            public void verifyText( VerifyEvent e )
+            {
+                if ( !e.text.matches( "([0-9]*\\.?)*" ) ) //$NON-NLS-1$
+                {
+                    e.doit = false;
+                }
+            }
+        } );
+
+        // Aliases
+        Label aliasesLabel = new Label( namingDescriptionGroup, SWT.NONE );
+        aliasesLabel.setText( "Aliases:" );
+        aliasesText = new Text( namingDescriptionGroup, SWT.BORDER );
+        aliasesText.setEnabled( false );
+        aliasesText.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+        aliasesButton = new Button( namingDescriptionGroup, SWT.PUSH );
+        aliasesButton.setText( "Edit..." );
+        aliasesButton.addSelectionListener( new SelectionAdapter()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+             */
+            public void widgetSelected( SelectionEvent arg0 )
+            {
+                EditAliasesDialog dialog = new EditAliasesDialog( aliases );
+
+                if ( ( dialog.open() == Dialog.OK ) && ( dialog.isDirty() ) )
+                {
+                    aliases = dialog.getAliases();
+                    fillInAliasesLabel();
+                    dialogChanged();
+                }
+            }
+        } );
+
+        // Description
+        Label descriptionLabel = new Label( namingDescriptionGroup, SWT.NONE );
+        descriptionLabel.setText( "Description:" );
+        descriptionText = new Text( namingDescriptionGroup, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL );
+        GridData descriptionGridData = new GridData( SWT.FILL, SWT.NONE, true, false, 2, 1 );
+        descriptionGridData.heightHint = 67;
+        descriptionText.setLayoutData( descriptionGridData );
+        descriptionText.addModifyListener( new ModifyListener()
+        {
+            /* (non-Javadoc)
+             * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+             */
+            public void modifyText( ModifyEvent arg0 )
+            {
+                dialogChanged();
+            }
+        } );
+
+        initFields();
+
+        setControl( composite );
+
+        displayErrorMessage( null );
+        setPageComplete( false );
+    }
+
+
+    /**
+     * Initializes the UI fields.
+     */
+    private void initFields()
+    {
+        // Filling the Schemas table
+        if ( schemaHandler != null )
+        {
+            List<Schema> schemas = new ArrayList<Schema>();
+            schemas.addAll( schemaHandler.getSchemas() );
+
+            Collections.sort( schemas, new Comparator<Schema>()
+            {
+                public int compare( Schema o1, Schema o2 )
+                {
+                    return o1.getName().compareToIgnoreCase( o2.getName() );
+                }
+            } );
+
+            schemaComboViewer.setInput( schemas );
+
+            if ( selectedSchema != null )
+            {
+                schemaComboViewer.setSelection( new StructuredSelection( selectedSchema ) );
+            }
+        }
+    }
+
+
+    /**
+     * This method is called when the user modifies something in the UI.
+     */
+    private void dialogChanged()
+    {
+        if ( schemaComboViewer.getSelection().isEmpty() )
+        {
+            displayErrorMessage( "A Schema must be specified." );
+            return;
+        }
+        else if ( oidText.getText().equals( "" ) )
+        {
+            displayErrorMessage( "An OID must be specified." );
+            return;
+        }
+        else if ( ( !oidText.getText().equals( "" ) ) && ( !OID.isOID( oidText.getText() ) ) )
+        {
+            displayErrorMessage( "Incorrect OID." );
+            return;
+        }
+        else if ( ( !oidText.getText().equals( "" ) ) && ( OID.isOID( oidText.getText() ) )
+            && ( schemaHandler.isAliasOrOidAlreadyTaken( oidText.getText() ) ) )
+        {
+            displayErrorMessage( "An object with this OID already exists." );
+            return;
+        }
+        else if ( aliases.length == 0 )
+        {
+            displayWarningMessage( "The attribute type does not have any name. It is recommanded to add at least one name." );
+            return;
+        }
+
+        displayErrorMessage( null );
+    }
+
+
+    /**
+     * Displays an error message and set the page status as incomplete
+     * if the message is not null.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayErrorMessage( String message )
+    {
+        setMessage( null, DialogPage.WARNING );
+        setErrorMessage( message );
+        setPageComplete( message == null );
+    }
+
+
+    /**
+     * Displays a warning message and set the page status as complete.
+     *
+     * @param message
+     *      the message to display
+     */
+    private void displayWarningMessage( String message )
+    {
+        setErrorMessage( null );
+        setMessage( message, DialogPage.WARNING );
+        setPageComplete( true );
+    }
+
+
+    /**
+     * Fills in the Aliases Label.
+     */
+    private void fillInAliasesLabel()
+    {
+        StringBuffer sb = new StringBuffer();
+        if ( aliases.length != 0 )
+        {
+            for ( String name : aliases )
+            {
+                sb.append( name );
+                sb.append( ", " );
+            }
+            sb.deleteCharAt( sb.length() - 1 );
+            sb.deleteCharAt( sb.length() - 1 );
+        }
+        aliasesText.setText( sb.toString() );
+    }
+
+
+    /**
+     * Get the name of the schema.
+     *
+     * @return
+     *      the name of the schema
+     */
+    public String getSchemaValue()
+    {
+        StructuredSelection selection = ( StructuredSelection ) schemaComboViewer.getSelection();
+        if ( !selection.isEmpty() )
+        {
+            Schema schema = ( Schema ) selection.getFirstElement();
+
+            return schema.getName();
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+
+    /**
+     * Gets the value of the OID.
+     *
+     * @return
+     *      the value of the OID
+     */
+    public String getOidValue()
+    {
+        return oidText.getText();
+    }
+
+
+    /**
+     * Gets the value of the aliases.
+     *
+     * @return
+     *      the value of the aliases
+     */
+    public String[] getAliasesValue()
+    {
+        return aliases;
+    }
+
+
+    /**
+     * Gets the value of the description.
+     *
+     * @return
+     *      the value of the description
+     */
+    public String getDescriptionValue()
+    {
+        return descriptionText.getText();
+    }
+
+
+    /**
+     * Sets the selected schema.
+     *
+     * @param schema
+     *      the selected schema
+     */
+    public void setSelectedSchema( Schema schema )
+    {
+        selectedSchema = schema;
+    }
+}

Propchange: directory/sandbox/felixk/studio-schemaeditor/src/main/java/org/apache/directory/studio/schemaeditor/view/wizards/NewAttributeTypeGeneralWizardPage.java
------------------------------------------------------------------------------
    svn:eol-style = native