From b7b340fb143d4d58411d16166cf4e73ee5d0f523 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Wed, 06 May 2015 07:43:47 +0000
Subject: [PATCH] OPENDJ-1993 Code cleanup

---
 opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java |  928 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 506 insertions(+), 422 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
index ed59f9f..b3b66a8 100644
--- a/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
+++ b/opendj-server-legacy/src/main/java/org/opends/quicksetup/util/Utils.java
@@ -79,20 +79,17 @@
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
+  private Utils() {}
+
   private static final int BUFFER_SIZE = 1024;
   private static final int MAX_LINE_WIDTH = 80;
 
-  private Utils()
-  {
-  }
+  /** Chars that require special treatment when passing them to command-line. */
+  private static final char[] CHARS_TO_ESCAPE =
+    { ' ', '\t', '\n', '|', ';', '<', '>', '(', ')', '$', '`', '\\', '"', '\'' };
 
-  /**
-   * The class name that contains the control panel customizations for
-   * products.
-   */
-  private static final String CUSTOMIZATION_CLASS_NAME =
-    "org.opends.server.util.ReleaseDefinition";
-
+  /** The class name that contains the control panel customizations for products. */
+  private static final String CUSTOMIZATION_CLASS_NAME = "org.opends.server.util.ReleaseDefinition";
 
   /** The service name required by the JNLP downloader. */
   public static final String JNLP_SERVICE_NAME = "javax.jnlp.DownloadService";
@@ -100,9 +97,11 @@
   /**
    * Returns <CODE>true</CODE> if the provided port is free and we can use it,
    * <CODE>false</CODE> otherwise.
-   * @param port the port we are analyzing.
+   *
+   * @param port
+   *          the port we are analyzing.
    * @return <CODE>true</CODE> if the provided port is free and we can use it,
-   * <CODE>false</CODE> otherwise.
+   *         <CODE>false</CODE> otherwise.
    */
   public static boolean canUseAsPort(int port)
   {
@@ -112,47 +111,46 @@
   /**
    * Returns <CODE>true</CODE> if the provided port is a privileged port,
    * <CODE>false</CODE> otherwise.
-   * @param port the port we are analyzing.
+   *
+   * @param port
+   *          the port we are analyzing.
    * @return <CODE>true</CODE> if the provided port is a privileged port,
-   * <CODE>false</CODE> otherwise.
+   *         <CODE>false</CODE> otherwise.
    */
   public static boolean isPrivilegedPort(int port)
   {
     return SetupUtils.isPrivilegedPort(port);
   }
 
-
-
   /**
    * Tells whether the provided java installation supports a given option or
    * not.
-   * @param javaHome the java installation path.
-   * @param option the java option that we want to check.
-   * @param installPath the install path of the server.
+   *
+   * @param javaHome
+   *          the java installation path.
+   * @param option
+   *          the java option that we want to check.
+   * @param installPath
+   *          the install path of the server.
    * @return <CODE>true</CODE> if the provided java installation supports a
-   * given option and <CODE>false</CODE> otherwise.
+   *         given option and <CODE>false</CODE> otherwise.
    */
-  public static boolean supportsOption(String option, String javaHome,
-      String installPath)
+  public static boolean supportsOption(String option, String javaHome, String installPath)
   {
     boolean supported = false;
-    logger.info(LocalizableMessage.raw("Checking if options "+option+
-        " are supported with java home: "+javaHome));
+    logger.info(LocalizableMessage.raw("Checking if options " + option + " are supported with java home: " + javaHome));
     try
     {
-      List<String> args = new ArrayList<String>();
+      List<String> args = new ArrayList<>();
       String script;
-      String libPath = Utils.getPath(installPath,
-          Installation.LIBRARIES_PATH_RELATIVE);
+      String libPath = Utils.getPath(installPath, Installation.LIBRARIES_PATH_RELATIVE);
       if (isWindows())
       {
-        script = Utils.getScriptPath(Utils.getPath(libPath,
-            Installation.SCRIPT_UTIL_FILE_WINDOWS));
+        script = Utils.getScriptPath(Utils.getPath(libPath, Installation.SCRIPT_UTIL_FILE_WINDOWS));
       }
       else
       {
-        script = Utils.getScriptPath(Utils.getPath(libPath,
-            Installation.SCRIPT_UTIL_FILE_UNIX));
+        script = Utils.getScriptPath(Utils.getPath(libPath, Installation.SCRIPT_UTIL_FILE_UNIX));
       }
       args.add(script);
       ProcessBuilder pb = new ProcessBuilder(args);
@@ -168,13 +166,14 @@
         env.put("DO_NOT_PAUSE", "true");
       }
       final Process process = pb.start();
-      logger.info(LocalizableMessage.raw("launching "+args+ " with env: "+env));
+      logger.info(LocalizableMessage.raw("launching " + args + " with env: " + env));
       InputStream is = process.getInputStream();
       BufferedReader reader = new BufferedReader(new InputStreamReader(is));
       String line;
       boolean errorDetected = false;
-      while (null != (line = reader.readLine())) {
-        logger.info(LocalizableMessage.raw("The output: "+line));
+      while (null != (line = reader.readLine()))
+      {
+        logger.info(LocalizableMessage.raw("The output: " + line));
         if (line.contains("ERROR:  The detected Java version"))
         {
           if (isWindows())
@@ -207,29 +206,35 @@
       }
       process.waitFor();
       int returnCode = process.exitValue();
-      logger.info(LocalizableMessage.raw("returnCode: "+returnCode));
+      logger.info(LocalizableMessage.raw("returnCode: " + returnCode));
       supported = returnCode == 0 && !errorDetected;
-      logger.info(LocalizableMessage.raw("supported: "+supported));
+      logger.info(LocalizableMessage.raw("supported: " + supported));
     }
     catch (Throwable t)
     {
-      logger.warn(LocalizableMessage.raw("Error testing option "+option+" on "+javaHome, t));
+      logger.warn(LocalizableMessage.raw("Error testing option " + option + " on " + javaHome, t));
     }
     return supported;
   }
 
   /**
-   * Creates a new file attempting to create the parent directories
-   * if necessary.
-   * @param f File to create
+   * Creates a new file attempting to create the parent directories if
+   * necessary.
+   *
+   * @param f
+   *          File to create
    * @return boolean indicating whether the file was created; false otherwise
-   * @throws IOException if something goes wrong
+   * @throws IOException
+   *           if something goes wrong
    */
-  public static boolean createFile(File f) throws IOException {
+  public static boolean createFile(File f) throws IOException
+  {
     boolean success = false;
-    if (f != null) {
+    if (f != null)
+    {
       File parent = f.getParentFile();
-      if (!parent.exists()) {
+      if (!parent.exists())
+      {
         parent.mkdirs();
       }
       success = f.createNewFile();
@@ -239,8 +244,11 @@
 
   /**
    * Returns the absolute path for the given parentPath and relativePath.
-   * @param parentPath the parent path.
-   * @param relativePath the relative path.
+   *
+   * @param parentPath
+   *          the parent path.
+   * @param relativePath
+   *          the relative path.
    * @return the absolute path for the given parentPath and relativePath.
    */
   public static String getPath(String parentPath, String relativePath)
@@ -250,9 +258,11 @@
 
   /**
    * Returns the String that can be used to launch an script using Runtime.exec.
-   * This method is required because in Windows the script that contain a "="
-   * in their path must be quoted.
-   * @param script the script name
+   * This method is required because in Windows the script that contain a "=" in
+   * their path must be quoted.
+   *
+   * @param script
+   *          the script name
    * @return the absolute path for the given parentPath and relativePath.
    */
   public static String getScriptPath(String script)
@@ -261,15 +271,18 @@
   }
 
   /**
-   * Returns the absolute path for the given file.  It tries to get the
-   * canonical file path.  If it fails it returns the string representation.
-   * @param f File to get the path
+   * Returns the absolute path for the given file. It tries to get the canonical
+   * file path. If it fails it returns the string representation.
+   *
+   * @param f
+   *          File to get the path
    * @return the absolute path for the given file.
    */
   public static String getPath(File f)
   {
     String path = null;
-    if (f != null) {
+    if (f != null)
+    {
       try
       {
         /*
@@ -280,7 +293,8 @@
       }
       catch (IOException ioe)
       {
-        /* This is a best effort to get the best possible representation of the
+        /*
+         * This is a best effort to get the best possible representation of the
          * file: reporting the error is not necessary.
          */
       }
@@ -292,19 +306,26 @@
   /**
    * Returns <CODE>true</CODE> if the first provided path is under the second
    * path in the file system.
-   * @param descendant the descendant candidate path.
-   * @param path the path.
+   *
+   * @param descendant
+   *          the descendant candidate path.
+   * @param path
+   *          the path.
    * @return <CODE>true</CODE> if the first provided path is under the second
-   * path in the file system; <code>false</code> otherwise or if
-   * either of the files are null
+   *         path in the file system; <code>false</code> otherwise or if either
+   *         of the files are null
    */
-  public static boolean isDescendant(File descendant, File path) {
+  public static boolean isDescendant(File descendant, File path)
+  {
     boolean isDescendant = false;
-    if (descendant != null && path != null) {
+    if (descendant != null && path != null)
+    {
       File parent = descendant.getParentFile();
-      while (parent != null && !isDescendant) {
+      while (parent != null && !isDescendant)
+      {
         isDescendant = path.equals(parent);
-        if (!isDescendant) {
+        if (!isDescendant)
+        {
           parent = parent.getParentFile();
         }
       }
@@ -315,9 +336,11 @@
   /**
    * Returns <CODE>true</CODE> if the parent directory for the provided path
    * exists and <CODE>false</CODE> otherwise.
-   * @param path the path that we are analyzing.
+   *
+   * @param path
+   *          the path that we are analyzing.
    * @return <CODE>true</CODE> if the parent directory for the provided path
-   * exists and <CODE>false</CODE> otherwise.
+   *         exists and <CODE>false</CODE> otherwise.
    */
   public static boolean parentDirectoryExists(String path)
   {
@@ -334,9 +357,11 @@
   /**
    * Returns <CODE>true</CODE> if the the provided path is a file and exists and
    * <CODE>false</CODE> otherwise.
-   * @param path the path that we are analyzing.
+   *
+   * @param path
+   *          the path that we are analyzing.
    * @return <CODE>true</CODE> if the the provided path is a file and exists and
-   * <CODE>false</CODE> otherwise.
+   *         <CODE>false</CODE> otherwise.
    */
   public static boolean fileExists(String path)
   {
@@ -347,9 +372,11 @@
   /**
    * Returns <CODE>true</CODE> if the the provided path is a directory, exists
    * and is not empty <CODE>false</CODE> otherwise.
-   * @param path the path that we are analyzing.
+   *
+   * @param path
+   *          the path that we are analyzing.
    * @return <CODE>true</CODE> if the the provided path is a directory, exists
-   * and is not empty <CODE>false</CODE> otherwise.
+   *         and is not empty <CODE>false</CODE> otherwise.
    */
   public static boolean directoryExistsAndIsNotEmpty(String path)
   {
@@ -365,15 +392,16 @@
   /**
    * Returns <CODE>true</CODE> if the the provided string is a configuration DN
    * and <CODE>false</CODE> otherwise.
-   * @param dn the String we are analyzing.
+   *
+   * @param dn
+   *          the String we are analyzing.
    * @return <CODE>true</CODE> if the the provided string is a configuration DN
-   * and <CODE>false</CODE> otherwise.
+   *         and <CODE>false</CODE> otherwise.
    */
   public static boolean isConfigurationDn(String dn)
   {
     boolean isConfigurationDn = false;
-    String[] configDns =
-      { "cn=config", Constants.SCHEMA_DN };
+    String[] configDns = { "cn=config", Constants.SCHEMA_DN };
     for (int i = 0; i < configDns.length && !isConfigurationDn; i++)
     {
       isConfigurationDn = areDnsEqual(dn, configDns[i]);
@@ -382,12 +410,15 @@
   }
 
   /**
-   * Returns <CODE>true</CODE> if the the provided strings represent the same
-   * DN and <CODE>false</CODE> otherwise.
-   * @param dn1 the first dn to compare.
-   * @param dn2 the second dn to compare.
-   * @return <CODE>true</CODE> if the the provided strings represent the same
-   * DN and <CODE>false</CODE> otherwise.
+   * Returns <CODE>true</CODE> if the the provided strings represent the same DN
+   * and <CODE>false</CODE> otherwise.
+   *
+   * @param dn1
+   *          the first dn to compare.
+   * @param dn2
+   *          the second dn to compare.
+   * @return <CODE>true</CODE> if the the provided strings represent the same DN
+   *         and <CODE>false</CODE> otherwise.
    */
   public static boolean areDnsEqual(String dn1, String dn2)
   {
@@ -397,7 +428,9 @@
       LdapName name1 = new LdapName(dn1);
       LdapName name2 = new LdapName(dn2);
       areDnsEqual = name1.equals(name2);
-    } catch (Exception ex) {
+    }
+    catch (Exception ex)
+    {
       // do nothing
     }
 
@@ -406,14 +439,18 @@
 
   /**
    * Creates the parent directory if it does not already exist.
-   * @param f File for which parentage will be insured
-   * @return boolean indicating whether or not the input <code>f</code>
-   * has a parent after this method is invoked.
+   *
+   * @param f
+   *          File for which parentage will be insured
+   * @return boolean indicating whether or not the input <code>f</code> has a
+   *         parent after this method is invoked.
    */
-  public static boolean insureParentsExist(File f) {
+  public static boolean insureParentsExist(File f)
+  {
     final File parent = f.getParentFile();
     final boolean b = parent.exists();
-    if (!b) {
+    if (!b)
+    {
       return parent.mkdirs();
     }
     return b;
@@ -421,21 +458,28 @@
 
   /**
    * Creates the a directory in the provided path.
-   * @param path the path.
+   *
+   * @param path
+   *          the path.
    * @return <CODE>true</CODE> if the path was created or already existed (and
-   * was a directory) and <CODE>false</CODE> otherwise.
-   * @throws IOException if something goes wrong.
+   *         was a directory) and <CODE>false</CODE> otherwise.
+   * @throws IOException
+   *           if something goes wrong.
    */
-  public static boolean createDirectory(String path) throws IOException {
+  public static boolean createDirectory(String path) throws IOException
+  {
     return createDirectory(new File(path));
   }
 
   /**
    * Creates the a directory in the provided path.
-   * @param f the path.
+   *
+   * @param f
+   *          the path.
    * @return <CODE>true</CODE> if the path was created or already existed (and
-   * was a directory) and <CODE>false</CODE> otherwise.
-   * @throws IOException if something goes wrong.
+   *         was a directory) and <CODE>false</CODE> otherwise.
+   * @throws IOException
+   *           if something goes wrong.
    */
   public static boolean createDirectory(File f) throws IOException
   {
@@ -443,7 +487,8 @@
     if (!f.exists())
     {
       directoryCreated = f.mkdirs();
-    } else
+    }
+    else
     {
       directoryCreated = f.isDirectory();
     }
@@ -453,9 +498,13 @@
   /**
    * Creates a file on the specified path with the contents of the provided
    * stream.
-   * @param path the path where the file will be created.
-   * @param is the InputStream with the contents of the file.
-   * @throws IOException if something goes wrong.
+   *
+   * @param path
+   *          the path where the file will be created.
+   * @param is
+   *          the InputStream with the contents of the file.
+   * @throws IOException
+   *           if something goes wrong.
    */
   public static void createFile(File path, InputStream is) throws IOException
   {
@@ -478,15 +527,18 @@
 
   /**
    * Creates a file on the specified path with the contents of the provided
-   * String.  The file is protected, so that 'others' have no access to it.
-   * @param path the path where the file will be created.
-   * @param content the String with the contents of the file.
-   * @throws IOException if something goes wrong.
-   * @throws InterruptedException if there is a problem changing the permissions
-   * of the file.
+   * String. The file is protected, so that 'others' have no access to it.
+   *
+   * @param path
+   *          the path where the file will be created.
+   * @param content
+   *          the String with the contents of the file.
+   * @throws IOException
+   *           if something goes wrong.
+   * @throws InterruptedException
+   *           if there is a problem changing the permissions of the file.
    */
-  public static void createProtectedFile(String path, String content)
-  throws IOException, InterruptedException
+  public static void createProtectedFile(String path, String content) throws IOException, InterruptedException
   {
     FileWriter file = new FileWriter(path);
     PrintWriter out = new PrintWriter(file);
@@ -503,22 +555,24 @@
   }
 
   /**
-   * This is a helper method that gets a LocalizableMessage representation of the elements
-   * in the Collection of Messages. The LocalizableMessage will display the different
-   * elements separated by the separator String.
+   * This is a helper method that gets a LocalizableMessage representation of
+   * the elements in the Collection of Messages. The LocalizableMessage will
+   * display the different elements separated by the separator String.
    *
    * @param col
    *          the collection containing the messages.
    * @param separator
    *          the separator String to be used.
-   * @return the message representation for the collection;
-   *          null if <code>col</code> is null
+   * @return the message representation for the collection; null if
+   *         <code>col</code> is null
    */
-  public static LocalizableMessage getMessageFromCollection(Collection<LocalizableMessage> col,
-                                                 String separator) {
-    if (col != null) {
+  public static LocalizableMessage getMessageFromCollection(Collection<LocalizableMessage> col, String separator)
+  {
+    if (col != null)
+    {
       final LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
-      for (LocalizableMessage m : col) {
+      for (LocalizableMessage m : col)
+      {
         mb.append(separator).append(m);
       }
       return mb.toMessage();
@@ -527,20 +581,19 @@
   }
 
   /**
-   * Returns the default server location that will be proposed to the user
-   * in the installation.
-   * @return the default server location that will be proposed to the user
-   * in the installation.
+   * Returns the default server location that will be proposed to the user in
+   * the installation.
+   *
+   * @return the default server location that will be proposed to the user in
+   *         the installation.
    */
   public static String getDefaultServerLocation()
   {
     String userDir = System.getProperty("user.home");
-    String firstLocation = userDir + File.separator
-        + SHORT_NAME.toLowerCase(Locale.ENGLISH);
+    String firstLocation = userDir + File.separator + SHORT_NAME.toLowerCase(Locale.ENGLISH);
     String serverLocation = firstLocation;
     int i = 1;
-    while (fileExists(serverLocation)
-        || directoryExistsAndIsNotEmpty(serverLocation))
+    while (fileExists(serverLocation) || directoryExistsAndIsNotEmpty(serverLocation))
     {
       serverLocation = firstLocation + "-" + i;
       i++;
@@ -551,13 +604,15 @@
   /**
    * Returns <CODE>true</CODE> if there is more disk space in the provided path
    * than what is specified with the bytes parameter.
-   * @param directoryPath the path.
-   * @param bytes the disk space.
+   *
+   * @param directoryPath
+   *          the path.
+   * @param bytes
+   *          the disk space.
    * @return <CODE>true</CODE> if there is more disk space in the provided path
-   * than what is specified with the bytes parameter.
+   *         than what is specified with the bytes parameter.
    */
-  public static synchronized boolean hasEnoughSpace(String directoryPath,
-      long bytes)
+  public static synchronized boolean hasEnoughSpace(String directoryPath, long bytes)
   {
     // TODO This does not work with quotas etc. but at least it seems that
     // we do not write all data on disk if it fails.
@@ -570,15 +625,18 @@
     {
       deleteDirectory = directory.mkdir();
     }
+
     try
     {
       file = File.createTempFile("temp" + System.nanoTime(), ".tmp", directory);
       raf = new RandomAccessFile(file, "rw");
       raf.setLength(bytes);
       hasEnoughSpace = true;
-    } catch (IOException ex)
+    }
+    catch (IOException ex)
     { /* do nothing */
-    } finally
+    }
+    finally
     {
       StaticUtils.close(raf);
       if (file != null)
@@ -586,16 +644,20 @@
         file.delete();
       }
     }
+
     if (deleteDirectory)
     {
       directory.delete();
     }
+
     return hasEnoughSpace;
   }
 
   /**
    * Gets a localized representation of the provide TopologyCacheException.
-   * @param te the exception.
+   *
+   * @param te
+   *          the exception.
    * @return a localized representation of the provide TopologyCacheException.
    */
   public static LocalizableMessage getMessage(TopologyCacheException te)
@@ -615,12 +677,11 @@
     }
     else if (te.getCause() instanceof NamingException)
     {
-      buf.append(getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(),
-          te.getCause()));
+      buf.append(getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(), te.getCause()));
     }
     else
     {
-      logger.warn(LocalizableMessage.raw("Unexpected error: "+te, te));
+      logger.warn(LocalizableMessage.raw("Unexpected error: " + te, te));
       // This is unexpected.
       if (te.getCause() != null)
       {
@@ -637,15 +698,20 @@
   /**
    * Sets the permissions of the provided paths with the provided permission
    * String.
-   * @param paths the paths to set permissions on.
-   * @param permissions the UNIX-mode file system permission representation
-   * (for example "644" or "755")
+   *
+   * @param paths
+   *          the paths to set permissions on.
+   * @param permissions
+   *          the UNIX-mode file system permission representation (for example
+   *          "644" or "755")
    * @return the return code of the chmod command.
-   * @throws IOException if something goes wrong.
-   * @throws InterruptedException if the Runtime.exec method is interrupted.
+   * @throws IOException
+   *           if something goes wrong.
+   * @throws InterruptedException
+   *           if the Runtime.exec method is interrupted.
    */
-  public static int setPermissionsUnix(ArrayList<String> paths,
-      String permissions) throws IOException, InterruptedException
+  public static int setPermissionsUnix(ArrayList<String> paths, String permissions) throws IOException,
+      InterruptedException
   {
     String[] args = new String[paths.size() + 2];
     args[0] = "chmod";
@@ -661,15 +727,19 @@
   /**
    * Sets the permissions of the provided paths with the provided permission
    * String.
-   * @param path to set permissions on.
-   * @param permissions the UNIX-mode file system permission representation
-   * (for example "644" or "755")
+   *
+   * @param path
+   *          to set permissions on.
+   * @param permissions
+   *          the UNIX-mode file system permission representation (for example
+   *          "644" or "755")
    * @return the return code of the chmod command.
-   * @throws IOException if something goes wrong.
-   * @throws InterruptedException if the Runtime.exec method is interrupted.
+   * @throws IOException
+   *           if something goes wrong.
+   * @throws InterruptedException
+   *           if the Runtime.exec method is interrupted.
    */
-  public static int setPermissionsUnix(String path,
-      String permissions) throws IOException, InterruptedException
+  public static int setPermissionsUnix(String path, String permissions) throws IOException, InterruptedException
   {
     String[] args = new String[3];
     args[0] = "chmod";
@@ -693,8 +763,9 @@
   /**
    * Returns <CODE>true</CODE> if this is executed from command line and
    * <CODE>false</CODE> otherwise.
+   *
    * @return <CODE>true</CODE> if this is executed from command line and
-   * <CODE>false</CODE> otherwise.
+   *         <CODE>false</CODE> otherwise.
    */
   public static boolean isCli()
   {
@@ -703,30 +774,30 @@
 
   /**
    * Creates an LDAP+StartTLS connection and returns the corresponding
-   * LdapContext.
-   * This method first creates an LdapContext with anonymous bind. Then it
-   * requests a StartTlsRequest extended operation. The StartTlsResponse is
-   * setup with the specified hostname verifier. Negotiation is done using a
+   * LdapContext. This method first creates an LdapContext with anonymous bind.
+   * Then it requests a StartTlsRequest extended operation. The StartTlsResponse
+   * is setup with the specified hostname verifier. Negotiation is done using a
    * TrustSocketFactory so that the specified TrustManager gets called during
-   * the SSL handshake.
-   * If trust manager is null, certificates are not checked during SSL
-   * handshake.
+   * the SSL handshake. If trust manager is null, certificates are not checked
+   * during SSL handshake.
    *
-   * @param ldapsURL      the target *LDAPS* URL.
-   * @param dn            passed as Context.SECURITY_PRINCIPAL if not null.
-   * @param pwd           passed as Context.SECURITY_CREDENTIALS if not null.
-   * @param timeout       passed as com.sun.jndi.ldap.connect.timeout if > 0.
-   * @param env           null or additional environment properties.
-   * @param trustManager  null or the trust manager to be invoked during SSL.
-   * negociation.
-   * @param verifier      null or the hostname verifier to be setup in the
-   * StartTlsResponse.
-   *
+   * @param ldapsURL
+   *          the target *LDAPS* URL.
+   * @param dn
+   *          passed as Context.SECURITY_PRINCIPAL if not null.
+   * @param pwd
+   *          passed as Context.SECURITY_CREDENTIALS if not null.
+   * @param timeout
+   *          passed as com.sun.jndi.ldap.connect.timeout if > 0.
+   * @param env
+   *          null or additional environment properties.
+   * @param trustManager
+   *          null or the trust manager to be invoked during SSL. negociation.
+   * @param verifier
+   *          null or the hostname verifier to be setup in the StartTlsResponse.
    * @return the established connection with the given parameters.
-   *
-   * @throws NamingException the exception thrown when instantiating
-   * InitialLdapContext.
-   *
+   * @throws NamingException
+   *           the exception thrown when instantiating InitialLdapContext.
    * @see javax.naming.Context
    * @see javax.naming.ldap.InitialLdapContext
    * @see javax.naming.ldap.StartTlsRequest
@@ -734,55 +805,53 @@
    * @see org.opends.admin.ads.util.TrustedSocketFactory
    */
 
-  public static InitialLdapContext createStartTLSContext(String ldapsURL,
-      String dn, String pwd, int timeout, Hashtable<String, String> env,
-      TrustManager trustManager, HostnameVerifier verifier)
-  throws NamingException
+  public static InitialLdapContext createStartTLSContext(String ldapsURL, String dn, String pwd, int timeout,
+      Hashtable<String, String> env, TrustManager trustManager, HostnameVerifier verifier) throws NamingException
   {
-    return ConnectionUtils.createStartTLSContext(ldapsURL, dn, pwd, timeout,
-        env, trustManager, null, verifier);
+    return ConnectionUtils.createStartTLSContext(ldapsURL, dn, pwd, timeout, env, trustManager, null, verifier);
   }
 
   /**
-   * Returns a message object for the given NamingException.  The code assume
+   * Returns a message object for the given NamingException. The code assume
    * that we are trying to connect to the local server.
-   * @param ne the NamingException.
+   *
+   * @param ne
+   *          the NamingException.
    * @return a message object for the given NamingException.
    */
   public static LocalizableMessage getMessageForException(NamingException ne)
   {
-    LocalizableMessage msg;
+    final String detailedException = ne.toString(true);
     if (isCertificateException(ne))
     {
-      msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE.get(ne.toString(true));
+      return INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE.get(detailedException);
     }
     else if (ne instanceof AuthenticationException)
     {
-      msg = ERR_CANNOT_CONNECT_TO_LOCAL_AUTHENTICATION.get(ne.toString(true));
+      return ERR_CANNOT_CONNECT_TO_LOCAL_AUTHENTICATION.get(detailedException);
     }
     else if (ne instanceof NoPermissionException)
     {
-      msg = ERR_CANNOT_CONNECT_TO_LOCAL_PERMISSIONS.get(ne.toString(true));
+      return ERR_CANNOT_CONNECT_TO_LOCAL_PERMISSIONS.get(detailedException);
     }
     else if (ne instanceof NamingSecurityException)
     {
-      msg = ERR_CANNOT_CONNECT_TO_LOCAL_PERMISSIONS.get(ne.toString(true));
+      return ERR_CANNOT_CONNECT_TO_LOCAL_PERMISSIONS.get(detailedException);
     }
     else if (ne instanceof CommunicationException)
     {
-      msg = ERR_CANNOT_CONNECT_TO_LOCAL_COMMUNICATION.get(ne.toString(true));
+      return ERR_CANNOT_CONNECT_TO_LOCAL_COMMUNICATION.get(detailedException);
     }
     else
     {
-       msg = ERR_CANNOT_CONNECT_TO_LOCAL_GENERIC.get(ne.toString(true));
+      return ERR_CANNOT_CONNECT_TO_LOCAL_GENERIC.get(detailedException);
     }
-    return msg;
   }
 
-
   /**
-   * Returns the path of the installation of the directory server.  Note that
+   * Returns the path of the installation of the directory server. Note that
    * this method assumes that this code is being run locally.
+   *
    * @return the path of the installation of the directory server.
    */
   public static String getInstallPathFromClasspath()
@@ -797,7 +866,8 @@
     String sep = System.getProperty("path.separator");
     String[] classPaths = System.getProperty("java.class.path").split(sep);
     String path = getInstallPath(classPaths);
-    if (path != null) {
+    if (path != null)
+    {
       File f = new File(path).getAbsoluteFile();
       File librariesDir = f.getParentFile();
 
@@ -833,26 +903,28 @@
   }
 
   /**
-   * Returns the path of the installation of the directory server.  Note that
+   * Returns the path of the installation of the directory server. Note that
    * this method assumes that this code is being run locally.
-   * @param installPath The installation path
+   *
+   * @param installPath
+   *          The installation path
    * @return the path of the installation of the directory server.
    */
   public static String getInstancePathFromInstallPath(String installPath)
   {
     String instancePathFileName = Installation.INSTANCE_LOCATION_PATH;
-    File _svcScriptPathName = new File(installPath + File.separator +
-      Installation.LIBRARIES_PATH_RELATIVE + File.separator +
-      "_svc-opendj.sh");
+    File _svcScriptPathName = new File(
+        installPath + File.separator + Installation.LIBRARIES_PATH_RELATIVE + File.separator + "_svc-opendj.sh");
 
     // look for /etc/opt/opendj/instance.loc
     File f = new File(instancePathFileName);
-    if (!_svcScriptPathName.exists() || !f.exists()) {
+    if (!_svcScriptPathName.exists() || !f.exists())
+    {
       // look for <installPath>/instance.loc
-      instancePathFileName = installPath + File.separator +
-              Installation.INSTANCE_LOCATION_PATH_RELATIVE;
+      instancePathFileName = installPath + File.separator + Installation.INSTANCE_LOCATION_PATH_RELATIVE;
       f = new File(instancePathFileName);
-      if (!f.exists()) {
+      if (!f.exists())
+      {
         return installPath;
       }
     }
@@ -867,21 +939,19 @@
       return installPath;
     }
 
-
     // Read the first line and close the file.
     String line;
     try
     {
       line = reader.readLine();
-      File instanceLoc =  new File (line.trim());
+      File instanceLoc = new File(line.trim());
       if (instanceLoc.isAbsolute())
       {
         return instanceLoc.getAbsolutePath();
       }
       else
       {
-        return new File(installPath + File.separator + instanceLoc.getPath())
-            .getAbsolutePath();
+        return new File(installPath + File.separator + instanceLoc.getPath()).getAbsolutePath();
       }
     }
     catch (Exception e)
@@ -895,11 +965,11 @@
   }
 
   /**
-
    * Returns the max size in character of a line to be displayed in the command
    * line.
+   *
    * @return the max size in character of a line to be displayed in the command
-   * line.
+   *         line.
    */
   public static int getCommandLineMaxLineWidth()
   {
@@ -908,21 +978,22 @@
 
   /**
    * Puts Swing menus in the Mac OS menu bar, if using the Aqua look and feel,
-   * and sets the application name that is displayed in the application menu
-   * and in the dock.
+   * and sets the application name that is displayed in the application menu and
+   * in the dock.
+   *
    * @param appName
    *          application name to display in the menu bar and the dock.
    */
   public static void setMacOSXMenuBar(LocalizableMessage appName)
   {
     System.setProperty("apple.laf.useScreenMenuBar", "true");
-    System.setProperty("com.apple.mrj.application.apple.menu.about.name",
-                       String.valueOf(appName));
+    System.setProperty("com.apple.mrj.application.apple.menu.about.name", String.valueOf(appName));
   }
 
   /**
-   * Returns the number of entries contained in the zip file.  This is used to
+   * Returns the number of entries contained in the zip file. This is used to
    * update properly the progress bar ratio.
+   *
    * @return the number of entries contained in the zip file.
    */
   public static int getNumberZipEntries()
@@ -932,28 +1003,37 @@
   }
 
   /**
-   * Creates a string consisting of the string representation of the
-   * elements in the <code>list</code> separated by <code>separator</code>.
-   * @param list the list to print
-   * @param separator to use in separating elements
-   * @param prefix prepended to each individual element in the list before
-   *        adding to the returned string.
-   * @param suffix appended to each individual element in the list before
-   *        adding to the returned string.
+   * Creates a string consisting of the string representation of the elements in
+   * the <code>list</code> separated by <code>separator</code>.
+   *
+   * @param list
+   *          the list to print
+   * @param separator
+   *          to use in separating elements
+   * @param prefix
+   *          prepended to each individual element in the list before adding to
+   *          the returned string.
+   * @param suffix
+   *          appended to each individual element in the list before adding to
+   *          the returned string.
    * @return String representing the list
    */
-  public static String listToString(List<?> list, String separator,
-                                    String prefix, String suffix) {
+  public static String listToString(List<?> list, String separator, String prefix, String suffix)
+  {
     StringBuilder sb = new StringBuilder();
-    for (int i = 0; i < list.size(); i++) {
-      if (prefix != null) {
+    for (int i = 0; i < list.size(); i++)
+    {
+      if (prefix != null)
+      {
         sb.append(prefix);
       }
       sb.append(list.get(i));
-      if (suffix != null) {
+      if (suffix != null)
+      {
         sb.append(suffix);
       }
-      if (i < list.size() - 1) {
+      if (i < list.size() - 1)
+      {
         sb.append(separator);
       }
     }
@@ -962,69 +1042,69 @@
 
   /**
    * Returns the file system permissions for a file.
-   * @param file the file for which we want the file permissions.
+   *
+   * @param file
+   *          the file for which we want the file permissions.
    * @return the file system permissions for the file.
    */
   public static String getFileSystemPermissions(File file)
   {
     String name = file.getName();
-    if (file.getParent().endsWith(
-        File.separator + Installation.WINDOWS_BINARIES_PATH_RELATIVE) ||
-        file.getParent().endsWith(
-        File.separator + Installation.UNIX_BINARIES_PATH_RELATIVE)) {
-      if (name.endsWith(".bat")) {
-        return "644";
-      }
-      else {
-        return "755";
-      }
-    } else if (name.endsWith(".sh")) {
+    if (file.getParent().endsWith(File.separator + Installation.WINDOWS_BINARIES_PATH_RELATIVE)
+        || file.getParent().endsWith(File.separator + Installation.UNIX_BINARIES_PATH_RELATIVE))
+    {
+      return name.endsWith(".bat") ? "644" : "755";
+    }
+    else if (name.endsWith(".sh")
+          || name.endsWith(Installation.UNIX_SETUP_FILE_NAME)
+          || name.endsWith(Installation.UNIX_UNINSTALL_FILE_NAME)
+          || name.endsWith(Installation.UNIX_UPGRADE_FILE_NAME)
+          || name.endsWith(Installation.MAC_JAVA_APP_STUB_NAME))
+    {
       return "755";
-    } else if (name.endsWith(Installation.UNIX_SETUP_FILE_NAME) ||
-            name.endsWith(Installation.UNIX_UNINSTALL_FILE_NAME) ||
-            name.endsWith(Installation.UNIX_UPGRADE_FILE_NAME)) {
-      return "755";
-    } else if (name.endsWith(Installation.MAC_JAVA_APP_STUB_NAME)) {
-      return "755";
-    } else {
+    }
+    else
+    {
       return "644";
     }
   }
 
   /**
-   * Inserts HTML break tags into <code>d</code> breaking it up
-   * so that ideally no line is longer than <code>maxll</code>
-   * assuming no single word is longer then <code>maxll</code>.
-   * If the string already contains HTML tags that cause a line
-   * break (e.g break and closing list item tags) they are
-   * respected by this method when calculating where to place
-   * new breaks to control the maximum line length.
+   * Inserts HTML break tags into <code>d</code> breaking it up so that ideally
+   * no line is longer than <code>maxll</code> assuming no single word is longer
+   * then <code>maxll</code>. If the string already contains HTML tags that
+   * cause a line break (e.g break and closing list item tags) they are
+   * respected by this method when calculating where to place new breaks to
+   * control the maximum line length.
    *
-   * @param cs String to break
-   * @param maxll int maximum line length
-   * @return String representing <code>d</code> with HTML break
-   *         tags inserted
+   * @param cs
+   *          String to break
+   * @param maxll
+   *          int maximum line length
+   * @return String representing <code>d</code> with HTML break tags inserted
    */
-  public static String breakHtmlString(CharSequence cs, int maxll) {
-    if (cs != null) {
+  public static String breakHtmlString(CharSequence cs, int maxll)
+  {
+    if (cs != null)
+    {
       String d = cs.toString();
       int len = d.length();
       if (len <= 0)
       {
         return d;
       }
-      if (len > maxll) {
+      if (len > maxll)
+      {
 
         // First see if there are any tags that would cause a
         // natural break in the line.  If so start line break
         // point evaluation from that point.
-        for (String tag : Constants.BREAKING_TAGS) {
+        for (String tag : Constants.BREAKING_TAGS)
+        {
           int p = d.lastIndexOf(tag, maxll);
-          if (p > 0 && p < len) {
-            return d.substring(0, p + tag.length()) +
-                   breakHtmlString(
-                           d.substring(p + tag.length()),
-                           maxll);
+          if (p > 0 && p < len)
+          {
+            return d.substring(0, p + tag.length()) + breakHtmlString(d.substring(p + tag.length()), maxll);
           }
         }
 
@@ -1034,57 +1114,73 @@
         // use the first space encountered after the max line
         // length.
         int p = d.lastIndexOf(' ', maxll);
-        if (p <= 0) {
+        if (p <= 0)
+        {
           p = d.indexOf(' ', maxll);
         }
-        if (p > 0 && p < len) {
-          return d.substring(0, p) +
-                  Constants.HTML_LINE_BREAK +
-                 breakHtmlString(d.substring(p + 1), maxll);
-        } else {
+        if (p > 0 && p < len)
+        {
+          return d.substring(0, p) + Constants.HTML_LINE_BREAK + breakHtmlString(d.substring(p + 1), maxll);
+        }
+        else
+        {
           return d;
         }
-      } else {
+      }
+      else
+      {
         return d;
       }
-    } else {
+    }
+    else
+    {
       return null;
     }
   }
 
   /**
    * Converts existing HTML break tags to native line separators.
-   * @param s string to convert
+   *
+   * @param s
+   *          string to convert
    * @return converted string
    */
-  public static String convertHtmlBreakToLineSeparator(String s) {
+  public static String convertHtmlBreakToLineSeparator(String s)
+  {
     return s.replaceAll("<br>", Constants.LINE_SEPARATOR);
   }
 
   /**
    * Strips any potential HTML markup from a given string.
-   * @param s string to strip
+   *
+   * @param s
+   *          string to strip
    * @return resulting string
    */
-  public static String stripHtml(String s) {
-    if (s != null) {
+  public static String stripHtml(String s)
+  {
+    if (s != null)
+    {
 
       // This is not a comprehensive solution but addresses the few tags
       // that we have in Resources.properties at the moment.
       // Note that the following might strip out more than is intended for non-tags
       // like '<your name here>' or for funky tags like '<tag attr="1 > 0">'.
       // See test class for cases that might cause problems.
-      return s.replaceAll("<.*?>","");
+      return s.replaceAll("<.*?>", "");
     }
     return null;
   }
 
   /**
    * Tests a text string to see if it contains HTML.
-   * @param text String to test
+   *
+   * @param text
+   *          String to test
    * @return true if the string contains HTML
    */
-  public static boolean containsHtml(String text) {
+  public static boolean containsHtml(String text)
+  {
     return text != null && text.indexOf('<') != -1 && text.indexOf('>') != -1;
   }
 
@@ -1092,6 +1188,7 @@
 
   /**
    * Returns a printstream that does not write anything to standard output.
+   *
    * @return a printstream that does not write anything to standard output.
    */
   public static EmptyPrintStream getEmptyPrintStream()
@@ -1105,7 +1202,9 @@
 
   /**
    * Returns the current time of a server in milliseconds.
-   * @param ctx the connection to the server.
+   *
+   * @param ctx
+   *          the connection to the server.
    * @return the current time of a server in milliseconds.
    */
   public static long getServerClock(InitialLdapContext ctx)
@@ -1113,10 +1212,7 @@
     long time = -1;
     SearchControls ctls = new SearchControls();
     ctls.setSearchScope(SearchControls.OBJECT_SCOPE);
-    ctls.setReturningAttributes(
-        new String[] {
-            "currentTime"
-        });
+    ctls.setReturningAttributes(new String[] { "currentTime" });
     String filter = "(objectclass=*)";
 
     try
@@ -1128,14 +1224,13 @@
       {
         while (listeners.hasMore())
         {
-          SearchResult sr = (SearchResult)listeners.next();
+          SearchResult sr = (SearchResult) listeners.next();
 
           String v = getFirstValue(sr, "currentTime");
 
           TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
 
-          SimpleDateFormat formatter =
-            new SimpleDateFormat("yyyyMMddHHmmss'Z'");
+          SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss'Z'");
           formatter.setTimeZone(utcTimeZone);
 
           time = formatter.parse(v).getTime();
@@ -1148,15 +1243,16 @@
     }
     catch (Throwable t)
     {
-      logger.warn(LocalizableMessage.raw("Error retrieving server current time: "+t, t));
+      logger.warn(LocalizableMessage.raw("Error retrieving server current time: " + t, t));
     }
     return time;
   }
 
   /**
    * Checks that the java version we are running is compatible with OpenDS.
-   * @throws IncompatibleVersionException if the java version we are running
-   * is not compatible with OpenDS.
+   *
+   * @throws IncompatibleVersionException
+   *           if the java version we are running is not compatible with OpenDS.
    */
   public static void checkJavaVersion() throws IncompatibleVersionException
   {
@@ -1167,15 +1263,11 @@
       if (i.getVendor().equalsIgnoreCase(vendor))
       {
         // Compare versions.
-        boolean versionCompatible =
-          i.getVersion().compareToIgnoreCase(version) <= 0;
+        boolean versionCompatible = i.getVersion().compareToIgnoreCase(version) <= 0;
         if (!versionCompatible)
         {
-          String javaBin = System.getProperty("java.home")+File.separator+
-          "bin"+File.separator+"java";
-          throw new IncompatibleVersionException(
-              ERR_INCOMPATIBLE_VERSION.get(i.getVersion(), version, javaBin),
-              null);
+          String javaBin = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
+          throw new IncompatibleVersionException(ERR_INCOMPATIBLE_VERSION.get(i.getVersion(), version, javaBin), null);
         }
       }
     }
@@ -1189,19 +1281,19 @@
       catch (Throwable t)
       {
         throw new IncompatibleVersionException(
-            INFO_DOWNLOADING_ERROR_NO_SERVICE_FOUND.get(
-                JNLP_SERVICE_NAME, getSetupFilename()),
-            t);
+            INFO_DOWNLOADING_ERROR_NO_SERVICE_FOUND.get(JNLP_SERVICE_NAME, getSetupFilename()), t);
       }
     }
   }
 
   /**
-   * Basic method to know if the host is local or not.  This is only used to
-   * know if we can perform a port check or not.
-   * @param host the host to analyze.
+   * Basic method to know if the host is local or not. This is only used to know
+   * if we can perform a port check or not.
+   *
+   * @param host
+   *          the host to analyze.
    * @return <CODE>true</CODE> if it is the local host and <CODE>false</CODE>
-   * otherwise.
+   *         otherwise.
    */
   public static boolean isLocalHost(String host)
   {
@@ -1214,8 +1306,10 @@
     {
       InetAddress localAddress = InetAddress.getLocalHost();
       InetAddress[] addresses = InetAddress.getAllByName(host);
-      for (InetAddress address : addresses) {
-        if (localAddress.equals(address)) {
+      for (InetAddress address : addresses)
+      {
+        if (localAddress.equals(address))
+        {
           return true;
         }
       }
@@ -1281,7 +1375,8 @@
   public static String getHtml(String text)
   {
     StringBuilder buffer = new StringBuilder();
-    if (text != null) {
+    if (text != null)
+    {
       text = text.replaceAll("\r\n", "\n");
       String[] lines = text.split("[\n\r\u0085\u2028\u2029]");
       for (int i = 0; i < lines.length; i++)
@@ -1297,18 +1392,22 @@
   }
 
   /**
-   * Tries to find a customized object in the customization class.  If the
-   * customization class does not exist or it does not contain the field
-   * as the specified type of the object, returns the default value.
-   * @param <T> the type of the customized object.
-   * @param fieldName the name of the field representing an object in the
-   * customization class.
-   * @param defaultValue the default value.
-   * @param valueClass the class of the parametrized value.
+   * Tries to find a customized object in the customization class. If the
+   * customization class does not exist or it does not contain the field as the
+   * specified type of the object, returns the default value.
+   *
+   * @param <T>
+   *          the type of the customized object.
+   * @param fieldName
+   *          the name of the field representing an object in the customization
+   *          class.
+   * @param defaultValue
+   *          the default value.
+   * @param valueClass
+   *          the class of the parametrized value.
    * @return the customized object.
    */
-  public static <T> T getCustomizedObject(String fieldName,
-      T defaultValue, Class<T> valueClass)
+  public static <T> T getCustomizedObject(String fieldName, T defaultValue, Class<T> valueClass)
   {
     T value = defaultValue;
     if (!isWebStart())
@@ -1330,9 +1429,13 @@
 
   /**
    * Adds word break tags to the provided html string.
-   * @param htmlString the string.
-   * @param from the first index to start the spacing from.
-   * @param spacing the minimal spacing between word breaks.
+   *
+   * @param htmlString
+   *          the string.
+   * @param from
+   *          the first index to start the spacing from.
+   * @param spacing
+   *          the minimal spacing between word breaks.
    * @return a string containing word breaks.
    */
   public static String addWordBreaks(String htmlString, int from, int spacing)
@@ -1341,7 +1444,7 @@
     boolean insideTag = false;
     int totalAddedChars = 0;
     int addedChars = 0;
-    for (int i = 0 ; i<htmlString.length(); i++)
+    for (int i = 0; i < htmlString.length(); i++)
     {
       char c = htmlString.charAt(i);
       sb.append(c);
@@ -1355,10 +1458,10 @@
       }
       if (!insideTag && c != '>')
       {
-        addedChars ++;
-        totalAddedChars ++;
+        addedChars++;
+        totalAddedChars++;
       }
-      if ((addedChars > spacing) && (totalAddedChars > from) && !insideTag)
+      if (addedChars > spacing && totalAddedChars > from && !insideTag)
       {
         sb.append("<wbr>");
         addedChars = 0;
@@ -1367,8 +1470,6 @@
     return sb.toString();
   }
 
-
-
   /**
    * Returns the localized string describing the DataOptions chosen by the user.
    *
@@ -1384,9 +1485,10 @@
     final SuffixesToReplicateOptions suf = userInstallData.getSuffixesToReplicateOptions();
     final String backendType = userInstallData.getBackendType().getUserFriendlyName().toString();
 
-    boolean createSuffix = repl.getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY
-        || repl.getType() == DataReplicationOptions.Type.STANDALONE
-        || suf.getType() == SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
+    boolean createSuffix =
+        repl.getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY
+            || repl.getType() == DataReplicationOptions.Type.STANDALONE
+            || suf.getType() == SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
 
     if (createSuffix)
     {
@@ -1421,8 +1523,9 @@
       }
       else if (options.getBaseDns().size() > 1)
       {
-        msg = INFO_REVIEW_CREATE_SUFFIX.get(
-            backendType, joinAsString(Constants.LINE_SEPARATOR, options.getBaseDns()), arg2);
+        msg =
+            INFO_REVIEW_CREATE_SUFFIX.get(backendType, joinAsString(Constants.LINE_SEPARATOR, options.getBaseDns()),
+                arg2);
       }
       else
       {
@@ -1446,24 +1549,23 @@
     return msg.toString();
   }
 
-
-
   /**
    * Returns a localized String representation of the provided SecurityOptions
    * object.
-   * @param ops the SecurityOptions object from which we want to obtain the
-   * String representation.
-   * @param html whether the resulting String must be in HTML or not.
+   *
+   * @param ops
+   *          the SecurityOptions object from which we want to obtain the String
+   *          representation.
+   * @param html
+   *          whether the resulting String must be in HTML or not.
    * @return a localized String representation of the provided SecurityOptions
-   * object.
+   *         object.
    */
-  public static String getSecurityOptionsString(SecurityOptions ops,
-      boolean html)
+  public static String getSecurityOptionsString(SecurityOptions ops, boolean html)
   {
     StringBuilder buf = new StringBuilder();
 
-    if (ops.getCertificateType() ==
-      SecurityOptions.CertificateType.NO_CERTIFICATE)
+    if (ops.getCertificateType() == SecurityOptions.CertificateType.NO_CERTIFICATE)
     {
       buf.append(INFO_NO_SECURITY.get());
     }
@@ -1520,16 +1622,14 @@
         break;
 
       default:
-        throw new IllegalStateException("Unknown certificate options type: "+
-            ops.getCertificateType());
+        throw new IllegalStateException("Unknown certificate options type: " + ops.getCertificateType());
       }
       buf.append(certMsg);
     }
 
     if (html)
     {
-      return "<html>"+UIFactory.applyFontToHtml(buf.toString(),
-          UIFactory.SECONDARY_FIELD_VALID_FONT);
+      return "<html>" + UIFactory.applyFontToHtml(buf.toString(), UIFactory.SECONDARY_FIELD_VALID_FONT);
     }
     else
     {
@@ -1557,14 +1657,14 @@
     {
       sbSeparator.append("\\");
       sbSeparator.append(formatter.getLineBreak());
-      for (int i=0 ; i < 10 ; i++)
+      for (int i = 0; i < 10; i++)
       {
         sbSeparator.append(formatter.getSpace());
       }
     }
 
     String lineSeparator = sbSeparator.toString();
-    for (int i=initialIndex ; i<cmd.size(); i++)
+    for (int i = initialIndex; i < cmd.size(); i++)
     {
       String s = cmd.get(i);
       if (s.startsWith("-"))
@@ -1575,21 +1675,18 @@
       else
       {
         builder.append(formatter.getSpace());
-        builder.append(formatter.getFormattedProgress(LocalizableMessage.raw(
-            escapeCommandLineValue(s))));
+        builder.append(formatter.getFormattedProgress(LocalizableMessage.raw(escapeCommandLineValue(s))));
       }
     }
     return builder.toString();
   }
 
-  /** Chars that require special treatment when passing them to command-line. */
-  private static final char[] charsToEscape = {' ', '\t', '\n', '|', ';', '<',
-    '>', '(', ')', '$', '`', '\\', '"', '\''};
-
   /**
    * This method simply takes a value and tries to transform it (with escape or
    * '"') characters so that it can be used in a command line.
-   * @param value the String to be treated.
+   *
+   * @param value
+   *          the String to be treated.
    * @return the transformed value.
    */
   public static String escapeCommandLineValue(String value)
@@ -1597,13 +1694,13 @@
     StringBuilder b = new StringBuilder();
     if (isUnix())
     {
-      for (int i=0 ; i<value.length(); i++)
+      for (int i = 0; i < value.length(); i++)
       {
         char c = value.charAt(i);
         boolean charToEscapeFound = false;
-        for (int j=0; j<charsToEscape.length && !charToEscapeFound; j++)
+        for (int j = 0; j < CHARS_TO_ESCAPE.length && !charToEscapeFound; j++)
         {
-          charToEscapeFound = c == charsToEscape[j];
+          charToEscapeFound = c == CHARS_TO_ESCAPE[j];
         }
         if (charToEscapeFound)
         {
@@ -1632,7 +1729,7 @@
    */
   public static List<String> getSetupEquivalentCommandLine(final UserData userData)
   {
-    List<String> cmdLine = new ArrayList<String>();
+    List<String> cmdLine = new ArrayList<>();
     cmdLine.add(getInstallDir(userData) + getSetupFilename());
     cmdLine.add("--cli");
 
@@ -1740,7 +1837,7 @@
 
   private static List<String> getSecurityOptionSetupEquivalentCmdLine(final UserData userData)
   {
-    final List<String> cmdLine = new ArrayList<String>();
+    final List<String> cmdLine = new ArrayList<>();
 
     switch (userData.getSecurityOptions().getCertificateType())
     {
@@ -1824,19 +1921,19 @@
   }
 
   /**
-   * Returns the list of equivalent command-lines that must be executed to enable or initialize
-   * replication as the setup does.
+   * Returns the list of equivalent command-lines that must be executed to
+   * enable or initialize replication as the setup does.
    *
    * @param subcommand
    *          either {@code "enable"} or {@code "initialize"}
    * @param userData
    *          the user data.
-   * @return the list of equivalent command-lines that must be executed to enable or initialize
-   *         replication as the setup does.
+   * @return the list of equivalent command-lines that must be executed to
+   *         enable or initialize replication as the setup does.
    */
   public static List<List<String>> getDsReplicationEquivalentCommandLines(String subcommand, UserData userData)
   {
-    final List<List<String>> cmdLines = new ArrayList<List<String>>();
+    final List<List<String>> cmdLines = new ArrayList<>();
     final Map<ServerDescriptor, Set<String>> hmServerBaseDNs = getServerDescriptorBaseDNMap(userData);
     for (ServerDescriptor server : hmServerBaseDNs.keySet())
     {
@@ -1845,7 +1942,7 @@
     return cmdLines;
   }
 
-  private static void addEnableCommandOptions(UserData userData, ServerDescriptor server, ArrayList<String> cmdLine)
+  private static void addEnableCommandOptions(UserData userData, ServerDescriptor server, List<String> cmdLine)
   {
     DataReplicationOptions replOptions = userData.getReplicationOptions();
     cmdLine.add("--host1");
@@ -1853,23 +1950,19 @@
     cmdLine.add("--port1");
     cmdLine.add(String.valueOf(server.getEnabledAdministrationPorts().get(0)));
 
-    AuthenticationData authData =
-      userData.getReplicationOptions().getAuthenticationData();
-    if (!Utils.areDnsEqual(authData.getDn(),
-        ADSContext.getAdministratorDN(userData.getGlobalAdministratorUID())))
+    AuthenticationData authData = userData.getReplicationOptions().getAuthenticationData();
+    if (!Utils.areDnsEqual(authData.getDn(), ADSContext.getAdministratorDN(userData.getGlobalAdministratorUID())))
     {
       cmdLine.add("--bindDN1");
       cmdLine.add(authData.getDn());
       cmdLine.add("--bindPassword1");
       cmdLine.add(OBFUSCATED_VALUE);
     }
-    for (ServerDescriptor s :
-      userData.getRemoteWithNoReplicationPort().keySet())
+    for (ServerDescriptor s : userData.getRemoteWithNoReplicationPort().keySet())
     {
       if (s.getAdminConnectorURL().equals(server.getAdminConnectorURL()))
       {
-        AuthenticationData remoteRepl =
-          userData.getRemoteWithNoReplicationPort().get(server);
+        AuthenticationData remoteRepl = userData.getRemoteWithNoReplicationPort().get(server);
         int remoteReplicationPort = remoteRepl.getPort();
 
         cmdLine.add("--replicationPort1");
@@ -1901,34 +1994,35 @@
 
   /**
    * Returns the full path of the command-line for a given script name.
-   * @param userData  the user data.
-   * @param scriptBasicName the script basic name (with no extension).
+   *
+   * @param userData
+   *          the user data.
+   * @param scriptBasicName
+   *          the script basic name (with no extension).
    * @return the full path of the command-line for a given script name.
    */
-  private static String getCommandLinePath(UserData userData,
-                                           String scriptBasicName)
+  private static String getCommandLinePath(UserData userData, String scriptBasicName)
   {
     String cmdLineName;
     if (isWindows())
     {
-      cmdLineName = getInstallDir(userData)
-          + Installation.WINDOWS_BINARIES_PATH_RELATIVE
-          + File.separatorChar
-          + scriptBasicName + ".bat";
+      cmdLineName =
+          getInstallDir(userData) + Installation.WINDOWS_BINARIES_PATH_RELATIVE + File.separatorChar + scriptBasicName
+              + ".bat";
     }
     else
     {
-      cmdLineName = getInstallDir(userData)
-          + Installation.UNIX_BINARIES_PATH_RELATIVE
-          + File.separatorChar
-          + scriptBasicName;
+      cmdLineName =
+          getInstallDir(userData) + Installation.UNIX_BINARIES_PATH_RELATIVE + File.separatorChar + scriptBasicName;
     }
     return cmdLineName;
   }
 
   private static String installDir;
+
   /**
    * Returns the installation directory.
+   *
    * @return the installation directory.
    */
   private static String getInstallDir(UserData userData)
@@ -1961,10 +2055,10 @@
     return installDir;
   }
 
-  private static ArrayList<String> getDsReplicationEquivalentCommandLine(
-      String subcommand, UserData userData, Set<String> baseDNs, ServerDescriptor server)
+  private static List<String> getDsReplicationEquivalentCommandLine(String subcommand, UserData userData,
+      Set<String> baseDNs, ServerDescriptor server)
   {
-    ArrayList<String> cmdLine = new ArrayList<String>();
+    List<String> cmdLine = new ArrayList<>();
     String cmdName = getCommandLinePath(userData, "dsreplication");
     cmdLine.add(cmdName);
     cmdLine.add(subcommand);
@@ -1986,7 +2080,7 @@
     return cmdLine;
   }
 
-  private static void addInitializeCommandOptions(UserData userData, ServerDescriptor server, ArrayList<String> cmdLine)
+  private static void addInitializeCommandOptions(UserData userData, ServerDescriptor server, List<String> cmdLine)
   {
     cmdLine.add("--hostSource");
     cmdLine.add(server.getHostName());
@@ -1999,7 +2093,7 @@
     cmdLine.add(String.valueOf(userData.getAdminConnectorPort()));
   }
 
-  private static void addCommonOptions(UserData userData, Set<String> baseDNs, ArrayList<String> cmdLine)
+  private static void addCommonOptions(UserData userData, Set<String> baseDNs, List<String> cmdLine)
   {
     for (String baseDN : baseDNs)
     {
@@ -2017,17 +2111,17 @@
     cmdLine.add("--noPropertiesFile");
   }
 
-  private static ArrayList<String> getBaseDNs(UserData userData)
+  private static List<String> getBaseDNs(UserData userData)
   {
-    ArrayList<String> baseDNs = new ArrayList<String>();
+    List<String> baseDNs = new ArrayList<>();
 
     DataReplicationOptions repl = userData.getReplicationOptions();
     SuffixesToReplicateOptions suf = userData.getSuffixesToReplicateOptions();
 
     boolean createSuffix =
-      repl.getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY ||
-      repl.getType() == DataReplicationOptions.Type.STANDALONE ||
-      suf.getType() == SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
+        repl.getType() == DataReplicationOptions.Type.FIRST_IN_TOPOLOGY
+            || repl.getType() == DataReplicationOptions.Type.STANDALONE
+            || suf.getType() == SuffixesToReplicateOptions.Type.NEW_SUFFIX_IN_TOPOLOGY;
 
     if (createSuffix)
     {
@@ -2045,32 +2139,27 @@
     return baseDNs;
   }
 
-  private static Map<ServerDescriptor, Set<String>>
-  getServerDescriptorBaseDNMap(UserData userData)
+  private static Map<ServerDescriptor, Set<String>> getServerDescriptorBaseDNMap(UserData userData)
   {
-    Map<ServerDescriptor, Set<String>> hm =
-      new HashMap<ServerDescriptor, Set<String>>();
+    Map<ServerDescriptor, Set<String>> hm = new HashMap<>();
 
-    Set<SuffixDescriptor> suffixes =
-      userData.getSuffixesToReplicateOptions().getSuffixes();
-    AuthenticationData authData =
-      userData.getReplicationOptions().getAuthenticationData();
-    String ldapURL = ConnectionUtils.getLDAPUrl(authData.getHostName(),
-        authData.getPort(), authData.useSecureConnection());
+    Set<SuffixDescriptor> suffixes = userData.getSuffixesToReplicateOptions().getSuffixes();
+    AuthenticationData authData = userData.getReplicationOptions().getAuthenticationData();
+    String ldapURL =
+        ConnectionUtils.getLDAPUrl(authData.getHostName(), authData.getPort(), authData.useSecureConnection());
     for (SuffixDescriptor suffix : suffixes)
     {
       boolean found = false;
       for (ReplicaDescriptor replica : suffix.getReplicas())
       {
-        if (ldapURL.equalsIgnoreCase(
-            replica.getServer().getAdminConnectorURL()))
+        if (ldapURL.equalsIgnoreCase(replica.getServer().getAdminConnectorURL()))
         {
           // This is the server we're configuring
           found = true;
           Set<String> baseDNs = hm.get(replica.getServer());
           if (baseDNs == null)
           {
-            baseDNs = new LinkedHashSet<String>();
+            baseDNs = new LinkedHashSet<>();
             hm.put(replica.getServer(), baseDNs);
           }
           baseDNs.add(suffix.getDN());
@@ -2095,7 +2184,7 @@
         ReplicaDescriptor replica = suffix.getReplicas().iterator().next();
         if (replica != null)
         {
-          Set<String> baseDNs = new LinkedHashSet<String>();
+          Set<String> baseDNs = new LinkedHashSet<>();
           hm.put(replica.getServer(), baseDNs);
           baseDNs.add(suffix.getDN());
         }
@@ -2115,10 +2204,10 @@
    */
   public static List<List<String>> getDsConfigReplicationEnableEquivalentCommandLines(UserData userData)
   {
-    final List<List<String>> cmdLines = new ArrayList<List<String>>();
+    final List<List<String>> cmdLines = new ArrayList<>();
     final String cmdName = getCommandLinePath(userData, "dsconfig");
 
-    ArrayList<String> connectionArgs = new ArrayList<String>();
+    List<String> connectionArgs = new ArrayList<>();
     connectionArgs.add("--hostName");
     connectionArgs.add(userData.getHostName());
     connectionArgs.add("--port");
@@ -2131,14 +2220,13 @@
     connectionArgs.add("--no-prompt");
     connectionArgs.add("--noPropertiesFile");
 
-    ArrayList<String> cmdReplicationServer = new ArrayList<String>();
+    List<String> cmdReplicationServer = new ArrayList<>();
     cmdReplicationServer.add(cmdName);
     cmdReplicationServer.add("create-replication-server");
     cmdReplicationServer.add("--provider-name");
     cmdReplicationServer.add("Multimaster Synchronization");
     cmdReplicationServer.add("--set");
-    cmdReplicationServer.add("replication-port:"+
-        userData.getReplicationOptions().getReplicationPort());
+    cmdReplicationServer.add("replication-port:" + userData.getReplicationOptions().getReplicationPort());
     cmdReplicationServer.add("--set");
     cmdReplicationServer.add("replication-server-id:1");
     cmdReplicationServer.add("--type");
@@ -2149,16 +2237,16 @@
 
     for (String baseDN : getBaseDNs(userData))
     {
-      ArrayList<String> cmdDomain = new ArrayList<String>();
+      List<String> cmdDomain = new ArrayList<>();
       cmdDomain.add(cmdName);
       cmdDomain.add("create-replication-domain");
       cmdDomain.add("--provider-name");
       cmdDomain.add("Multimaster Synchronization");
       cmdDomain.add("--set");
-      cmdDomain.add("base-dn:"+baseDN);
+      cmdDomain.add("base-dn:" + baseDN);
       cmdDomain.add("--set");
-      cmdDomain.add("replication-server:"+userData.getHostName()+":"+
-          userData.getReplicationOptions().getReplicationPort());
+      cmdDomain.add("replication-server:" + userData.getHostName() + ":"
+          + userData.getReplicationOptions().getReplicationPort());
       cmdDomain.add("--set");
       cmdDomain.add("server-id:1");
       cmdDomain.add("--type");
@@ -2176,24 +2264,20 @@
 /**
  * This class is used to avoid displaying the error message related to display
  * problems that we might have when trying to display the SplashWindow.
- *
  */
-class EmptyPrintStream extends PrintStream {
+class EmptyPrintStream extends PrintStream
+{
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
-  /**
-   * Default constructor.
-   *
-   */
+  /** Default constructor. */
   public EmptyPrintStream()
   {
     super(new ByteArrayOutputStream(), true);
   }
 
-  /** {@inheritDoc} */
   @Override
   public void println(String msg)
   {
-    logger.info(LocalizableMessage.raw("EmptyStream msg: "+msg));
+    logger.info(LocalizableMessage.raw("EmptyStream msg: " + msg));
   }
 }

--
Gitblit v1.10.0