1. mirror
  2. Apache Directory Studio

Commits

Pierre-Arnaud Marcelot  committed 3769ce1

Added a new Runnable for the deletion of a server. The runnable makes sure that the server is stopped before removing all associated files.

git-svn-id: https://svn.apache.org/repos/asf/directory/studio/trunk@98626913f79535-47bb-0310-9956-ffa450edef68

  • Participants
  • Parent commits 4244160
  • Branches trunk

Comments (0)

Files changed (10)

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/actions/DeleteAction.java

View file
 package org.apache.directory.studio.ldapservers.actions;
 
 
-import java.io.File;
-
-import org.apache.directory.studio.ldapservers.LdapServersManager;
 import org.apache.directory.studio.ldapservers.LdapServersPluginConstants;
 import org.apache.directory.studio.ldapservers.dialogs.DeleteServerDialog;
+import org.apache.directory.studio.ldapservers.jobs.DeleteLdapServerRunnable;
+import org.apache.directory.studio.ldapservers.jobs.StudioLdapServerJob;
 import org.apache.directory.studio.ldapservers.model.LdapServer;
-import org.apache.directory.studio.ldapservers.model.LdapServerStatus;
 import org.apache.directory.studio.ldapservers.views.ServersView;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
             DeleteServerDialog dsd = new DeleteServerDialog( view.getSite().getShell(), server );
             if ( dsd.open() == DeleteServerDialog.OK )
             {
-                // Checking if the server is running
-                // If yes, we need to shut it down before removing its data
-                if ( server.getStatus() == LdapServerStatus.STARTED )
-                {
-                    // Setting the server of the server to 'stopping'
-                    //                    server.setStatus( LdapServerStatus.STOPPING ); // TODO
-
-                    // Getting the launch job // TODO
-                    //                    StartLdapServerRunnable launchJob = server.getLaunchJob();
-                    //                    if ( launchJob != null )
-                    //                    {
-                    //                        // Getting the launch
-                    //                        ILaunch launch = launchJob.getLaunch();
-                    //                        if ( ( launch != null ) && ( !launch.isTerminated() ) )
-                    //                        {
-                    //                            // Terminating the launch
-                    //                            try
-                    //                            {
-                    //                                launch.terminate();
-                    //                            }
-                    //                            catch ( DebugException e )
-                    //                            {
-                    //                                ApacheDsPluginUtils.reportError( Messages.getString( "DeleteAction.ErrorWhileStopping" ) //$NON-NLS-1$
-                    //                                    + e.getMessage() );
-                    //                            }
-                    //                        }
-                    //                    }
-                }
-
-                // Removing the server
-                LdapServersManager.getDefault().removeServer( server );
-
-                // Deleting the associated directory on disk
-                deleteDirectory( LdapServersManager.getServerFolder( server ).toFile() );
-
-                // Letting the LDAP Server Adapter finish the deletion of the server
-                try
-                {
-                    server.getLdapServerAdapterExtension().getInstance().delete( server );
-                }
-                catch ( Exception e )
-                {
-                    // TODO Auto-generated catch block
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Deletes the given directory
-     *
-     * @param path
-     *      the directory
-     * @return
-     *      <code>true</code> if and only if the directory is 
-     *      successfully deleted; <code>false</code> otherwise
-     */
-    private boolean deleteDirectory( File path )
-    {
-        if ( path.exists() )
-        {
-            File[] files = path.listFiles();
-            for ( int i = 0; i < files.length; i++ )
-            {
-                if ( files[i].isDirectory() )
-                {
-                    deleteDirectory( files[i] );
-                }
-                else
-                {
-                    files[i].delete();
-                }
+                // Creating and scheduling the job to delete the server
+                StudioLdapServerJob job = new StudioLdapServerJob( new DeleteLdapServerRunnable( server ) );
+                job.schedule();
             }
         }
-        return ( path.delete() );
     }
 
 

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/jobs/DeleteLdapServerRunnable.java

View file
+/*
+ *  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.ldapservers.jobs;
+
+
+import java.io.File;
+
+import org.apache.directory.studio.common.core.jobs.StudioProgressMonitor;
+import org.apache.directory.studio.common.core.jobs.StudioRunnableWithProgress;
+import org.apache.directory.studio.ldapservers.LdapServersManager;
+import org.apache.directory.studio.ldapservers.model.LdapServer;
+import org.apache.directory.studio.ldapservers.model.LdapServerStatus;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.osgi.util.NLS;
+
+
+/**
+ * This class implements a {@link Job} that is used to delete an LDAP Server.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DeleteLdapServerRunnable implements StudioRunnableWithProgress
+{
+    /** The server */
+    private LdapServer server;
+
+
+    /**
+     * Creates a new instance of StartLdapServerRunnable.
+     * 
+     * @param server
+     *            the LDAP Server
+     */
+    public DeleteLdapServerRunnable( LdapServer server )
+    {
+        super();
+        this.server = server;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getErrorMessage()
+    {
+        return NLS.bind( "Unable to start server ''{0}''", new String[]
+            { server.getName() } );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public Object[] getLockedObjects()
+    {
+        return new Object[]
+            { server };
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getName()
+    {
+        return NLS
+            .bind( Messages.getString( "DeleteLdapServerRunnable.DeleteServer" ), new String[] { server.getName() } ); //$NON-NLS-1$
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run( StudioProgressMonitor monitor )
+    {
+        // Storing the started status of the server
+        boolean serverStarted = server.getStatus() == LdapServerStatus.STARTED;
+
+        try
+        {
+            // Checking if the server is running
+            // If yes, we need to shut it down before removing its data
+            if ( serverStarted )
+            {
+                // Creating, scheduling and waiting on the job to stop the server
+                StudioLdapServerJob job = new StudioLdapServerJob( new StopLdapServerRunnable( server ) );
+                job.schedule();
+                job.join();
+            }
+
+            // Removing the server
+            LdapServersManager.getDefault().removeServer( server );
+
+            // Deleting the associated directory on disk
+            deleteDirectory( LdapServersManager.getServerFolder( server ).toFile() );
+
+            // Letting the LDAP Server Adapter finish the deletion of the server
+            server.getLdapServerAdapterExtension().getInstance().delete( server );
+        }
+        catch ( InterruptedException e )
+        {
+            // Nothing to do
+        }
+        catch ( Exception e )
+        {
+            if ( serverStarted )
+            {
+                // Setting the server as started
+                server.setStatus( LdapServerStatus.STARTED );
+            }
+            else
+            {
+                // Setting the server as stopped
+                server.setStatus( LdapServerStatus.STOPPED );
+            }
+
+            // Reporting the error to the monitor
+            monitor.reportError( e );
+        }
+    }
+
+
+    /**
+     * Deletes the given directory
+     *
+     * @param path
+     *      the directory
+     * @return
+     *      <code>true</code> if and only if the directory is 
+     *      successfully deleted; <code>false</code> otherwise
+     */
+    private boolean deleteDirectory( File path )
+    {
+        if ( path.exists() )
+        {
+            File[] files = path.listFiles();
+            for ( int i = 0; i < files.length; i++ )
+            {
+                if ( files[i].isDirectory() )
+                {
+                    deleteDirectory( files[i] );
+                }
+                else
+                {
+                    files[i].delete();
+                }
+            }
+        }
+        return ( path.delete() );
+    }
+}

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/jobs/StopLdapServerRunnable.java

View file
     {
         // Setting the status on the server to 'stopping'
         server.setStatus( LdapServerStatus.STOPPING );
+        
+        try
+        {
+            Thread.sleep( 10000 );
+        }
+        catch ( InterruptedException e1 )
+        {
+            // TODO Auto-generated catch block
+            e1.printStackTrace();
+        }
 
         // Starting a new watchdog thread
         StopLdapServerWatchDogThread.runNewWatchDogThread( server );

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/jobs/messages.properties

View file
 #  specific language governing permissions and limitations
 #  under the License.
 
+DeleteLdapServerRunnable.DeleteServer=Delete Server ''{0}''
 StartLdapServerRunnable.StartServer=Start Server ''{0}''
 StopLdapServerRunnable.StopServer=Stop Server ''{0}''

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/jobs/messages_de.properties

View file
 #  specific language governing permissions and limitations
 #  under the License.
 
+DeleteLdapServerRunnable.DeleteServer=TODO:Delete Server ''{0}''
 StartLdapServerRunnable.StartServer=TODO:Start Server ''{0}''
 StopLdapServerRunnable.StopServer=TODO:Stop Server ''{0}''

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/jobs/messages_fr.properties

View file
 #  specific language governing permissions and limitations
 #  under the License.
 
+DeleteLdapServerRunnable.DeleteServer=Supprimer le serveur ''{0}''
 StartLdapServerRunnable.StartServer=D\u00E9marrer le serveur ''{0}''
 StopLdapServerRunnable.StopServer=Arr�ter le serveur ''{0}''

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/properties/ServerPropertyPage.java

View file
         Text nameText = BaseWidgetUtils.createLabeledText( composite, "", 1 ); //$NON-NLS-1$
 
         // Type
-        BaseWidgetUtils.createLabel( composite, "Type:", 1 );
+        BaseWidgetUtils.createLabel( composite, Messages.getString( "ServerPropertyPage.Type" ), 1 ); //$NON-NLS-1$
         Text typeText = BaseWidgetUtils.createLabeledText( composite, "", 1 ); //$NON-NLS-1$
 
         // Vendor
-        BaseWidgetUtils.createLabel( composite, "Vendor:", 1 );
+        BaseWidgetUtils.createLabel( composite, Messages.getString( "ServerPropertyPage.Vendor" ), 1 ); //$NON-NLS-1$
         Text vendorText = BaseWidgetUtils.createLabeledText( composite, "", 1 ); //$NON-NLS-1$
 
         // Location
             LdapServerAdapterExtension ldapServerAdapterExtension = server.getLdapServerAdapterExtension();
 
             nameText.setText( server.getName() );
-            typeText.setText( ldapServerAdapterExtension.getName() + " " + ldapServerAdapterExtension.getVersion() );
+            typeText.setText( ldapServerAdapterExtension.getName() + " " + ldapServerAdapterExtension.getVersion() ); //$NON-NLS-1$
             vendorText.setText( ldapServerAdapterExtension.getVendor() );
             locationText.setText( LdapServersManager.getServersFolder().append( server.getId() ).toOSString() );
         }

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/properties/messages.properties

View file
 
 ServerPropertyPage.Location=Location:
 ServerPropertyPage.Name=Name:
+ServerPropertyPage.Type=Type:
+ServerPropertyPage.Vendor=Vendor:
 ServerPropertyPage.Version=Version:

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/properties/messages_de.properties

View file
 
 ServerPropertyPage.Location=Ort\:
 ServerPropertyPage.Name=TODO:Name:
+ServerPropertyPage.Type=TODO:Type:
+ServerPropertyPage.Vendor=TODO:Vendor:
 ServerPropertyPage.Version=TODO:Version:

File plugins/ldapservers/src/main/java/org/apache/directory/studio/ldapservers/properties/messages_fr.properties

View file
 
 ServerPropertyPage.Location=Emplacement:
 ServerPropertyPage.Name=Nom:
+ServerPropertyPage.Type=Type:
+ServerPropertyPage.Vendor=Fournisseur:
 ServerPropertyPage.Version=Version: