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/04/17 17:04:37 UTC

svn commit: r529634 - in /directory/ldapstudio/trunk/ldapstudio-apacheds-configuration: ./ src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/ src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ src/ma...

Author: pamarcelot
Date: Tue Apr 17 08:04:36 2007
New Revision: 529634

URL: http://svn.apache.org/viewvc?view=rev&rev=529634
Log:
Added a new Action for creating a new Configuration File from scratch.
Finished work on the Server Configuration Writer.

Added:
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/NewServerConfigurationAction.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriterException.java
Modified:
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/plugin.xml
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/OpenServerConfigurationAction.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ExtendedOperationsMasterDetailsBlock.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/InterceptorsMasterDetailsBlock.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionDetailsPage.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionsMasterDetailsBlock.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditor.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditorInput.java
    directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriter.java

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/plugin.xml
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/plugin.xml?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/plugin.xml (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/plugin.xml Tue Apr 17 08:04:36 2007
@@ -40,6 +40,12 @@
                label="Open..."
                menubarPath="org.apache.directory.ldapstudio.apacheds.configuration.actionset.menu/open"
                style="push"/>
+         <action
+               class="org.apache.directory.ldapstudio.apacheds.configuration.actions.NewServerConfigurationAction"
+               id="org.apache.directory.ldapstudio.apacheds.configuration.newServerConfiguration"
+               label="New Configuration file"
+               menubarPath="org.apache.directory.ldapstudio.apacheds.configuration.actionset.menu/open"
+               style="push"/>
       </actionSet>
    </extension>
    <extension

Added: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/NewServerConfigurationAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/NewServerConfigurationAction.java?view=auto&rev=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/NewServerConfigurationAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/NewServerConfigurationAction.java Tue Apr 17 08:04:36 2007
@@ -0,0 +1,164 @@
+package org.apache.directory.ldapstudio.apacheds.configuration.actions;
+
+
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttribute;
+import javax.naming.directory.BasicAttributes;
+
+import org.apache.directory.ldapstudio.apacheds.configuration.Activator;
+import org.apache.directory.ldapstudio.apacheds.configuration.editor.ServerConfigurationEditor;
+import org.apache.directory.ldapstudio.apacheds.configuration.editor.ServerConfigurationEditorInput;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.ExtendedOperation;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.IndexedAttribute;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.Interceptor;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.Partition;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.ServerConfiguration;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * This class implements the New Server Configuration Action.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class NewServerConfigurationAction extends Action implements IWorkbenchWindowActionDelegate
+{
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+     */
+    public void run( IAction action )
+    {
+        // Creating the Default ServerConfiguration
+        ServerConfiguration serverConfiguration = new ServerConfiguration();
+
+        // General Settings
+        serverConfiguration.setAllowAnonymousAccess( false );
+        serverConfiguration.setEnableAccessControl( false );
+        serverConfiguration.setEnableChangePassword( false );
+        serverConfiguration.setEnableKerberos( false );
+        serverConfiguration.setEnableNTP( false );
+        serverConfiguration.setMaxSizeLimit( 1000 );
+        serverConfiguration.setMaxThreads( 8 );
+        serverConfiguration.setMaxTimeLimit( 15000 );
+        serverConfiguration.setPassword( "secret" );
+        serverConfiguration.setPort( 10389 );
+        serverConfiguration.setPrincipal( "uid=admin,ou=system" );
+        serverConfiguration.setSynchronizationPeriod( 15000 );
+
+        // System Partition
+        Partition partition = new Partition( "system" );
+        partition.setSuffix( "ou=system" );
+        Attributes attributes = new BasicAttributes( true );
+        Attribute attribute = new BasicAttribute( "objectClass" );
+        attribute.add( "top" );
+        attribute.add( "organizationalUnit" );
+        attribute.add( "extensibleObject" );
+        attributes.put( attribute );
+        attributes.put( new BasicAttribute( "ou", "system" ) );
+        partition.setContextEntry( attributes );
+        partition.setEnableOptimizer( true );
+        partition.setCacheSize( 100 );
+        partition.setSynchronizationOnWrite( true );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.1", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.2", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.3", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.4", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.5", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.6", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "1.3.6.1.4.1.18060.0.4.1.2.7", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "ou", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "uid", 100 ) );
+        partition.addIndexedAttribute( new IndexedAttribute( "objectClass", 100 ) );
+        partition.setSystemPartition( true );
+        serverConfiguration.addPartition( partition );
+
+        // Interceptors
+        Interceptor interceptor = new Interceptor( "normalizationService" );
+        interceptor.setClassType( "org.apache.directory.server.core.normalization.NormalizationService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "authenticationService" );
+        interceptor.setClassType( "org.apache.directory.server.core.authn.AuthenticationService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "referralService" );
+        interceptor.setClassType( "org.apache.directory.server.core.referral.ReferralService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "authorizationService" );
+        interceptor.setClassType( "org.apache.directory.server.core.authz.AuthorizationService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "defaultAuthorizationService" );
+        interceptor.setClassType( "org.apache.directory.server.core.authz.DefaultAuthorizationService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "exceptionService" );
+        interceptor.setClassType( "org.apache.directory.server.core.exception.ExceptionService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "operationalAttributeService" );
+        interceptor.setClassType( "org.apache.directory.server.core.operational.OperationalAttributeService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "schemaService" );
+        interceptor.setClassType( "org.apache.directory.server.core.schema.SchemaService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "subentryService" );
+        interceptor.setClassType( "org.apache.directory.server.core.subtree.SubentryService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "collectiveAttributeService" );
+        interceptor.setClassType( "org.apache.directory.server.core.collective.CollectiveAttributeService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "eventService" );
+        interceptor.setClassType( "org.apache.directory.server.core.event.EventService" );
+        serverConfiguration.addInterceptor( interceptor );
+        interceptor = new Interceptor( "triggerService" );
+        interceptor.setClassType( "org.apache.directory.server.core.trigger.TriggerService" );
+        serverConfiguration.addInterceptor( interceptor );
+
+        // Extended Operations
+        serverConfiguration.addExtendedOperation( new ExtendedOperation(
+            "org.apache.directory.server.ldap.support.extended.GracefulShutdownHandler" ) );
+        serverConfiguration.addExtendedOperation( new ExtendedOperation(
+            "org.apache.directory.server.ldap.support.extended.LaunchDiagnosticUiHandler" ) );
+
+        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+        try
+        {
+            page.openEditor( new ServerConfigurationEditorInput( serverConfiguration ), ServerConfigurationEditor.ID );
+        }
+        catch ( PartInitException e )
+        {
+            Activator.getDefault().getLog().log(
+                new Status( Status.ERROR, Activator.PLUGIN_ID, Status.OK, e.getMessage(), e.getCause() ) );
+        }
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+     */
+    public void selectionChanged( IAction action, ISelection selection )
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
+     */
+    public void dispose()
+    {
+    }
+
+
+    /* (non-Javadoc)
+     * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
+     */
+    public void init( IWorkbenchWindow window )
+    {
+    }
+}

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/OpenServerConfigurationAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/OpenServerConfigurationAction.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/OpenServerConfigurationAction.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/actions/OpenServerConfigurationAction.java Tue Apr 17 08:04:36 2007
@@ -35,7 +35,7 @@
     public void run( IAction action )
     {
         FileDialog fd = new FileDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OPEN );
-        fd.setText( "Open a Server Configuration file" );
+        fd.setText( "Select a file" );
         fd.setFilterExtensions( new String[]
             { "*.xml", "*.*" } );
         fd.setFilterNames( new String[]
@@ -61,6 +61,7 @@
             messageBox.setText( "Error!" );
             messageBox.setMessage( "An error occurred when reading the file." + "\n" + e.getMessage() );
             messageBox.open();
+            return;
         }
 
         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
@@ -72,6 +73,7 @@
         {
             Activator.getDefault().getLog().log(
                 new Status( Status.ERROR, Activator.PLUGIN_ID, Status.OK, e.getMessage(), e.getCause() ) );
+            return;
         }
     }
 

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ExtendedOperationsMasterDetailsBlock.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ExtendedOperationsMasterDetailsBlock.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ExtendedOperationsMasterDetailsBlock.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ExtendedOperationsMasterDetailsBlock.java Tue Apr 17 08:04:36 2007
@@ -70,6 +70,9 @@
     /** The Extended Operations List */
     private List<ExtendedOperation> extendedOperations;
 
+    /** The Details Page */
+    private ExtendedOperationDetailsPage detailsPage;
+
     private static final String NEW_NAME = "newExtendedOperation";
 
     // UI Fields
@@ -281,7 +284,8 @@
      */
     protected void registerPages( DetailsPart detailsPart )
     {
-        detailsPart.registerPage( ExtendedOperation.class, new ExtendedOperationDetailsPage( this ) );
+        detailsPage = new ExtendedOperationDetailsPage( this );
+        detailsPart.registerPage( ExtendedOperation.class, detailsPage );
     }
 
 
@@ -299,10 +303,7 @@
      */
     public void save()
     {
-        serverConfiguration.clearExtendedOperations();
-        for ( ExtendedOperation extendedOperation : extendedOperations )
-        {
-            serverConfiguration.addExtendedOperation( extendedOperation );
-        }
+        detailsPage.commit( true );
+        viewer.setInput( extendedOperations );
     }
 }

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/InterceptorsMasterDetailsBlock.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/InterceptorsMasterDetailsBlock.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/InterceptorsMasterDetailsBlock.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/InterceptorsMasterDetailsBlock.java Tue Apr 17 08:04:36 2007
@@ -70,6 +70,9 @@
     /** The Interceptors List */
     private List<Interceptor> interceptors;
 
+    /** The Details Page */
+    private InterceptorDetailsPage detailsPage;
+
     private static final String NEW_NAME = "New Interceptor ";
 
     // UI Fields
@@ -367,7 +370,8 @@
      */
     protected void registerPages( DetailsPart detailsPart )
     {
-        detailsPart.registerPage( Interceptor.class, new InterceptorDetailsPage( this ) );
+        detailsPage = new InterceptorDetailsPage( this );
+        detailsPart.registerPage( Interceptor.class, detailsPage );
     }
 
 
@@ -385,10 +389,7 @@
      */
     public void save()
     {
-        serverConfiguration.clearInterceptors();
-        for ( Interceptor interceptor : interceptors )
-        {
-            serverConfiguration.addInterceptor( interceptor );
-        }
+        detailsPage.commit( true );
+        viewer.setInput( interceptors );
     }
 }

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionDetailsPage.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionDetailsPage.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionDetailsPage.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionDetailsPage.java Tue Apr 17 08:04:36 2007
@@ -620,6 +620,10 @@
     public void commit( boolean onSave )
     {
         input.setName( nameText.getText() );
+        input.setCacheSize( Integer.parseInt( cacheSizeText.getText() ) );
+        input.setSuffix( suffixText.getText() );
+        input.setEnableOptimizer( enableOptimizerCheckbox.getSelection() );
+        input.setSynchronizationOnWrite( synchOnWriteCheckbox.getSelection() );
     }
 
 

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionsMasterDetailsBlock.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionsMasterDetailsBlock.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionsMasterDetailsBlock.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/PartitionsMasterDetailsBlock.java Tue Apr 17 08:04:36 2007
@@ -70,6 +70,9 @@
     /** The Interceptors List */
     private List<Partition> partitions;
 
+    /** The Details Page */
+    private PartitionDetailsPage detailsPage;
+
     private static final String NEW_NAME = "New Partition ";
 
     // UI Fields
@@ -295,7 +298,8 @@
      */
     protected void registerPages( DetailsPart detailsPart )
     {
-        detailsPart.registerPage( Partition.class, new PartitionDetailsPage( this ) );
+        detailsPage = new PartitionDetailsPage( this );
+        detailsPart.registerPage( Partition.class, detailsPage );
     }
 
 
@@ -313,10 +317,7 @@
      */
     public void save()
     {
-        serverConfiguration.clearPartitions();
-        for ( Partition partition : partitions )
-        {
-            serverConfiguration.addPartition( partition );
-        }
+        detailsPage.commit( true );
+        viewer.setInput( partitions );
     }
 }

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditor.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditor.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditor.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditor.java Tue Apr 17 08:04:36 2007
@@ -21,12 +21,18 @@
 
 
 import org.apache.directory.ldapstudio.apacheds.configuration.Activator;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.ServerConfiguration;
 import org.apache.directory.ldapstudio.apacheds.configuration.model.ServerConfigurationWriter;
+import org.apache.directory.ldapstudio.apacheds.configuration.model.ServerConfigurationWriterException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.forms.editor.FormEditor;
 
 
@@ -41,6 +47,12 @@
     /** The Editor ID */
     public static final String ID = "org.apache.directory.ldapstudio.apacheds.configuration.editor";
 
+    /** The editor input */
+    private IEditorInput input;
+
+    /** The Server Configuration */
+    private ServerConfiguration serverConfiguration;
+
     /** The dirty flag */
     private boolean dirty = false;
 
@@ -57,8 +69,10 @@
     public void init( IEditorSite site, IEditorInput input ) throws PartInitException
     {
         super.init( site, input );
-
+        this.input = input;
         setPartName( input.getName() );
+        serverConfiguration = ( ( ServerConfigurationEditorInput ) input ).getServerConfiguration();
+        dirty = serverConfiguration.getPath() == null;
     }
 
 
@@ -103,8 +117,48 @@
         monitor.worked( 1 );
         extendedOperationsPage.save();
         monitor.worked( 1 );
-        ServerConfigurationWriter writer = new ServerConfigurationWriter();
-        writer.write( ( ( ServerConfigurationEditorInput ) getEditorInput() ).getServerConfiguration() );
+
+        // Checking if the ServerConfiguration is already existing or if it's a new file.
+        if ( serverConfiguration.getPath() == null )
+        {
+            FileDialog fd = new FileDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.SAVE );
+            fd.setText( "Select a file" );
+            fd.setFilterExtensions( new String[]
+                { "*.xml", "*.*" } );
+            fd.setFilterNames( new String[]
+                { "XML files", "All files" } );
+            String selectedFile = fd.open();
+            // selected == null if 'cancel' has been pushed
+            if ( selectedFile == null || "".equals( selectedFile ) )
+            {
+                monitor.setCanceled( true );
+                return;
+            }
+
+            // TODO Add the overwrite code...
+
+            serverConfiguration.setPath( selectedFile );
+            setTitleToolTip( input.getToolTipText() );
+        }
+
+        // Saving the ServerConfiguration to disk
+        try
+        {
+            ServerConfigurationWriter writer = new ServerConfigurationWriter();
+            writer.write( serverConfiguration );
+        }
+        catch ( ServerConfigurationWriterException e )
+        {
+            MessageBox messageBox = new MessageBox( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
+                SWT.OK | SWT.ICON_ERROR );
+            messageBox.setText( "Error!" );
+            messageBox.setMessage( "An error occurred when writing the file to disk." + "\n" + e.getMessage() );
+            messageBox.open();
+            setDirty( true );
+            monitor.done();
+            return;
+        }
+
         monitor.worked( 1 );
         setDirty( false );
         monitor.done();

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditorInput.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditorInput.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditorInput.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/editor/ServerConfigurationEditorInput.java Tue Apr 17 08:04:36 2007
@@ -123,4 +123,28 @@
     {
         return null;
     }
+
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    public boolean equals( Object obj )
+    {
+        if ( obj instanceof ServerConfigurationEditorInput )
+        {
+            ServerConfigurationEditorInput input = ( ServerConfigurationEditorInput ) obj;
+
+            if ( input.exists() && exists() )
+            {
+                String inputPath = input.getServerConfiguration().getPath();
+                String myPath = getServerConfiguration().getPath();
+
+                if ( inputPath != null && myPath != null )
+                {
+                    return inputPath.equals( myPath );
+                }
+            }
+        }
+        return false;
+    }
 }

Modified: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriter.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriter.java?view=diff&rev=529634&r1=529633&r2=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriter.java (original)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriter.java Tue Apr 17 08:04:36 2007
@@ -20,8 +20,14 @@
 package org.apache.directory.ldapstudio.apacheds.configuration.model;
 
 
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
 import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.stream.StreamSource;
@@ -43,30 +49,50 @@
 public class ServerConfigurationWriter
 {
     /**
-     * TODO write.
+     * Writes the Server Configuration to disk.
      *
      * @param serverConfiguration
+     *      the Server Configuration
+     * @throws ServerConfigurationWriterException
+     *      if an error occurrs when writing the Server Configuration file
      */
-    public void write( ServerConfiguration serverConfiguration )
+    public void write( ServerConfiguration serverConfiguration ) throws ServerConfigurationWriterException
     {
-        System.out.println( "Writing file to disk." );
+        try
+        {
+            BufferedWriter outFile = new BufferedWriter( new FileWriter( serverConfiguration.getPath() ) );
 
-        Document document = DocumentHelper.createDocument();
-        Element root = document.addElement( "beans" );
+            Document document = DocumentHelper.createDocument();
+            Element root = document.addElement( "beans" );
 
-        // Environment Bean
-        createEnvironmentBean( root, serverConfiguration );
+            // Environment Bean
+            createEnvironmentBean( root, serverConfiguration );
 
-        // Configuration Bean
-        createConfigurationBean( root, serverConfiguration );
+            // Configuration Bean
+            createConfigurationBean( root, serverConfiguration );
 
-        // System Partition Configuration Bean
-        createSystemPartitionConfigurationBean( root, serverConfiguration );
+            // System Partition Configuration Bean
+            createSystemPartitionConfigurationBean( root, serverConfiguration );
 
-        // User Partitions Beans
-        createUserPartitionConfigurationsBean( root, serverConfiguration );
+            // User Partitions Beans
+            createUserPartitionsConfigurationsBean( root, serverConfiguration );
 
-        System.out.println( styleDocument( document ).asXML() );
+            // CustomEditors Bean
+            createCustomEditorsBean( root );
+
+            Document stylizedDocuement = styleDocument( document );
+            stylizedDocuement.addDocType( "beans", "-//SPRING//DTD BEAN//EN",
+                "http://www.springframework.org/dtd/spring-beans.dtd" );
+            outFile.write( stylizedDocuement.asXML() );
+            outFile.close();
+        }
+        catch ( Exception e )
+        {
+            ServerConfigurationWriterException exception = new ServerConfigurationWriterException( e.getMessage(), e
+                .getCause() );
+            exception.setStackTrace( e.getStackTrace() );
+            throw exception;
+        }
     }
 
 
@@ -88,14 +114,17 @@
         propertyElement.addAttribute( "name", "properties" );
         Element propsElement = propertyElement.addElement( "props" );
 
+        // Key 'java.naming.security.authentication'
         Element propElement = propsElement.addElement( "prop" );
         propElement.addAttribute( "key", "java.naming.security.authentication" );
         propElement.setText( "simple" );
 
+        // Key 'java.naming.security.principal'
         propElement = propsElement.addElement( "prop" );
         propElement.addAttribute( "key", "java.naming.security.principal" );
         propElement.setText( serverConfiguration.getPrincipal() );
 
+        // Key 'java.naming.security.credentials'
         propElement = propsElement.addElement( "prop" );
         propElement.addAttribute( "key", "java.naming.security.credentials" );
         propElement.setText( serverConfiguration.getPassword() );
@@ -154,7 +183,7 @@
 
         // Enable NTP
         propertyElement = configurationBean.addElement( "property" );
-        propertyElement.addAttribute( "name", "enableNTP" );
+        propertyElement.addAttribute( "name", "enableNtp" );
         propertyElement.addAttribute( "value", "" + serverConfiguration.isEnableNTP() );
 
         // EnableKerberos
@@ -180,7 +209,7 @@
         // SystemPartitionConfiguration
         propertyElement = configurationBean.addElement( "property" );
         propertyElement.addAttribute( "name", "systemPartitionConfiguration" );
-        propertyElement.addAttribute( "value", "systemPartitionConfiguration" );
+        propertyElement.addAttribute( "ref", "systemPartitionConfiguration" );
 
         // PartitionConfigurations
         propertyElement = configurationBean.addElement( "property" );
@@ -229,7 +258,8 @@
 
                 interceptorPropertyElement = interceptorBeanElement.addElement( "property" );
                 interceptorPropertyElement.addAttribute( "name", "interceptor" );
-                interceptorPropertyElement.addElement( "bean" ).addAttribute( "class", interceptor.getClassType() );
+                interceptorPropertyElement.addElement( "bean" ).addAttribute( "class",
+                    ( interceptor.getClassType() == null ? "" : interceptor.getClassType() ) );
             }
         }
 
@@ -271,8 +301,17 @@
      * @param serverConfiguration
      *      the Server Configuration
      */
-    private void createUserPartitionConfigurationsBean( Element root, ServerConfiguration serverConfiguration )
+    private void createUserPartitionsConfigurationsBean( Element root, ServerConfiguration serverConfiguration )
     {
+        int counter = 1;
+        for ( Partition partition : serverConfiguration.getPartitions() )
+        {
+            if ( !partition.isSystemPartition() )
+            {
+                createPartitionConfigurationBean( root, partition, "partition-" + counter );
+                counter++;
+            }
+        }
     }
 
 
@@ -288,10 +327,109 @@
      */
     private void createPartitionConfigurationBean( Element root, Partition partition, String name )
     {
-        Element systemPartitionBean = root.addElement( "bean" );
-        systemPartitionBean.addAttribute( "id", name );
-        systemPartitionBean.addAttribute( "class",
+        Element partitionBean = root.addElement( "bean" );
+        partitionBean.addAttribute( "id", name );
+        partitionBean.addAttribute( "class",
             "org.apache.directory.server.core.partition.impl.btree.MutableBTreePartitionConfiguration" );
+
+        // Name
+        Element propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "name" );
+        propertyElement.addAttribute( "value", partition.getName() );
+
+        // CacheSize
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "cacheSize" );
+        propertyElement.addAttribute( "value", "" + partition.getCacheSize() );
+
+        // Suffix
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "suffix" );
+        propertyElement.addAttribute( "value", partition.getSuffix() );
+
+        // OptimizerEnabled
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "optimizerEnabled" );
+        propertyElement.addAttribute( "value", "" + partition.isEnableOptimizer() );
+
+        // SynchOnWrite
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "synchOnWrite" );
+        propertyElement.addAttribute( "value", "" + partition.isSynchronizationOnWrite() );
+
+        // Indexed Attributes
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "indexedAttributes" );
+        if ( partition.getIndexedAttributes().size() > 1 )
+        {
+            Element setElement = propertyElement.addElement( "set" );
+            for ( IndexedAttribute indexedAttribute : partition.getIndexedAttributes() )
+            {
+                Element beanElement = setElement.addElement( "bean" );
+                beanElement.addAttribute( "class",
+                    "org.apache.directory.server.core.partition.impl.btree.MutableIndexConfiguration" );
+
+                // AttributeID
+                Element beanPropertyElement = beanElement.addElement( "property" );
+                beanPropertyElement.addAttribute( "name", "attributeId" );
+                beanPropertyElement.addAttribute( "value", indexedAttribute.getAttributeId() );
+
+                // CacheSize
+                beanPropertyElement = beanElement.addElement( "property" );
+                beanPropertyElement.addAttribute( "name", "cacheSize" );
+                beanPropertyElement.addAttribute( "value", "" + indexedAttribute.getCacheSize() );
+            }
+        }
+
+        // ContextEntry
+        propertyElement = partitionBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "contextEntry" );
+        if ( partition.getContextEntry() != null )
+        {
+            Element valueElement = propertyElement.addElement( "value" );
+
+            Attributes contextEntry = partition.getContextEntry();
+            StringBuffer sb = new StringBuffer();
+            NamingEnumeration<? extends Attribute> ne = contextEntry.getAll();
+            while ( ne.hasMoreElements() )
+            {
+                Attribute attribute = ( Attribute ) ne.nextElement();
+                try
+                {
+                    NamingEnumeration<?> values = attribute.getAll();
+                    while ( values.hasMoreElements() )
+                    {
+                        sb.append( attribute.getID() + ": " + values.nextElement() + "\n" );
+                    }
+                }
+                catch ( NamingException e )
+                {
+                }
+            }
+
+            valueElement.setText( sb.toString() );
+        }
+    }
+
+
+    /**
+     * Creates the Custom Editors Bean.
+     *
+     * @param root
+     *      the root Element
+     */
+    private void createCustomEditorsBean( Element root )
+    {
+        Element customEditorsBean = root.addElement( "bean" );
+        customEditorsBean.addAttribute( "class", "org.springframework.beans.factory.config.CustomEditorConfigurer" );
+        Element propertyElement = customEditorsBean.addElement( "property" );
+        propertyElement.addAttribute( "name", "customEditors" );
+        Element mapElement = propertyElement.addElement( "map" );
+        Element entryElement = mapElement.addElement( "entry" );
+        entryElement.addAttribute( "key", "javax.naming.directory.Attributes" );
+        Element entryBeanElement = entryElement.addElement( "bean" );
+        entryBeanElement.addAttribute( "class",
+            "org.apache.directory.server.core.configuration.AttributesPropertyEditor" );
     }
 
 
@@ -301,35 +439,23 @@
      * @param document
      *      the Dom4j Document
      * @return
+     *      the stylized Document
+     * @throws TransformerException 
      */
-    private Document styleDocument( Document document )
+    private Document styleDocument( Document document ) throws TransformerException
     {
         // load the transformer using JAXP
         TransformerFactory factory = TransformerFactory.newInstance();
         Transformer transformer = null;
-        try
-        {
-            transformer = factory.newTransformer( new StreamSource( Activator.class
-                .getResourceAsStream( "template.xslt" ) ) );
-        }
-        catch ( TransformerConfigurationException e1 )
-        {
-            // TODO Auto-generated catch block
-            e1.printStackTrace();
-        }
+
+        transformer = factory
+            .newTransformer( new StreamSource( Activator.class.getResourceAsStream( "template.xslt" ) ) );
 
         // now lets style the given document
         DocumentSource source = new DocumentSource( document );
         DocumentResult result = new DocumentResult();
-        try
-        {
-            transformer.transform( source, result );
-        }
-        catch ( TransformerException e )
-        {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+
+        transformer.transform( source, result );
 
         // return the transformed document
         Document transformedDoc = result.getDocument();

Added: directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriterException.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriterException.java?view=auto&rev=529634
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriterException.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-apacheds-configuration/src/main/java/org/apache/directory/ldapstudio/apacheds/configuration/model/ServerConfigurationWriterException.java Tue Apr 17 08:04:36 2007
@@ -0,0 +1,51 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.ldapstudio.apacheds.configuration.model;
+
+
+/**
+ * This class represents the Server Configuration Writer Exception, that can be thrown
+ * when an error is detected when writing the Server Configuration file.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ServerConfigurationWriterException extends Exception
+{
+    /** The Serial Version UID */
+    private static final long serialVersionUID = -2360825137845553569L;
+
+
+    /**
+     * Creates a new instance of ServerConfigurationParserException.
+     *
+     * @param message
+     *      the detail message (which is saved for later retrieval by the 
+     *      getMessage() method).
+     * @param cause
+     *      the cause (which is saved for later retrieval by the getCause() 
+     *      method). (A null value is permitted, and indicates that the cause 
+     *      is nonexistent or unknown.)
+     */
+    public ServerConfigurationWriterException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+}