From 8a0c7b4a24af390782c917be4f68b45174972b19 Mon Sep 17 00:00:00 2001
From: Violette Roche-Montane <violette.roche-montane@forgerock.com>
Date: Mon, 24 Mar 2014 09:50:32 +0000
Subject: [PATCH] Checkpoint OPENDJ-1343 Migrate dsconfig - Code cleanup on the StatusCli and UnistallCliHelper as they are linked to the LDAPManagementContextFactory.java which is in the dsconfig package.

---
 opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java                      |  153 ++++-----------
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java          |  246 +++++++++++-------------
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java |   92 ++-------
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliApplication.java                      |   18 +
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java                 |   62 +----
 5 files changed, 207 insertions(+), 364 deletions(-)

diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
index d9b3cf7..250114f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -26,6 +26,13 @@
  */
 package org.opends.guitools.uninstaller;
 
+import static com.forgerock.opendj.cli.ArgumentConstants.OPTION_LONG_BINDPWD;
+import static com.forgerock.opendj.cli.ArgumentConstants.OPTION_LONG_BINDPWD_FILE;
+import static com.forgerock.opendj.cli.Utils.CONFIRMATION_MAX_TRIES;
+import static org.forgerock.util.Utils.joinAsString;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.QuickSetupMessages.*;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
@@ -52,15 +59,20 @@
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.guitools.controlpanel.datamodel.ConnectionProtocolPolicy;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
-import org.opends.quicksetup.*;
-import org.opends.quicksetup.ReturnCode;
+import org.opends.quicksetup.Application;
+import org.opends.quicksetup.ApplicationException;
+import org.opends.quicksetup.Configuration;
+import org.opends.quicksetup.Constants;
+import org.opends.quicksetup.Installation;
+import org.opends.quicksetup.ProgressStep;
+import org.opends.quicksetup.Step;
+import org.opends.quicksetup.UserDataException;
 import org.opends.quicksetup.event.ProgressUpdateEvent;
 import org.opends.quicksetup.event.ProgressUpdateListener;
 import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
 import org.opends.quicksetup.util.ServerController;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.admin.client.cli.SecureConnectionCliArgs;
-import org.opends.server.tools.JavaPropertiesTool.ErrorReturnCode;
 import org.opends.server.tools.dsconfig.LDAPManagementContextFactory;
 import org.opends.server.util.StaticUtils;
 import org.opends.server.util.cli.LDAPConnectionConsoleInteraction;
@@ -71,12 +83,7 @@
 import com.forgerock.opendj.cli.Menu;
 import com.forgerock.opendj.cli.MenuBuilder;
 import com.forgerock.opendj.cli.MenuResult;
-
-import static org.forgerock.util.Utils.*;
-import static org.opends.messages.AdminToolMessages.*;
-import static org.opends.messages.QuickSetupMessages.*;
-import static com.forgerock.opendj.cli.Utils.*;
-import static com.forgerock.opendj.cli.ArgumentConstants.*;
+import com.forgerock.opendj.cli.ReturnCode;
 
 /**
  * The class used to provide some CLI interface in the uninstall.
@@ -100,7 +107,7 @@
 
   private ControlPanelInfo info;
 
-  // This CLI is always using the administration connector with SSL
+  /** This CLI is always using the administration connector with SSL. */
   private final boolean alwaysSSL = true;
   private boolean useSSL = true;
   private boolean useStartTLS = false;
@@ -114,23 +121,25 @@
   }
 
   /**
-   * Creates a UserData based in the arguments provided.  It asks
-   * user for additional information if what is provided in the arguments is not
-   * enough.
-   * @param args the ArgumentParser with the allowed arguments of the command
-   * line.  The code assumes that the arguments have already been parsed.
-   * @param rawArguments the arguments provided in the command line.
-   * @return the UserData object with what the user wants to uninstall
-   * and null if the user cancels the uninstallation.
-   * @throws UserDataException if there is an error with the data
-   * in the arguments.
-   * @throws ApplicationException if there is an error processing data in
-   * non-interactive mode and an error must be thrown (not in force on error
-   * mode).
+   * Creates a UserData based in the arguments provided. It asks user for
+   * additional information if what is provided in the arguments is not enough.
+   *
+   * @param args
+   *          the ArgumentParser with the allowed arguments of the command line.
+   *          The code assumes that the arguments have already been parsed.
+   * @param rawArguments
+   *          the arguments provided in the command line.
+   * @return the UserData object with what the user wants to uninstall and null
+   *         if the user cancels the uninstallation.
+   * @throws UserDataException
+   *           if there is an error with the data in the arguments.
+   * @throws ClientException
+   *           If there is an error processing data in non-interactive mode and
+   *           an error must be thrown (not in force on error mode).
    */
   public UninstallUserData createUserData(UninstallerArgumentParser args,
       String[] rawArguments)
-  throws UserDataException, ApplicationException
+  throws UserDataException, ClientException
   {
     parser = args;
     UninstallUserData userData = new UninstallUserData();
@@ -162,7 +171,7 @@
        */
       LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
       int v = args.validateGlobalOptions(buf);
-      if (v != ErrorReturnCode.SUCCESSFUL_NOP.getReturnCode())
+      if (v != ReturnCode.SUCCESS.get())
       {
         throw new UserDataException(null, buf.toMessage());
       }
@@ -226,14 +235,14 @@
         }
       }
       String adminUid = args.getAdministratorUID();
-      if ((adminUid == null) && !args.isInteractive())
+      if (adminUid == null && !args.isInteractive())
       {
         adminUid = args.getDefaultAdministratorUID();
       }
       userData.setAdminUID(adminUid);
       userData.setAdminPwd(args.getBindPassword());
       String referencedHostName = args.getReferencedHostName();
-      if ((referencedHostName == null) && !args.isInteractive())
+      if (referencedHostName == null && !args.isInteractive())
       {
         referencedHostName = args.getDefaultReferencedHostName();
       }
@@ -264,8 +273,7 @@
         if (!parser.isInteractive())
         {
           LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
-          throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
-              null);
+          throw new ClientException(ReturnCode.APPLICATION_ERROR, msg);
         }
       }
       userData.setLocalServerUrl(adminConnectorUrl);
@@ -286,7 +294,7 @@
         userData = null;
       }
 
-      if ((userData != null) && !args.isQuiet())
+      if (userData != null && !args.isQuiet())
       {
         println();
       }
@@ -298,9 +306,9 @@
       {
         throw (UserDataException)t;
       }
-      else if (t instanceof ApplicationException)
+      else if (t instanceof ClientException)
       {
-        throw (ApplicationException)t;
+        throw (ClientException)t;
       }
       else
       {
@@ -419,8 +427,8 @@
         {
           for (int i=0; i<msgs.length; i++)
           {
-            boolean ignore = ((i == 6) && (outsideDbs.size() == 0)) ||
-            ((i == 7) && (outsideLogs.size() == 0));
+            boolean ignore = (i == 6 && outsideDbs.size() == 0) ||
+            (i == 7 && outsideLogs.size() == 0);
             if (!ignore)
             {
               answers[i] = askConfirmation(msgs[i], true, logger);
@@ -481,8 +489,8 @@
               break;
             }
           }
-          if ((userData.getExternalDbsToRemove().size() == 0) &&
-              (userData.getExternalLogsToRemove().size() == 0) &&
+          if (userData.getExternalDbsToRemove().size() == 0 &&
+              userData.getExternalLogsToRemove().size() == 0 &&
               !userData.getRemoveLibrariesAndTools() &&
               !userData.getRemoveDatabases() &&
               !userData.getRemoveConfigurationAndSchema() &&
@@ -508,20 +516,23 @@
 
   /**
    * Commodity method used to ask the user (when necessary) if the server must
-   * be stopped or not.  It also prompts (if required) for authentication.
-   * @param userData the UserData object to be updated with the
-   * authentication of the user.
+   * be stopped or not. It also prompts (if required) for authentication.
+   *
+   * @param userData
+   *          the UserData object to be updated with the authentication of the
+   *          user.
    * @return <CODE>true</CODE> if the user wants to continue with uninstall and
-   * <CODE>false</CODE> otherwise.
-   * @throws UserDataException if there is a problem with the data
-   * provided by the user (in the particular case where we are on
-   * non-interactive uninstall and some data is missing or not valid).
-   * @throws ApplicationException if there is an error processing data in
-   * non-interactive mode and an error must be thrown (not in force on error
-   * mode).
+   *         <CODE>false</CODE> otherwise.
+   * @throws UserDataException
+   *           if there is a problem with the data provided by the user (in the
+   *           particular case where we are on non-interactive uninstall and
+   *           some data is missing or not valid).
+   * @throws ClientException
+   *           If there is an error processing data in non-interactive mode and
+   *           an error must be thrown (not in force on error mode).
    */
   private boolean checkServerState(UninstallUserData userData)
-  throws UserDataException, ApplicationException
+  throws UserDataException, ClientException
   {
     boolean cancelled = false;
     boolean interactive = parser.isInteractive();
@@ -782,17 +793,19 @@
   }
 
   /**
-   *  Ask for data required to update configuration on remote servers.  If
-   *  all the data is provided and validated, we assume that the user wants
-   *  to update the remote servers.
-   *  @return <CODE>true</CODE> if the user wants to continue and update the
-   *  remote servers.  <CODE>false</CODE> otherwise.
-   *  @throws UserDataException if there is a problem with the information
-   *  provided by the user.
-   *  @throws ApplicationException if there is an error processing data.
+   * Ask for data required to update configuration on remote servers. If all the
+   * data is provided and validated, we assume that the user wants to update the
+   * remote servers.
+   *
+   * @return <CODE>true</CODE> if the user wants to continue and update the
+   *         remote servers. <CODE>false</CODE> otherwise.
+   * @throws UserDataException
+   *           if there is a problem with the information provided by the user.
+   * @throws ClientException
+   *           If there is an error processing data.
    */
   private boolean askForAuthenticationIfNeeded(UninstallUserData userData)
-  throws UserDataException, ApplicationException
+  throws UserDataException, ClientException
   {
     boolean accepted = true;
     String uid = userData.getAdminUID();
@@ -860,8 +873,7 @@
           logger.warn(LocalizableMessage.raw(
          "Error retrieving a valid Administration Connector URL in conf file."));
           LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
-            throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
-                null);
+            throw new ClientException(ReturnCode.APPLICATION_ERROR, msg);
         }
         try
         {
@@ -889,8 +901,7 @@
           logger.warn(LocalizableMessage.raw(
          "Error retrieving a valid Administration Connector URL in conf file."));
           LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
-          throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
-              null);
+          throw new ClientException(ReturnCode.APPLICATION_ERROR, msg);
         }
 
         userData.setLocalServerUrl(adminConnectorUrl);
@@ -972,17 +983,13 @@
     boolean serverStarted = false;
     Application application = new Application()
     {
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public String getInstallationPath()
       {
         return Installation.getLocal().getRootDirectory().getAbsolutePath();
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public String getInstancePath()
       {
@@ -1025,56 +1032,42 @@
           StaticUtils.close(reader);
         }
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public ProgressStep getCurrentProgressStep()
       {
         return UninstallProgressStep.NOT_STARTED;
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public Integer getRatio(ProgressStep step)
       {
         return 0;
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public LocalizableMessage getSummary(ProgressStep step)
       {
         return null;
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public boolean isFinished()
       {
         return false;
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public boolean isCancellable()
       {
         return false;
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public void cancel()
       {
       }
-      /**
-       * {@inheritDoc}
-       */
+      /** {@inheritDoc} */
       @Override
       public void run()
       {
@@ -1182,23 +1175,25 @@
   }
 
   /**
-   * Updates the contents of the UninstallUserData while trying to connect
-   * to the remote servers.  It returns <CODE>true</CODE> if we could connect
-   * to the remote servers and all the presented certificates were accepted and
-   * <CODE>false</CODE> otherwise.
-   * continue if
-   * @param userData the user data to be updated.
-   * @return <CODE>true</CODE> if we could connect
-   * to the remote servers and all the presented certificates were accepted and
-   * <CODE>false</CODE> otherwise.
-   * @throws UserDataException if were are not in interactive mode and not in
-   * force on error mode and the operation must be stopped.
-   * @throws ApplicationException if there is an error processing data in
-   * non-interactive mode and an error must be thrown (not in force on error
-   * mode).
+   * Updates the contents of the UninstallUserData while trying to connect to
+   * the remote servers. It returns <CODE>true</CODE> if we could connect to the
+   * remote servers and all the presented certificates were accepted and
+   * <CODE>false</CODE> otherwise. continue if
+   *
+   * @param userData
+   *          the user data to be updated.
+   * @return <CODE>true</CODE> if we could connect to the remote servers and all
+   *         the presented certificates were accepted and <CODE>false</CODE>
+   *         otherwise.
+   * @throws UserDataException
+   *           if were are not in interactive mode and not in force on error
+   *           mode and the operation must be stopped.
+   * @throws ClientException
+   *           If there is an error processing data in non-interactive mode and
+   *           an error must be thrown (not in force on error mode).
    */
   private boolean updateUserUninstallDataWithRemoteServers(
-      UninstallUserData userData) throws UserDataException, ApplicationException
+      UninstallUserData userData) throws UserDataException, ClientException
   {
     boolean accepted = false;
     boolean interactive = parser.isInteractive();
@@ -1238,7 +1233,7 @@
           userData.getTrustManager());
 
       ADSContext adsContext = new ADSContext(ctx);
-      if (interactive && (userData.getTrustManager() == null))
+      if (interactive && userData.getTrustManager() == null)
       {
         // This is required when the user did  connect to the server using SSL
         // or Start TLS in interactive mode.  In this case
@@ -1277,9 +1272,9 @@
       logger.warn(LocalizableMessage.raw("Error connecting to server: "+te, te));
       exceptionMsg = Utils.getMessage(te);
 
-    } catch (ApplicationException ae)
+    } catch (ClientException ce)
     {
-      throw ae;
+      throw ce;
 
     } catch (Throwable t)
     {
@@ -1344,12 +1339,12 @@
    * @param userData the user data.
    * @throws UserDataException if there is an error with the information
    * provided by the user when we are in non-interactive mode.
-   * @throws ApplicationException if there is an error processing data in
+   * @throws ClientException if there is an error processing data in
    * non-interactive mode and an error must be thrown (not in force on error
    * mode).
    */
   private boolean handleTopologyCache(TopologyCache cache,
-      UninstallUserData userData) throws UserDataException, ApplicationException
+      UninstallUserData userData) throws UserDataException, ClientException
   {
     boolean returnValue;
     boolean stopProcessing = false;
@@ -1392,23 +1387,19 @@
         stopProcessing = true;
         break;
       case GENERIC_CREATING_CONNECTION:
-        if ((e.getCause() != null) &&
+        if (e.getCause() != null &&
             Utils.isCertificateException(e.getCause()))
         {
           if (interactive)
           {
             println();
+            stopProcessing = true;
             if (ci.promptForCertificateConfirmation(e.getCause(),
                 e.getTrustManager(), e.getLdapUrl(), true, logger))
             {
-              stopProcessing = true;
               reloadTopologyCache = true;
               updateTrustManager(userData, ci);
             }
-            else
-            {
-              stopProcessing = true;
-            }
           }
           else
           {
@@ -1428,7 +1419,7 @@
     }
     if (interactive)
     {
-      if (!stopProcessing && (exceptionMsgs.size() > 0))
+      if (!stopProcessing && exceptionMsgs.size() > 0)
       {
         println();
         try
@@ -1476,8 +1467,7 @@
               "--"+parser.forceOnErrorArg.getLongIdentifier(),
               Utils.getMessageFromCollection(exceptionMsgs,
                   Constants.LINE_SEPARATOR));
-          throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
-              null);
+          throw new ClientException(ReturnCode.APPLICATION_ERROR, msg);
         }
       }
       else
@@ -1489,9 +1479,7 @@
     return returnValue;
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isAdvancedMode() {
     return false;
@@ -1499,9 +1487,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isInteractive() {
     if (!forceNonInteractive)
@@ -1516,9 +1502,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isMenuDrivenMode() {
     return true;
@@ -1526,9 +1510,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isQuiet() {
     return false;
@@ -1536,9 +1518,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isScriptFriendly() {
     return false;
@@ -1546,9 +1526,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isVerbose() {
     return true;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
index 9d99e8e..8385a56 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
@@ -64,6 +64,8 @@
 import org.opends.server.util.DynamicConstants;
 import org.opends.server.util.StaticUtils;
 
+import com.forgerock.opendj.cli.ClientException;
+
 import static org.forgerock.util.Utils.*;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
@@ -600,30 +602,22 @@
     }
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
-  public UserData createUserData(Launcher launcher)
-          throws UserDataException, ApplicationException {
-    parser = (UninstallerArgumentParser)launcher.getArgumentParser();
-    return cliHelper.createUserData(
-        parser,
-        launcher.getArguments());
-
+  public UserData createUserData(Launcher launcher) throws UserDataException,
+      ApplicationException, ClientException
+  {
+    parser = (UninstallerArgumentParser) launcher.getArgumentParser();
+    return cliHelper.createUserData(parser, launcher.getArguments());
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public String getInstallationPath() {
     return getInstallPathFromClasspath();
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public String getInstancePath() {
     return getInstancePathFromInstallPath(getInstallPathFromClasspath());
@@ -641,9 +635,7 @@
     return ue;
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public ReturnCode getReturnCode() {
     return null;
@@ -1005,9 +997,7 @@
     }
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public ProgressStep getCurrentProgressStep() {
     return status;
@@ -1039,9 +1029,7 @@
     return hmSummary.get(step);
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isFinished() {
     return getCurrentProgressStep() ==
@@ -1054,25 +1042,19 @@
             UninstallProgressStep.FINISHED_WITH_ERROR_DELETING;
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isCancellable() {
     return false;
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public void cancel() {
     // do nothing; not cancellable
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public void windowClosing(QuickSetupDialog dlg, WindowEvent evt) {
     if ((dlg.getDisplayedStep() == PROGRESS) ||
@@ -1085,17 +1067,13 @@
     }
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public ButtonName getInitialFocusButtonName() {
     return ButtonName.FINISH;
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public Set<? extends WizardStep> getWizardSteps() {
     Set<WizardStep> setSteps = new HashSet<WizardStep>();
@@ -1105,9 +1083,7 @@
     return Collections.unmodifiableSet(setSteps);
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public QuickSetupStepPanel createWizardStepPanel(WizardStep step) {
     QuickSetupStepPanel p = null;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliApplication.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliApplication.java
index 856512b..14f2913 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliApplication.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliApplication.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
@@ -29,6 +30,8 @@
 import org.opends.quicksetup.event.ProgressNotifier;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 
+import com.forgerock.opendj.cli.ClientException;
+
 /**
  * Represents a quick setup CLI application.
  */
@@ -37,14 +40,19 @@
   /**
    * Creates a set of user data from command line arguments and installation
    * status.
-   * @param launcher that launched this application
+   *
+   * @param launcher
+   *          that launched this application
    * @return UserData object populated to reflect the input args and status
-   * @throws UserDataException if something is wrong with the data provided
-   * by the user
-   * @throws ApplicationException if there is an application specific problem
+   * @throws UserDataException
+   *           if something is wrong with the data provided by the user
+   * @throws ApplicationException
+   *           if there is an application specific problem
+   * @throws ClientException
+   *           If an error occurs when creating the data.
    */
   UserData createUserData(Launcher launcher)
-          throws UserDataException, ApplicationException;
+          throws UserDataException, ApplicationException, ClientException;
 
   /**
    * Gets the user data this application will use when running.
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
index 5a11d86..3be2146 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
@@ -179,78 +179,17 @@
           try
           {
             final SSLContextBuilder sslBuilder = new SSLContextBuilder();
-            sslBuilder.setTrustManager((trustManager==null?TrustManagers.trustAll():trustManager));
-            sslBuilder.setKeyManager(keyManager);
-            sslBuilder.setProtocol(SSLContextBuilder.PROTOCOL_SSL);
-            options.setUseStartTLS(false);
-            options.setSSLContext(sslBuilder.getSSLContext());
-
-            factory = new LDAPConnectionFactory(hostName, portNumber, options);
-            connection = factory.getConnection();
-            connection.bind(bindDN, bindPassword.toCharArray());
-            break;
-          }
-          catch (ErrorResultException e)
-          {
-            if (app.isInteractive()
-                && ci.isTrustStoreInMemory()
-                && e.getCause() != null
-                && e.getCause() instanceof SSLException
-                && e.getCause().getCause() instanceof CertificateException)
-            {
-              String authType = null;
-              if (trustManager instanceof ApplicationTrustManager)
-              { // FIXME use PromptingTrustManager
-                ApplicationTrustManager appTrustManager =
-                    (ApplicationTrustManager) trustManager;
-                authType = appTrustManager.getLastRefusedAuthType();
-                X509Certificate[] cert = appTrustManager.getLastRefusedChain();
-
-                if (ci.checkServerCertificate(cert, authType, hostName))
-                {
-                  // If the certificate is trusted, update the trust manager.
-                  trustManager = ci.getTrustManager();
-                  // Try to connect again.
-                  continue;
-                }
-              }
-            }
-            if (e.getCause() != null && e.getCause() instanceof SSLException)
-            {
-              LocalizableMessage message =
-                  ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
-                      hostName, portNumber);
-              throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
-                  message);
-            }
-            LocalizableMessage message =
-                ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT
-                    .get(hostName, portNumber);
-            throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
-                message);
-          }
-          catch (GeneralSecurityException e)
-          {
-            LocalizableMessage message =
-                ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT
-                    .get(hostName, portNumber);
-            throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
-                message);
-          }
-        }
-      }
-      else if (ci.useStartTLS())
-      {
-        while (true)
-        {
-          try
-          {
-            final SSLContextBuilder sslBuilder = new SSLContextBuilder();
             sslBuilder.setTrustManager((trustManager == null ? TrustManagers
                 .trustAll() : trustManager));
             sslBuilder.setKeyManager(keyManager);
-            sslBuilder.setProtocol(SSLContextBuilder.PROTOCOL_SSL);
-            options.setUseStartTLS(true);
+            if (ci.useStartTLS())
+            {
+              options.setUseStartTLS(true);
+            }
+            else
+            {
+              options.setUseStartTLS(false);
+            }
             options.setSSLContext(sslBuilder.getSSLContext());
 
             factory = new LDAPConnectionFactory(hostName, portNumber, options);
@@ -283,7 +222,7 @@
                 }
               }
             }
-            if (e.getCause() != null && e.getCause() instanceof SSLException)
+            if (e.getCause() instanceof SSLException)
             {
               LocalizableMessage message =
                   ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
@@ -291,6 +230,19 @@
               throw new ClientException(ReturnCode.CLIENT_SIDE_CONNECT_ERROR,
                   message);
             }
+            if (e.getCause() instanceof AuthorizationException)
+            {
+              LocalizableMessage message =
+                  ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED.get();
+              throw new ClientException(ReturnCode.AUTH_METHOD_NOT_SUPPORTED,
+                  message);
+            }
+            else if (e.getCause() instanceof AuthenticationException)
+            {
+              LocalizableMessage message =
+                  ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED.get(bindDN);
+              throw new ClientException(ReturnCode.INVALID_CREDENTIALS, message);
+            }
             LocalizableMessage message =
                 ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT
                     .get(hostName, portNumber);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java b/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java
index 78d1dc0..64a435e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java
@@ -27,6 +27,15 @@
 
 package org.opends.server.tools.status;
 
+import static com.forgerock.opendj.cli.ArgumentConstants.LIST_TABLE_SEPARATOR;
+import static org.opends.messages.AdminToolMessages.*;
+import static org.opends.messages.ToolMessages.ERR_ERROR_PARSING_ARGS;
+import static com.forgerock.opendj.cli.CliMessages.*;
+import static org.opends.quicksetup.util.Utils.getCommandLineMaxLineWidth;
+import static org.opends.messages.QuickSetupMessages.INFO_NOT_AVAILABLE_LABEL;
+import static org.opends.messages.QuickSetupMessages.
+INFO_ERROR_READING_SERVER_CONFIGURATION;
+
 import java.io.File;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -43,6 +52,8 @@
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
+import org.forgerock.opendj.config.client.ManagementContext;
+import org.forgerock.opendj.config.server.ConfigException;
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
@@ -57,11 +68,6 @@
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.server.admin.AdministrationConnector;
 import org.opends.server.admin.client.cli.SecureConnectionCliArgs;
-import org.forgerock.opendj.config.client.ManagementContext;
-import org.forgerock.opendj.config.server.ConfigException;
-
-import com.forgerock.opendj.cli.ClientException;
-
 import org.opends.server.tools.dsconfig.LDAPManagementContextFactory;
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
@@ -69,20 +75,14 @@
 import org.opends.server.types.OpenDsException;
 import org.opends.server.util.BuildVersion;
 import org.opends.server.util.StaticUtils;
-
-import com.forgerock.opendj.cli.ConsoleApplication;
-
 import org.opends.server.util.cli.LDAPConnectionConsoleInteraction;
 
+import com.forgerock.opendj.cli.ArgumentException;
+import com.forgerock.opendj.cli.ClientException;
+import com.forgerock.opendj.cli.ConsoleApplication;
 import com.forgerock.opendj.cli.TableBuilder;
 import com.forgerock.opendj.cli.TextTablePrinter;
-import com.forgerock.opendj.cli.ArgumentException;
-
-import static org.opends.messages.AdminToolMessages.*;
-import static org.opends.messages.QuickSetupMessages.*;
-import static org.opends.messages.ToolMessages.*;
-import static org.opends.quicksetup.util.Utils.*;
-import static com.forgerock.opendj.cli.ArgumentConstants.LIST_TABLE_SEPARATOR;
+import com.forgerock.opendj.cli.ReturnCode;
 
 /**
  * The class used to provide some CLI interface to display status.
@@ -98,73 +98,19 @@
   private boolean displayMustStartLegend;
 
   /** Prefix for log files. */
-  static public final String LOG_FILE_PREFIX = "opendj-status-";
+  public static final String LOG_FILE_PREFIX = "opendj-status-";
 
   /** Suffix for log files. */
-  static public final String LOG_FILE_SUFFIX = ".log";
+  public static final String LOG_FILE_SUFFIX = ".log";
 
   private ApplicationTrustManager interactiveTrustManager;
 
   private boolean useInteractiveTrustManager;
 
-  // This CLI is always using the administration connector with SSL
+  /** This CLI is always using the administration connector with SSL. */
   private final boolean alwaysSSL = true;
 
-  /**
-   * The enumeration containing the different return codes that the command-line
-   * can have.
-   *
-   */
-  enum ErrorReturnCode
-  {
-    /**
-     * Successful display of the status.
-     */
-    SUCCESSFUL(0),
-    /**
-     * We did no have an error but the status was not displayed (displayed
-     * version or usage).
-     */
-    SUCCESSFUL_NOP(0),
-    /**
-     * Unexpected error (potential bug).
-     */
-    ERROR_UNEXPECTED(1),
-    /**
-     * Cannot parse arguments.
-     */
-    ERROR_PARSING_ARGS(2),
-    /**
-     * User cancelled (for instance not accepting the certificate proposed) or
-     * could not use the provided connection parameters in interactive mode.
-     */
-    USER_CANCELLED_OR_DATA_ERROR(3),
-    /**
-     * This occurs for instance when the authentication provided by the user is
-     * not valid.
-     */
-    ERROR_READING_CONFIGURATION_WITH_LDAP(4);
-
-    private int returnCode;
-    private ErrorReturnCode(int returnCode)
-    {
-      this.returnCode = returnCode;
-    }
-
-    /**
-     * Get the corresponding return code value.
-     *
-     * @return The corresponding return code value.
-     */
-    public int getReturnCode()
-    {
-      return returnCode;
-    }
-  }
-
-  /**
-   * The Logger.
-   */
+  /** The Logger. */
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
   /** The argument parser. */
@@ -263,9 +209,8 @@
     try {
       argParser.initializeGlobalArguments(getOutputStream());
     } catch (ArgumentException ae) {
-      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
-      println(message);
-      return ErrorReturnCode.ERROR_UNEXPECTED.getReturnCode();
+      println(ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage()));
+      return ReturnCode.CLIENT_SIDE_PARAM_ERROR.get();
     }
 
     try
@@ -281,18 +226,17 @@
     try {
       argParser.parseArguments(args);
     } catch (ArgumentException ae) {
-      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
-      println(message);
+      println(ERR_ERROR_PARSING_ARGS.get(ae.getMessage()));
       println();
       println(LocalizableMessage.raw(argParser.getUsage()));
 
-      return ErrorReturnCode.ERROR_PARSING_ARGS.getReturnCode();
+      return ReturnCode.CLIENT_SIDE_PARAM_ERROR.get();
     }
 
     //  If we should just display usage or version information,
     // then print it and exit.
     if (argParser.usageOrVersionDisplayed()) {
-      return ErrorReturnCode.SUCCESSFUL_NOP.getReturnCode();
+      return ReturnCode.SUCCESS.get();
     }
 
     // Checks the version - if upgrade required, the tool is unusable
@@ -307,7 +251,7 @@
     }
     int v = argParser.validateGlobalOptions(getErrorStream());
 
-    if (v != ErrorReturnCode.SUCCESSFUL_NOP.getReturnCode()) {
+    if (v != ReturnCode.SUCCESS.get()) {
       println(LocalizableMessage.raw(argParser.getUsage()));
       return v;
     } else {
@@ -366,11 +310,11 @@
             useInteractiveTrustManager = true;
           } catch (ArgumentException e) {
             println(e.getMessageObject());
-            return ErrorReturnCode.USER_CANCELLED_OR_DATA_ERROR.getReturnCode();
+            return ReturnCode.CLIENT_SIDE_PARAM_ERROR.get();
           } catch (ClientException e) {
             println(e.getMessageObject());
             writeStatus(controlInfo);
-            return ErrorReturnCode.USER_CANCELLED_OR_DATA_ERROR.getReturnCode();
+            return ReturnCode.ERROR_USER_CANCELLED.get();
           } finally {
             StaticUtils.close(ctx);
           }
@@ -397,23 +341,20 @@
             writeStatus(controlInfo);
 
             if (!controlInfo.getServerDescriptor().getExceptions().isEmpty()) {
-              return ErrorReturnCode.ERROR_READING_CONFIGURATION_WITH_LDAP.
-                getReturnCode();
+              return ReturnCode.ERROR_INITIALIZING_SERVER.get();
             }
           } catch (NamingException ne) {
             // This should not happen but this is useful information to
             // diagnose the error.
             println();
             println(INFO_ERROR_READING_SERVER_CONFIGURATION.get(ne));
-            return ErrorReturnCode.ERROR_READING_CONFIGURATION_WITH_LDAP.
-              getReturnCode();
+            return ReturnCode.ERROR_INITIALIZING_SERVER.get();
           } catch (ConfigReadException cre) {
             // This should not happen but this is useful information to
             // diagnose the error.
             println();
             println(cre.getMessageObject());
-            return ErrorReturnCode.ERROR_READING_CONFIGURATION_WITH_LDAP.
-              getReturnCode();
+            return ReturnCode.ERROR_INITIALIZING_SERVER.get();
           } finally {
             StaticUtils.close(ctx);
           }
@@ -427,7 +368,7 @@
       }
     }
 
-    return ErrorReturnCode.SUCCESSFUL.getReturnCode();
+    return ReturnCode.SUCCESS.get();
   }
 
   private void writeStatus(ControlPanelInfo controlInfo)
@@ -964,7 +905,7 @@
           for (int j=0; j<tableModel.getColumnCount(); j++)
           {
             LocalizableMessageBuilder line = new LocalizableMessageBuilder();
-            line.append(tableModel.getColumnName(j)+": ");
+            line.append(tableModel.getColumnName(j)).append(": ");
             if (j == 0)
             {
               // It is the hostName
@@ -1085,7 +1026,7 @@
       LocalizableMessage header = LocalizableMessage.raw(tableModel.getColumnName(i));
       labels[i] = new LocalizableMessageBuilder(header).append(":").toMessage();
       labelWidth = Math.max(labelWidth, labels[i].length());
-      if ((i != 4) && (i != 5))
+      if (i != 4 && i != 5)
       {
         labelWidthWithoutReplicated =
           Math.max(labelWidthWithoutReplicated, labels[i].length());
@@ -1178,7 +1119,7 @@
         boolean isReplicated =
           replicatedLabel.toString().equals(
               String.valueOf(tableModel.getValueAt(i, 3)));
-        if ((j == 4) || (j == 5))
+        if (j == 4 || j == 5)
         {
           // If the suffix is not replicated we do not have to display these
           // lines.
@@ -1219,7 +1160,7 @@
       {
         buf.append(" ");
       }
-      buf.append("--- "+text+" ---");
+      buf.append("--- ").append(text).append(" ---");
       centered = buf.toMessage();
     }
     else
@@ -1245,9 +1186,7 @@
     }
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isAdvancedMode() {
     return false;
@@ -1255,9 +1194,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isInteractive() {
     return argParser.isInteractive();
@@ -1265,9 +1202,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isMenuDrivenMode() {
     return true;
@@ -1275,9 +1210,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isQuiet() {
     return false;
@@ -1285,9 +1218,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isScriptFriendly() {
     return argParser.isScriptFriendly();
@@ -1295,9 +1226,7 @@
 
 
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
   public boolean isVerbose() {
     return true;

--
Gitblit v1.10.0