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 2011/01/12 17:37:15 UTC

svn commit: r1058223 - in /directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2: actions/ editor/ jobs/

Author: pamarcelot
Date: Wed Jan 12 16:37:15 2011
New Revision: 1058223

URL: http://svn.apache.org/viewvc?rev=1058223&view=rev
Log:
Added implementation for the 'Export Configuration' action.
"Save as" code is now shared between this action and the editor.

Added:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorUtils.java
Removed:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorAddPageAction.java
Modified:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorExportConfigurationAction.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorImportConfigurationAction.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorExportConfigurationAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorExportConfigurationAction.java?rev=1058223&r1=1058222&r2=1058223&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorExportConfigurationAction.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorExportConfigurationAction.java Wed Jan 12 16:37:15 2011
@@ -21,10 +21,17 @@
 package org.apache.directory.studio.apacheds.configuration.v2.actions;
 
 
+import java.lang.reflect.InvocationTargetException;
+
 import org.apache.directory.studio.apacheds.configuration.v2.ApacheDS2ConfigurationPlugin;
 import org.apache.directory.studio.apacheds.configuration.v2.ApacheDS2ConfigurationPluginConstants;
+import org.apache.directory.studio.apacheds.configuration.v2.editor.ServerConfigurationEditor;
+import org.apache.directory.studio.apacheds.configuration.v2.editor.ServerConfigurationEditorUtils;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.Action;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
 
 
 /**
@@ -34,6 +41,22 @@ import org.eclipse.jface.resource.ImageD
  */
 public class EditorExportConfigurationAction extends Action
 {
+    /** The associated editor */
+    private ServerConfigurationEditor editor;
+
+
+    /**
+     * Creates a new instance of EditorExportConfigurationAction.
+     *
+     * @param editor
+     *      the associated editor
+     */
+    public EditorExportConfigurationAction( ServerConfigurationEditor editor )
+    {
+        this.editor = editor;
+    }
+
+
     /**
      * {@inheritDoc}
      */
@@ -58,5 +81,31 @@ public class EditorExportConfigurationAc
      */
     public void run()
     {
+        try
+        {
+            editor.getSite().getWorkbenchWindow().run( false, false, new IRunnableWithProgress()
+            {
+                public void run( IProgressMonitor monitor ) throws InvocationTargetException, InterruptedException
+                {
+                    try
+                    {
+                        // Saving the configuration as a new file and getting the associated new editor input
+                        IEditorInput newInput = ServerConfigurationEditorUtils.doSaveAs( monitor, editor.getSite()
+                            .getShell(),
+                            editor.getEditorInput(), editor.getConfigWriter() );
+                    }
+                    catch ( Exception e )
+                    {
+                        // TODO handle the exception
+                    }
+                }
+            } );
+        }
+        catch ( Exception e )
+        {
+            // TODO handle the exception
+            e.printStackTrace();
+        }
+
     }
 }

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorImportConfigurationAction.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorImportConfigurationAction.java?rev=1058223&r1=1058222&r2=1058223&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorImportConfigurationAction.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/actions/EditorImportConfigurationAction.java Wed Jan 12 16:37:15 2011
@@ -21,10 +21,13 @@
 package org.apache.directory.studio.apacheds.configuration.v2.actions;
 
 
+import java.util.jar.JarFile;
+
 import org.apache.directory.studio.apacheds.configuration.v2.ApacheDS2ConfigurationPlugin;
 import org.apache.directory.studio.apacheds.configuration.v2.ApacheDS2ConfigurationPluginConstants;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.dialogs.SaveAsDialog;
 
 
 /**
@@ -58,5 +61,6 @@ public class EditorImportConfigurationAc
      */
     public void run()
     {
+        
     }
 }

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java?rev=1058223&r1=1058222&r2=1058223&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java Wed Jan 12 16:37:15 2011
@@ -38,28 +38,15 @@ import org.apache.directory.studio.apach
 import org.apache.directory.studio.common.core.jobs.StudioJob;
 import org.apache.directory.studio.common.core.jobs.StudioProgressMonitor;
 import org.apache.directory.studio.common.core.jobs.StudioRunnableWithProgress;
-import org.apache.directory.studio.common.ui.CommonUIUtils;
-import org.apache.directory.studio.common.ui.filesystem.PathEditorInput;
 import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
 import org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable;
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IPathEditorInput;
 import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.dialogs.SaveAsDialog;
 import org.eclipse.ui.forms.editor.FormEditor;
 import org.eclipse.ui.part.FileEditorInput;
 
@@ -89,6 +76,14 @@ public class ServerConfigurationEditor e
         super.init( site, input );
         setPartName( input.getName() );
 
+        // Checking if the input is a new server configuration file
+        if ( input instanceof NewServerConfigurationInput )
+        {
+            // New server configuration file have a dirty state 
+            // set to true since they are not saved yet
+            setDirty( true );
+        }
+
         readConfiguration();
     }
 
@@ -317,10 +312,8 @@ public class ServerConfigurationEditor e
                 {
                     try
                     {
-                        monitor
-                            .beginTask( "Saving Server Configuration", IProgressMonitor.UNKNOWN );
-                        boolean success = doSaveAs( monitor );
-                        setDirty( !success );
+                        monitor.beginTask( "Saving Server Configuration", IProgressMonitor.UNKNOWN );
+                        doSaveAs( monitor );
                         monitor.done();
                     }
                     catch ( Exception e )
@@ -347,124 +340,25 @@ public class ServerConfigurationEditor e
      */
     private boolean doSaveAs( IProgressMonitor monitor ) throws Exception
     {
-        // detect IDE or RCP:
-        // check if perspective org.eclipse.ui.resourcePerspective is available
-        boolean isIDE = CommonUIUtils.isIDEEnvironment();
-
-        if ( isIDE )
-        {
-            // Asking the user for the location where to 'save as' the file
-            SaveAsDialog dialog = new SaveAsDialog( getSite().getShell() );
-
-            IEditorInput input = getEditorInput();
-            String inputClassName = input.getClass().getName();
-            if ( input instanceof FileEditorInput )
-            // FileEditorInput class is used when the file is opened
-            // from a project in the workspace.
-            {
-                dialog.setOriginalFile( ( ( FileEditorInput ) input ).getFile() );
-            }
-            else if ( input instanceof IPathEditorInput )
-            {
-                dialog.setOriginalFile( ResourcesPlugin.getWorkspace().getRoot()
-                    .getFile( ( ( IPathEditorInput ) input ).getPath() ) );
-            }
-            else if ( inputClassName.equals( "org.eclipse.ui.internal.editors.text.JavaFileEditorInput" ) //$NON-NLS-1$
-                || inputClassName.equals( "org.eclipse.ui.ide.FileStoreEditorInput" ) ) //$NON-NLS-1$
-            // The class 'org.eclipse.ui.internal.editors.text.JavaFileEditorInput'
-            // is used when opening a file from the menu File > Open... in Eclipse 3.2.x
-            // The class 'org.eclipse.ui.ide.FileStoreEditorInput' is used when
-            // opening a file from the menu File > Open... in Eclipse 3.3.x
-            {
-                dialog.setOriginalFile( ResourcesPlugin.getWorkspace().getRoot()
-                    .getFile( new Path( input.getToolTipText() ) ) );
-            }
-            else
-            {
-                dialog.setOriginalName( "config.ldif" );
-            }
-
-            if ( dialog.open() != Dialog.OK )
-            {
-                return false;
-            }
-
-            // Getting if the resulting file
-            IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile( dialog.getResult() );
-
-            // Creating the file if it does not exist
-            if ( !file.exists() )
-            {
-                file.create( new ByteArrayInputStream( "".getBytes() ), true, null ); //$NON-NLS-1$
-            }
-
-            // Creating the new input for the editor
-            FileEditorInput fei = new FileEditorInput( file );
-
-            // Saving the file to disk
-            saveConfiguration( fei, monitor );
-
-            // Setting the new input to the editor
-            setInput( fei );
-        }
-        else
+        // Saving the configuration as a new file and getting the associated new editor input
+        IEditorInput newInput = ServerConfigurationEditorUtils.doSaveAs( monitor, getSite().getShell(),
+            getEditorInput(), getConfigWriter() );
+
+        // Checking if the 'save as' is successful 
+        boolean success = newInput != null;
+        if ( success )
         {
-            Shell shell = getSite().getShell();
-            boolean canOverwrite = false;
-            String path = null;
-
-            while ( !canOverwrite )
-            {
-                // Open FileDialog
-                FileDialog dialog = new FileDialog( shell, SWT.SAVE );
-                path = dialog.open();
-                if ( path == null )
-                {
-                    return false;
-                }
-
-                // Check whether file exists and if so, confirm overwrite
-                final File externalFile = new File( path );
-                if ( externalFile.exists() )
-                {
-                    String question = NLS.bind(
-                        "The file \"{0}\" already exists. Do you want to replace the existing file?", path ); //$NON-NLS-1$
-                    MessageDialog overwriteDialog = new MessageDialog( shell, "Question", null, question, //$NON-NLS-1$
-                        MessageDialog.QUESTION, new String[]
-                            { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0 );
-                    int overwrite = overwriteDialog.open();
-                    switch ( overwrite )
-                    {
-                        case 0: // Yes
-                            canOverwrite = true;
-                            break;
-                        case 1: // No
-                            break;
-                        case 2: // Cancel
-                        default:
-                            return false;
-                    }
-                }
-                else
-                {
-                    canOverwrite = true;
-                }
-            }
-
-            // Saving the file to disk
-            saveConfiguration( path );
-
-            // Creating the new input for the editor
-            PathEditorInput newInput = new PathEditorInput( new Path( path ) );
-
             // Setting the new input to the editor
             setInput( newInput );
-        }
 
-        // Updating the title and tooltip texts
-        setPartName( getEditorInput().getName() );
+            // Resetting the dirty state of the editor
+            setDirty( false );
 
-        return true;
+            // Updating the title and tooltip texts
+            setPartName( getEditorInput().getName() );
+        }
+
+        return success;
     }
 
 
@@ -572,7 +466,7 @@ public class ServerConfigurationEditor e
      *      the configuration writer
      * @throws Exception
      */
-    private ConfigWriter getConfigWriter() throws Exception
+    public ConfigWriter getConfigWriter() throws Exception
     {
         return new ConfigWriter( ApacheDS2ConfigurationPlugin.getDefault().getSchemaManager(), configBean );
     }

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java?rev=1058223&r1=1058222&r2=1058223&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorPage.java Wed Jan 12 16:37:15 2011
@@ -22,7 +22,6 @@ package org.apache.directory.studio.apac
 
 import org.apache.directory.server.config.beans.ConfigBean;
 import org.apache.directory.server.config.beans.DirectoryServiceBean;
-import org.apache.directory.studio.apacheds.configuration.v2.actions.EditorAddPageAction;
 import org.apache.directory.studio.apacheds.configuration.v2.actions.EditorExportConfigurationAction;
 import org.apache.directory.studio.apacheds.configuration.v2.actions.EditorImportConfigurationAction;
 import org.eclipse.jface.action.IToolBarManager;
@@ -166,16 +165,22 @@ public abstract class ServerConfiguratio
         IToolBarManager toolbarManager = form.getToolBarManager();
         toolbarManager.add( new EditorImportConfigurationAction() );
         toolbarManager.add( new Separator() );
-        toolbarManager.add( new EditorExportConfigurationAction() );
-        toolbarManager.add( new Separator() );
-        toolbarManager.add( new EditorAddPageAction( ( ServerConfigurationEditor ) getEditor() ) );
-        
+        toolbarManager.add( new EditorExportConfigurationAction( ( ServerConfigurationEditor ) getEditor() ) );
+
         toolbarManager.update( true );
 
         createFormContent( parent, toolkit );
     }
 
 
+    /**
+     * Subclasses must implement this method to create the content of their form.
+     *
+     * @param parent
+     *      the parent element
+     * @param toolkit
+     *      the form toolkit
+     */
     protected abstract void createFormContent( Composite parent, FormToolkit toolkit );
 
 

Added: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorUtils.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorUtils.java?rev=1058223&view=auto
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorUtils.java (added)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditorUtils.java Wed Jan 12 16:37:15 2011
@@ -0,0 +1,320 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.studio.apacheds.configuration.v2.editor;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.util.List;
+
+import org.apache.directory.server.config.ConfigWriter;
+import org.apache.directory.server.config.ConfigurationException;
+import org.apache.directory.shared.ldap.entry.DefaultEntry;
+import org.apache.directory.shared.ldap.ldif.LdifEntry;
+import org.apache.directory.shared.ldap.schema.SchemaManager;
+import org.apache.directory.studio.apacheds.configuration.v2.ApacheDS2ConfigurationPlugin;
+import org.apache.directory.studio.apacheds.configuration.v2.jobs.EntryBasedConfigurationPartition;
+import org.apache.directory.studio.apacheds.configuration.v2.jobs.PartitionsDiffComputer;
+import org.apache.directory.studio.common.core.jobs.StudioProgressMonitor;
+import org.apache.directory.studio.common.ui.CommonUIUtils;
+import org.apache.directory.studio.common.ui.filesystem.PathEditorInput;
+import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin;
+import org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable;
+import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPathEditorInput;
+import org.eclipse.ui.dialogs.SaveAsDialog;
+import org.eclipse.ui.part.FileEditorInput;
+
+
+/**
+ * This class contains helpful methods for the Server Configuration Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ServerConfigurationEditorUtils
+{
+    /**
+     * Performs the "Save as..." action.
+     *
+     * @param monitor
+     *      the monitor to use
+     * @throws Exception
+     */
+    /**
+     * TODO doSaveAs.
+     *
+     * @param monitor
+     * @param shell
+     * @param input
+     * @param configWriter
+     * @return
+     * @throws Exception
+     */
+    public static IEditorInput doSaveAs( IProgressMonitor monitor, Shell shell, IEditorInput input,
+        ConfigWriter configWriter )
+        throws Exception
+    {
+        // detect IDE or RCP:
+        // check if perspective org.eclipse.ui.resourcePerspective is available
+        boolean isIDE = CommonUIUtils.isIDEEnvironment();
+
+        if ( isIDE )
+        {
+            // Asking the user for the location where to 'save as' the file
+            SaveAsDialog dialog = new SaveAsDialog( shell );
+
+            String inputClassName = input.getClass().getName();
+            if ( input instanceof FileEditorInput )
+            // FileEditorInput class is used when the file is opened
+            // from a project in the workspace.
+            {
+                dialog.setOriginalFile( ( ( FileEditorInput ) input ).getFile() );
+            }
+            else if ( input instanceof IPathEditorInput )
+            {
+                dialog.setOriginalFile( ResourcesPlugin.getWorkspace().getRoot()
+                    .getFile( ( ( IPathEditorInput ) input ).getPath() ) );
+            }
+            else if ( inputClassName.equals( "org.eclipse.ui.internal.editors.text.JavaFileEditorInput" ) //$NON-NLS-1$
+                || inputClassName.equals( "org.eclipse.ui.ide.FileStoreEditorInput" ) ) //$NON-NLS-1$
+            // The class 'org.eclipse.ui.internal.editors.text.JavaFileEditorInput'
+            // is used when opening a file from the menu File > Open... in Eclipse 3.2.x
+            // The class 'org.eclipse.ui.ide.FileStoreEditorInput' is used when
+            // opening a file from the menu File > Open... in Eclipse 3.3.x
+            {
+                dialog.setOriginalFile( ResourcesPlugin.getWorkspace().getRoot()
+                    .getFile( new Path( input.getToolTipText() ) ) );
+            }
+            else
+            {
+                dialog.setOriginalName( "config.ldif" );
+            }
+
+            if ( dialog.open() != Dialog.OK )
+            {
+                return null;
+            }
+
+            // Getting if the resulting file
+            IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile( dialog.getResult() );
+
+            // Creating the file if it does not exist
+            if ( !file.exists() )
+            {
+                file.create( new ByteArrayInputStream( "".getBytes() ), true, null ); //$NON-NLS-1$
+            }
+
+            // Creating the new input for the editor
+            FileEditorInput fei = new FileEditorInput( file );
+
+            // Saving the file to disk
+            saveConfiguration( fei, configWriter, monitor );
+
+            return fei;
+        }
+        else
+        {
+            boolean canOverwrite = false;
+            String path = null;
+
+            while ( !canOverwrite )
+            {
+                // Open FileDialog
+                FileDialog dialog = new FileDialog( shell, SWT.SAVE );
+                path = dialog.open();
+                if ( path == null )
+                {
+                    return null;
+                }
+
+                // Check whether file exists and if so, confirm overwrite
+                final File externalFile = new File( path );
+                if ( externalFile.exists() )
+                {
+                    String question = NLS.bind(
+                        "The file \"{0}\" already exists. Do you want to replace the existing file?", path ); //$NON-NLS-1$
+                    MessageDialog overwriteDialog = new MessageDialog( shell, "Question", null, question, //$NON-NLS-1$
+                        MessageDialog.QUESTION, new String[]
+                            { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0 );
+                    int overwrite = overwriteDialog.open();
+                    switch ( overwrite )
+                    {
+                        case 0: // Yes
+                            canOverwrite = true;
+                            break;
+                        case 1: // No
+                            break;
+                        case 2: // Cancel
+                        default:
+                            return null;
+                    }
+                }
+                else
+                {
+                    canOverwrite = true;
+                }
+            }
+
+            // Saving the file to disk
+            saveConfiguration( path, configWriter );
+
+            // Creating the new input for the editor
+            PathEditorInput newInput = new PathEditorInput( new Path( path ) );
+
+            return newInput;
+        }
+    }
+
+
+    /**
+     * Saves the configuration.
+     *
+     * @param input
+     *      the file editor input
+     * @param configWriter
+     *      the configuration writer
+     * @param monitor
+     *      the monitor
+     * @throws Exception
+     */
+    public static void saveConfiguration( FileEditorInput input, ConfigWriter configWriter, IProgressMonitor monitor )
+        throws Exception
+    {
+        input.getFile().setContents( new ByteArrayInputStream( configWriter.writeToString().getBytes() ), true,
+            true, monitor );
+    }
+
+
+    /**
+     * Saves the configuration.
+     *
+     * @param input
+     *      the connection server configuration input
+     * @param configWriter
+     *      the configuration writer
+     * @param monitor
+     *      the monitor
+     * @return
+     *      <code>true</code> if the operation is successful,
+     *      <code>false</code> if not
+     * @throws ConfigurationException 
+     * @throws Exception
+     */
+    public static void saveConfiguration( ConnectionServerConfigurationInput input, ConfigWriter configWriter,
+        IProgressMonitor monitor )
+        throws ConfigurationException, Exception
+    {
+        // Getting the original configuration partition
+        EntryBasedConfigurationPartition originalPartition = input.getOriginalPartition();
+
+        // Creating a new configuration partition
+        SchemaManager schemaManager = ApacheDS2ConfigurationPlugin.getDefault().getSchemaManager();
+        EntryBasedConfigurationPartition newconfigurationPartition = new EntryBasedConfigurationPartition(
+            schemaManager );
+        newconfigurationPartition.initialize();
+        List<LdifEntry> convertedLdifEntries = configWriter.getConvertedLdifEntries();
+        for ( LdifEntry ldifEntry : convertedLdifEntries )
+        {
+            newconfigurationPartition.addEntry( new DefaultEntry( schemaManager, ldifEntry.getEntry() ) );
+        }
+
+        // Comparing both partitions to get the list of modifications to be applied
+        PartitionsDiffComputer partitionsDiffComputer = new PartitionsDiffComputer();
+        partitionsDiffComputer.setOriginalPartition( originalPartition );
+        partitionsDiffComputer.setDestinationPartition( newconfigurationPartition );
+        List<LdifEntry> modificationsList = partitionsDiffComputer.computeModifications( new String[]
+            { "*" } );
+
+        System.out.println( modificationsList );
+
+        // Building the resulting LDIF
+        StringBuilder modificationsLdif = new StringBuilder();
+        for ( LdifEntry ldifEntry : modificationsList )
+        {
+            modificationsLdif.append( ldifEntry.toString() );
+        }
+
+        // Getting the browser connection associated with the 
+        IBrowserConnection browserConnection = BrowserCorePlugin.getDefault().getConnectionManager()
+            .getBrowserConnection( input.getConnection() );
+
+        // Creating a StudioProgressMonitor to run the LDIF with
+        StudioProgressMonitor studioProgressMonitor = new StudioProgressMonitor( monitor );
+
+        // Updating the configuration with the resulting LDIF
+        ExecuteLdifRunnable.executeLdif( browserConnection, modificationsLdif.toString(), true, true,
+            studioProgressMonitor );
+
+        // Checking if there were errors during the execution of the LDIF
+        if ( studioProgressMonitor.errorsReported() )
+        {
+            // TODO handle error
+        }
+        else
+        {
+            System.out.println( "swapping partition" );
+
+            // Swapping the new configuration partition
+            input.setOriginalPartition( newconfigurationPartition );
+        }
+    }
+
+
+    /**
+     * Saves the configuration.
+     *
+     * @param file
+     *      the file
+     * @param configWriter
+     *      the configuration writer
+     * @throws Exception
+     */
+    public static void saveConfiguration( File file, ConfigWriter configWriter ) throws Exception
+    {
+        configWriter.writeToFile( file );
+    }
+
+
+    /**
+     * Saves the configuration.
+     *
+     * @param path
+     *      the path
+     * @param configWriter
+     *      the configuration writer
+     * @throws Exception
+     */
+    public static void saveConfiguration( String path, ConfigWriter configWriter ) throws Exception
+    {
+        saveConfiguration( new File( path ), configWriter );
+    }
+}

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java?rev=1058223&r1=1058222&r2=1058223&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java Wed Jan 12 16:37:15 2011
@@ -124,13 +124,14 @@ public class LoadConfigurationRunnable i
             if ( configBean != null )
             {
                 final ConfigBean finalConfigBean = configBean;
+                final IEditorInput finalInput = input;
 
                 Display.getDefault().asyncExec( new Runnable()
                 {
                     public void run()
-                {
-                    editor.configurationLoaded( finalConfigBean );
-                }
+                    {
+                        editor.configurationLoaded( finalConfigBean );
+                    }
                 } );
             }
         }