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 2008/05/26 16:08:54 UTC
svn commit: r660195 - in
/directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations:
./ actions/ jobs/
Author: pamarcelot
Date: Mon May 26 07:08:52 2008
New Revision: 660195
URL: http://svn.apache.org/viewvc?rev=660195&view=rev
Log:
Added a verification on protocol ports to see if they are not already used before to launch the server.
Modified:
directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/ApacheDsPluginUtils.java
directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/actions/ServerInstanceRunAction.java
directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/jobs/LaunchServerInstanceJob.java
Modified: directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/ApacheDsPluginUtils.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/ApacheDsPluginUtils.java?rev=660195&r1=660194&r2=660195&view=diff
==============================================================================
--- directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/ApacheDsPluginUtils.java (original)
+++ directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/ApacheDsPluginUtils.java Mon May 26 07:08:52 2008
@@ -49,6 +49,9 @@
/** The version of ApacheDS bundle with the plugin */
private static final String APACHEDS_VERSION = "1.5.2";
+ /** The line separator */
+ public static final String LINE_SEPARATOR = System.getProperty( "line.separator" );
+
/** This array of String contains all filenames of the needed libraries to launch Apache DS */
public static final String[] apachedsLibraries = new String[]
{ "antlr-2.7.7.jar", "apacheds-bootstrap-extract-1.5.2.jar", "apacheds-bootstrap-partition-1.5.2.jar",
@@ -221,9 +224,9 @@
File apachedsConfFile = new File( confFolder, "apacheds.conf" );
copyConfigurationFile( "apacheds.conf", apachedsConfFile );
- // Copying log4j.properties file
+ // Creating log4j.properties file
File log4jPropertiesFile = new File( confFolder, "log4j.properties" );
- createServerInstanceLog4jPropertiesFile( new FileOutputStream( log4jPropertiesFile ), id, 1024 ); // Setting 1024 as default port
+ createServerInstanceLog4jPropertiesFile( new FileOutputStream( log4jPropertiesFile ), 1024 ); // Setting 1024 as default port
// Copying server.xml file
File serverXmlFile = new File( confFolder, "server.xml" );
@@ -246,13 +249,10 @@
*
* @param os
* the {@link OutputStream} to write to
- * @param id
- * the id of the server instance
* @throws IOException
* if an error occurs when writing to the file
*/
- public static void createServerInstanceLog4jPropertiesFile( OutputStream os, String id, int port )
- throws IOException
+ public static void createServerInstanceLog4jPropertiesFile( OutputStream os, int port ) throws IOException
{
// Creating the file content in a StringBuffer
StringBuffer sb = new StringBuffer();
Modified: directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/actions/ServerInstanceRunAction.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/actions/ServerInstanceRunAction.java?rev=660195&r1=660194&r2=660195&view=diff
==============================================================================
--- directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/actions/ServerInstanceRunAction.java (original)
+++ directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/actions/ServerInstanceRunAction.java Mon May 26 07:08:52 2008
@@ -20,16 +20,27 @@
package org.apache.directory.studio.apacheds.experimentations.actions;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.apacheds.configuration.model.ServerXmlIOException;
+import org.apache.directory.studio.apacheds.configuration.model.v152.ServerConfigurationV152;
+import org.apache.directory.studio.apacheds.configuration.model.v152.ServerXmlIOV152;
import org.apache.directory.studio.apacheds.experimentations.ApacheDsPlugin;
import org.apache.directory.studio.apacheds.experimentations.ApacheDsPluginConstants;
+import org.apache.directory.studio.apacheds.experimentations.ApacheDsPluginUtils;
import org.apache.directory.studio.apacheds.experimentations.jobs.LaunchServerInstanceJob;
import org.apache.directory.studio.apacheds.experimentations.model.ServerInstance;
import org.apache.directory.studio.apacheds.experimentations.views.ServersView;
+import org.apache.mina.util.AvailablePortFinder;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
@@ -68,15 +79,180 @@
*/
public void run()
{
+ // Getting the selection
StructuredSelection selection = ( StructuredSelection ) view.getViewer().getSelection();
if ( ( !selection.isEmpty() ) && ( selection.size() == 1 ) )
{
- LaunchServerInstanceJob job = new LaunchServerInstanceJob( ( ServerInstance ) selection.getFirstElement() );
+ // Getting the server instance
+ ServerInstance serverInstance = ( ServerInstance ) selection.getFirstElement();
+
+ // Parsing the 'server.xml' file
+ ServerXmlIOV152 serverXmlIOV152 = new ServerXmlIOV152();
+ ServerConfigurationV152 serverConfiguration = null;
+ try
+ {
+ serverConfiguration = ( ServerConfigurationV152 ) serverXmlIOV152.parse( new FileInputStream( new File(
+ ApacheDsPluginUtils.getApacheDsInstancesFolder().append( serverInstance.getId() ).append( "conf" )
+ .append( "server.xml" ).toOSString() ) ) );
+ }
+ catch ( FileNotFoundException e )
+ {
+ reportErrorReadingServerConfiguration( e.getMessage() );
+ return;
+ }
+ catch ( ServerXmlIOException e )
+ {
+ reportErrorReadingServerConfiguration( e.getMessage() );
+ return;
+ }
+
+ // Checking if we could read the 'server.xml' file
+ if ( serverConfiguration == null )
+ {
+ reportErrorReadingServerConfiguration( null );
+ return;
+ }
+
+ // Verifying if the protocol ports are currently available
+ String[] alreadyInUseProtocolPortsList = getAlreadyInUseProtocolPorts( serverConfiguration );
+ if ( ( alreadyInUseProtocolPortsList != null ) && ( alreadyInUseProtocolPortsList.length > 0 ) )
+ {
+ String title = null;
+ String message = null;
+
+ if ( alreadyInUseProtocolPortsList.length == 1 )
+ {
+ title = "Port already in use";
+ message = "The port of the protocol " + alreadyInUseProtocolPortsList[0] + " is already in use.";
+ }
+ else
+ {
+ title = "Ports already in use";
+ message = "The ports of the following protocols are already in use:";
+ for ( String alreadyInUseProtocolPort : alreadyInUseProtocolPortsList )
+ {
+ message += ApacheDsPluginUtils.LINE_SEPARATOR + "\t" + "- " + alreadyInUseProtocolPort;
+ }
+ }
+
+ message += ApacheDsPluginUtils.LINE_SEPARATOR + ApacheDsPluginUtils.LINE_SEPARATOR
+ + "Do you wish to continue?";
+
+ MessageDialog dialog = new MessageDialog( view.getSite().getShell(), title, null, message,
+ MessageDialog.WARNING, new String[]
+ { IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL }, MessageDialog.OK );
+ if ( dialog.open() == MessageDialog.CANCEL )
+ {
+ return;
+ }
+ }
+
+ LaunchServerInstanceJob job = new LaunchServerInstanceJob( serverInstance );
job.schedule();
}
}
+ /**
+ * Reports to the user an error message indicating the server
+ * configuration could not be read correctly.
+ *
+ * @param errorMessage
+ * an error message which can be <code>null</code>
+ */
+ private void reportErrorReadingServerConfiguration( String errorMessage )
+ {
+ String message = null;
+
+ if ( errorMessage == null )
+ {
+ message = "Unable to read the server configuration.";
+ }
+ else
+ {
+ message = "Unable to read the server configuration." + ApacheDsPluginUtils.LINE_SEPARATOR
+ + ApacheDsPluginUtils.LINE_SEPARATOR + "The following error occurred: " + errorMessage;
+ }
+
+ MessageDialog dialog = new MessageDialog( view.getSite().getShell(), "Unable to read the server configuration",
+ null, message, MessageDialog.ERROR, new String[]
+ { IDialogConstants.OK_LABEL }, MessageDialog.OK );
+ dialog.open();
+ }
+
+
+ /**
+ * Gets an array of String containing the ports and their associated
+ * protocols which are already in use.
+ *
+ * @param serverConfiguration
+ * the server configuration
+ * @return
+ * an array of String containing the ports and their associated
+ * protocols which are already in use.
+ */
+ private String[] getAlreadyInUseProtocolPorts( ServerConfigurationV152 serverConfiguration )
+ {
+ List<String> alreadyInUseProtocolPortsList = new ArrayList<String>();
+
+ // LDAP
+ if ( true ) // Add a isEnableLdap() method to the server configuration
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getLdapPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "LDAP (port " + serverConfiguration.getLdapPort() + ")" );
+ }
+ }
+
+ // LDAPS
+ if ( serverConfiguration.isEnableLdaps() )
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getLdapsPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "LDAPS (port " + serverConfiguration.getLdapsPort() + ")" );
+ }
+ }
+ // Kerberos
+ if ( serverConfiguration.isEnableKerberos() )
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getKerberosPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "Kerberos (port " + serverConfiguration.getKerberosPort() + ")" );
+ }
+ }
+
+ // DNS
+ if ( serverConfiguration.isEnableDns() )
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getDnsPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "DNS (port " + serverConfiguration.getDnsPort() + ")" );
+ }
+ }
+
+ // NTP
+ if ( serverConfiguration.isEnableNtp() )
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getNtpPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "NTP (port " + serverConfiguration.getNtpPort() + ")" );
+ }
+ }
+
+ // Change Password
+ if ( serverConfiguration.isEnableChangePassword() )
+ {
+ if ( !AvailablePortFinder.available( serverConfiguration.getChangePasswordPort() ) )
+ {
+ alreadyInUseProtocolPortsList.add( "ChangePassword (port "
+ + serverConfiguration.getChangePasswordPort() + ")" );
+ }
+ }
+
+ return alreadyInUseProtocolPortsList.toArray( new String[0] );
+ }
+
+
/* (non-Javadoc)
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
Modified: directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/jobs/LaunchServerInstanceJob.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/jobs/LaunchServerInstanceJob.java?rev=660195&r1=660194&r2=660195&view=diff
==============================================================================
--- directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/jobs/LaunchServerInstanceJob.java (original)
+++ directory/sandbox/pamarcelot/studio-apacheds-plugin/studio-apacheds-experimentations/src/main/java/org/apache/directory/studio/apacheds/experimentations/jobs/LaunchServerInstanceJob.java Mon May 26 07:08:52 2008
@@ -21,13 +21,16 @@
import java.io.File;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.apache.directory.studio.apacheds.experimentations.ApacheDsPlugin;
+import org.apache.directory.studio.apacheds.configuration.model.ServerXmlIOException;
+import org.apache.directory.studio.apacheds.configuration.model.v152.ServerConfigurationV152;
+import org.apache.directory.studio.apacheds.configuration.model.v152.ServerXmlIOV152;
import org.apache.directory.studio.apacheds.experimentations.ApacheDsPluginUtils;
import org.apache.directory.studio.apacheds.experimentations.ConsolesHandler;
import org.apache.directory.studio.apacheds.experimentations.LogMessageConsole;
@@ -43,22 +46,25 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.JavaRuntime;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
/**
* This class implements a {@link Job} that is used to launch a server instance.
- *
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
@@ -79,7 +85,9 @@
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
*/
protected IStatus run( IProgressMonitor monitor )
@@ -87,6 +95,7 @@
// Setting the name of the Job
setName( "Starting " + serverInstance.getName() + "..." );
+ // Setting the server in a "starting" state
serverInstance.setState( ServerStateEnum.STARTING );
Display.getDefault().asyncExec( new Runnable()
@@ -113,7 +122,15 @@
launchSocketServer( port );
// Overwriting the server instance log4j.properties file
- overwriteServerInstanceLog4jPropertiesFile( port );
+ try
+ {
+ overwriteServerInstanceLog4jPropertiesFile( port );
+ }
+ catch ( IOException e1 )
+ {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
// Launching Apache DS
launchApacheDS();
@@ -134,13 +151,13 @@
/**
- * Launches a Log4J {@link SocketServer} which will be used to redirect
- * the logs of Apache DS to the console.
+ * Launches a Log4J {@link SocketServer} which will be used to redirect the
+ * logs of Apache DS to the console.
+ *
+ * @param port
+ * the port
+ * @param
*
- * @param port
- * the port
- * @param
- *
*/
private void launchSocketServer( int port )
{
@@ -165,15 +182,20 @@
/**
- * Overwrites the log4j.properties file of the server instance with the given port number.
- *
+ * Overwrites the log4j.properties file of the server instance with the
+ * given port number.
+ *
* @param port
- * the port
+ * the port
+ * @throws IOException
*/
- private void overwriteServerInstanceLog4jPropertiesFile( int port )
+ private void overwriteServerInstanceLog4jPropertiesFile( int port ) throws IOException
{
- // TODO Auto-generated method stub
-
+ IPath confFolderPath = ApacheDsPluginUtils.getApacheDsInstancesFolder().append( serverInstance.getId() )
+ .append( "conf" );
+ File confFolder = new File( confFolderPath.toOSString() );
+ ApacheDsPluginUtils.createServerInstanceLog4jPropertiesFile( new FileOutputStream( new File( confFolder,
+ "log4j.properties" ) ), port );
}
@@ -271,7 +293,7 @@
e.printStackTrace();
}
- // Launching the launch configuration
+ // Launching the launch configuration
try
{
configuration.launch( ILaunchManager.RUN_MODE, new NullProgressMonitor() );
@@ -281,6 +303,6 @@
// TODO Auto-generated catch block
e.printStackTrace();
}
- // DebugUITools.launch( configuration, ILaunchManager.RUN_MODE );
+ // DebugUITools.launch( configuration, ILaunchManager.RUN_MODE );
}
}