From 4e9fade8dae490c812438aeeb040209ab3937da4 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 28 Oct 2014 13:53:54 +0000
Subject: [PATCH] Code cleanup

---
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java |  832 ++++++++++++++++++++---------------------------------------
 1 files changed, 286 insertions(+), 546 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 413cc10..18245dd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -666,25 +666,23 @@
         {
           return defaultValue;
         }
-        else
+
+        try
         {
-          try
+          int i = Integer.parseInt(ninput);
+          if (i < 1)
           {
-            int i = Integer.parseInt(ninput);
-            if (i < 1)
-            {
-              throw new NumberFormatException();
-            }
-            return i;
+            throw new NumberFormatException();
           }
-          catch (NumberFormatException e)
-          {
-            // Try again...
-            app.println();
-            app.println(ERR_BAD_INTEGER.get(ninput));
-            app.println();
-            return null;
-          }
+          return i;
+        }
+        catch (NumberFormatException e)
+        {
+          // Try again...
+          app.println();
+          app.println(ERR_BAD_INTEGER.get(ninput));
+          app.println();
+          return null;
         }
       }
 
@@ -821,7 +819,7 @@
       new PreExternalInitializationUserData();
     if (argParser.isInteractive())
     {
-      if (promptIfRequired(uData))
+      if (promptIfRequiredForPreOrPost(uData))
       {
         return preExternalInitialization(uData);
       }
@@ -849,7 +847,7 @@
       new PostExternalInitializationUserData();
     if (argParser.isInteractive())
     {
-      if (promptIfRequired(uData))
+      if (promptIfRequiredForPreOrPost(uData))
       {
         return postExternalInitialization(uData);
       }
@@ -1362,7 +1360,7 @@
 
   private InitialLdapContext createAdministrativeContext(MonoServerReplicationUserData uData)
   {
-    final String bindDn = ADSContext.getAdministratorDN(uData.getAdminUid());
+    final String bindDn = getAdministratorDN(uData.getAdminUid());
     return createAdministrativeContext(uData, bindDn);
   }
 
@@ -2882,94 +2880,15 @@
   }
 
   /**
-   * Updates the contents of the provided PreExternalInitializationUserData
-   * object with the information provided in the command-line.  If some
-   * information is missing, ask the user to provide valid data.
+   * Updates the contents of the provided user data
+   * object with the information provided in the command-line.
+   * If some information is missing, ask the user to provide valid data.
    * We assume that if this method is called we are in interactive mode.
    * @param uData the object to be updated.
    * @return <CODE>true</CODE> if the object was successfully updated and
    * <CODE>false</CODE> if the user cancelled the operation.
    */
-  private boolean promptIfRequired(PreExternalInitializationUserData uData)
-  {
-    boolean cancelled = false;
-
-    String adminPwd = argParser.getBindPasswordAdmin();
-    String adminUid = argParser.getAdministratorUID();
-
-    String host = argParser.getHostNameToInitializeAll();
-    int port = argParser.getPortToInitializeAll();
-
-    /*
-     * Try to connect to the server.
-     */
-    InitialLdapContext ctx = null;
-
-    while (ctx == null && !cancelled)
-    {
-      try
-      {
-        ci.run();
-        host = ci.getHostName();
-        port = ci.getPortNumber();
-        adminUid = ci.getAdministratorUID();
-        adminPwd = ci.getBindPassword();
-
-        ctx = createInitialLdapContextInteracting(ci);
-
-        if (ctx == null)
-        {
-          cancelled = true;
-        }
-      }
-      catch (ClientException ce)
-      {
-        logger.warn(LocalizableMessage.raw("Client exception "+ce));
-        println();
-        println(ce.getMessageObject());
-        println();
-        ci.resetConnectionArguments();
-      }
-      catch (ArgumentException ae)
-      {
-        logger.warn(LocalizableMessage.raw("Argument exception "+ae));
-        println();
-        println(ae.getMessageObject());
-        println();
-        cancelled = true;
-      }
-    }
-    if (!cancelled)
-    {
-      uData.setHostName(host);
-      uData.setPort(port);
-      uData.setAdminUid(adminUid);
-      uData.setAdminPwd(adminPwd);
-    }
-
-    if (!cancelled)
-    {
-      LinkedList<String> suffixes = argParser.getBaseDNs();
-      checkSuffixesForInitializeReplication(suffixes, ctx, true);
-      cancelled = suffixes.isEmpty();
-
-      uData.setBaseDNs(suffixes);
-    }
-
-    close(ctx);
-    return !cancelled;
-  }
-
-  /**
-   * Updates the contents of the provided PostExternalInitializationUserData
-   * object with the information provided in the command-line.  If some
-   * information is missing, ask the user to provide valid data.
-   * We assume that if this method is called we are in interactive mode.
-   * @param uData the object to be updated.
-   * @return <CODE>true</CODE> if the object was successfully updated and
-   * <CODE>false</CODE> if the user cancelled the operation.
-   */
-  private boolean promptIfRequired(PostExternalInitializationUserData uData)
+  private boolean promptIfRequiredForPreOrPost(MonoServerReplicationUserData uData)
   {
     boolean cancelled = false;
 
@@ -3121,8 +3040,7 @@
 
     if (!cancelled)
     {
-      LinkedList<String> suffixes = argParser.getBaseDNs();
-      uData.setBaseDNs(suffixes);
+      uData.setBaseDNs(argParser.getBaseDNs());
     }
 
     close(ctx);
@@ -3284,7 +3202,8 @@
         println();
         cancelled = true;
       }
-    }    if (!cancelled)
+    }
+    if (!cancelled)
     {
       uData.setHostNameDestination(hostDestination);
       uData.setPortDestination(portDestination);
@@ -3293,8 +3212,7 @@
     if (!cancelled)
     {
       LinkedList<String> suffixes = argParser.getBaseDNs();
-      checkSuffixesForInitializeReplication(suffixes, ctxSource, ctxDestination,
-          true);
+      checkSuffixesForInitializeReplication(suffixes, ctxSource, ctxDestination, true);
       cancelled = suffixes.isEmpty();
 
       uData.setBaseDNs(suffixes);
@@ -3383,13 +3301,11 @@
    */
   private void initializeWithArgParser(EnableReplicationUserData uData)
   {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
+    initialize(uData);
+    String adminUid = uData.getAdminUid();
+    String adminPwd = uData.getAdminPwd();
 
+    final String adminDN = getAdministratorDN(adminUid);
     String host1Name = getValue(argParser.getHostName1(),
         argParser.getDefaultHostName1());
     uData.setHostName1(host1Name);
@@ -3399,7 +3315,7 @@
     String pwd1 = argParser.getBindPassword1();
     if (pwd1 == null)
     {
-      uData.setBindDn1(ADSContext.getAdministratorDN(adminUid));
+      uData.setBindDn1(adminDN);
       uData.setPwd1(adminPwd);
     }
     else
@@ -3408,10 +3324,9 @@
       try
       {
         InitialLdapContext ctx = createAdministrativeContext(
-            uData.getHostName1(), uData.getPort1(), useSSL,
-            useStartTLS, ADSContext.getAdministratorDN(adminUid),
-            adminPwd, getConnectTimeout(), getTrustManager());
-        uData.setBindDn1(ADSContext.getAdministratorDN(adminUid));
+            uData.getHostName1(), uData.getPort1(), useSSL, useStartTLS,
+            adminDN, adminPwd, getConnectTimeout(), getTrustManager());
+        uData.setBindDn1(adminDN);
         uData.setPwd1(adminPwd);
         ctx.close();
       }
@@ -3434,7 +3349,7 @@
     String pwd2 = argParser.getBindPassword2();
     if (pwd2 == null)
     {
-      uData.setBindDn2(ADSContext.getAdministratorDN(adminUid));
+      uData.setBindDn2(adminDN);
       uData.setPwd2(adminPwd);
     }
     else
@@ -3443,10 +3358,9 @@
       try
       {
         InitialLdapContext ctx = createAdministrativeContext(
-            uData.getHostName2(), uData.getPort2(), useSSL,
-            useStartTLS, ADSContext.getAdministratorDN(adminUid),
-            adminPwd, getConnectTimeout(), getTrustManager());
-        uData.setBindDn2(ADSContext.getAdministratorDN(adminUid));
+            uData.getHostName2(), uData.getPort2(), useSSL, useStartTLS,
+            adminDN, adminPwd, getConnectTimeout(), getTrustManager());
+        uData.setBindDn2(adminDN);
         uData.setPwd2(adminPwd);
         ctx.close();
       }
@@ -3492,12 +3406,7 @@
    */
   private void initializeWithArgParser(InitializeReplicationUserData uData)
   {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
+    initialize(uData);
 
     String hostNameSource = getValue(argParser.getHostNameSource(),
         argParser.getDefaultHostNameSource());
@@ -3529,12 +3438,11 @@
     if (bindDn == null && adminUid == null)
     {
       adminUid = argParser.getDefaultAdministratorUID();
-      bindDn = ADSContext.getAdministratorDN(adminUid);
+      bindDn = getAdministratorDN(adminUid);
     }
     uData.setAdminUid(adminUid);
     uData.setBindDn(bindDn);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
+    uData.setAdminPwd(argParser.getBindPasswordAdmin());
 
     String hostName = getValue(argParser.getHostNameToDisable(),
         argParser.getDefaultHostNameToDisable());
@@ -3549,20 +3457,13 @@
   }
 
   /**
-   * Initializes the contents of the provided initialize all replication user
-   * data object with what was provided in the command-line without prompting to
-   * the user.
-   * @param uData the initialize all replication user data object to be
-   * initialized.
+   * Initializes the contents of the provided user data object with what was
+   * provided in the command-line without prompting to the user.
+   * @param uData the user data object to be initialized.
    */
-  private void initializeWithArgParser(InitializeAllReplicationUserData uData)
+  private void initializeWithArgParser(MonoServerReplicationUserData uData)
   {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
+    initialize(uData);
 
     String hostName = getValue(argParser.getHostNameToInitializeAll(),
         argParser.getDefaultHostNameToInitializeAll());
@@ -3573,55 +3474,6 @@
   }
 
   /**
-   * Initializes the contents of the provided pre external replication user
-   * data object with what was provided in the command-line without prompting to
-   * the user.
-   * @param uData the pre external replication user data object to be
-   * initialized.
-   */
-  private void initializeWithArgParser(PreExternalInitializationUserData uData)
-  {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
-
-    String hostName = getValue(argParser.getHostNameToInitializeAll(),
-        argParser.getDefaultHostNameToInitializeAll());
-    uData.setHostName(hostName);
-    int port = getValue(argParser.getPortToInitializeAll(),
-        argParser.getDefaultPortToInitializeAll());
-    uData.setPort(port);
-  }
-
-  /**
-   * Initializes the contents of the provided post external replication user
-   * data object with what was provided in the command-line without prompting to
-   * the user.
-   * @param uData the pre external replication user data object to be
-   * initialized.
-   */
-  private void initializeWithArgParser(PostExternalInitializationUserData uData)
-  {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
-
-    String hostName = getValue(argParser.getHostNameToInitializeAll(),
-        argParser.getDefaultHostNameToInitializeAll());
-    uData.setHostName(hostName);
-    int port = getValue(argParser.getPortToInitializeAll(),
-        argParser.getDefaultPortToInitializeAll());
-    uData.setPort(port);
-  }
-
-
-  /**
    * Initializes the contents of the provided status replication user data
    * object with what was provided in the command-line without prompting to the
    * user.
@@ -3629,12 +3481,7 @@
    */
   private void initializeWithArgParser(StatusReplicationUserData uData)
   {
-    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
-    String adminUid = getValue(argParser.getAdministratorUID(),
-        argParser.getDefaultAdministratorUID());
-    uData.setAdminUid(adminUid);
-    String adminPwd = argParser.getBindPasswordAdmin();
-    uData.setAdminPwd(adminPwd);
+    initialize(uData);
 
     String hostName = getValue(argParser.getHostNameToStatus(),
         argParser.getDefaultHostNameToStatus());
@@ -3646,6 +3493,14 @@
     uData.setScriptFriendly(argParser.isScriptFriendly());
   }
 
+  private void initialize(ReplicationUserData uData)
+  {
+    uData.setBaseDNs(new LinkedList<String>(argParser.getBaseDNs()));
+    String adminUid = getValue(argParser.getAdministratorUID(), argParser.getDefaultAdministratorUID());
+    uData.setAdminUid(adminUid);
+    uData.setAdminPwd(argParser.getBindPasswordAdmin());
+  }
+
   /**
    * Tells whether the server to which the LdapContext is connected has a
    * replication port or not.
@@ -3774,6 +3629,7 @@
             {
               break;
             }
+
             switch (e.getType())
             {
               case NOT_GLOBAL_ADMINISTRATOR:
@@ -3812,7 +3668,7 @@
                   try
                   {
                     ctx[0] = createAdministrativeContext(host, port, isSSL,
-                        isStartTLS, ADSContext.getAdministratorDN(adminUid),
+                        isStartTLS, getAdministratorDN(adminUid),
                         adminPwd, getConnectTimeout(), getTrustManager());
                     adsContext = new ADSContext(ctx[0]);
                     cache = new TopologyCache(adsContext, getTrustManager(),
@@ -3840,14 +3696,12 @@
                     (EnableReplicationUserData)uData;
                   if (isFirstOrSourceServer)
                   {
-                    enableData.setBindDn1(
-                        ADSContext.getAdministratorDN(adminUid));
+                    enableData.setBindDn1(getAdministratorDN(adminUid));
                     enableData.setPwd1(adminPwd);
                   }
                   else
                   {
-                    enableData.setBindDn2(
-                        ADSContext.getAdministratorDN(adminUid));
+                    enableData.setBindDn2(getAdministratorDN(adminUid));
                     enableData.setPwd2(adminPwd);
                   }
                 }
@@ -4347,8 +4201,9 @@
       DisableReplicationUserData uData)
   {
     print(formatter.getFormattedWithPoints(INFO_REPLICATION_CONNECTING.get()));
-    String bindDn = uData.getAdminUid() == null ? uData.getBindDn() :
-      ADSContext.getAdministratorDN(uData.getAdminUid());
+    String bindDn = uData.getAdminUid() != null
+        ? getAdministratorDN(uData.getAdminUid())
+        : uData.getBindDn();
 
     InitialLdapContext ctx = createAdministrativeContext(uData, bindDn);
     if (ctx != null)
@@ -4537,7 +4392,7 @@
     {
       return createAdministrativeContext(
           host, port, useSSL, useStartTLS,
-          ADSContext.getAdministratorDN(uData.getAdminUid()), uData.getAdminPwd(),
+          getAdministratorDN(uData.getAdminUid()), uData.getAdminPwd(),
           getConnectTimeout(), getTrustManager());
     }
     catch (NamingException ne)
@@ -5570,11 +5425,9 @@
       catch (Throwable t)
       {
         logger.error(LocalizableMessage.raw("Error seeding truststores: "+t, t));
-        String arg = (t instanceof OpenDsException) ?
-            ((OpenDsException)t).getMessageObject().toString() : t.toString();
         throw new ReplicationCliException(
             ERR_REPLICATION_ENABLE_SEEDING_TRUSTSTORE.get(getHostPort(ctxDestination),
-            getHostPort(adsCtxSource.getDirContext()), arg),
+            getHostPort(adsCtxSource.getDirContext()), toString(t)),
             ERROR_SEEDING_TRUSTORE, t);
       }
     }
@@ -8855,19 +8708,13 @@
         (DisableReplicationUserData)uData;
       if (disableData.disableAll())
       {
-        commandBuilder.addArgument(new BooleanArgument(
-            argParser.disableAllArg.getName(),
-            argParser.disableAllArg.getShortIdentifier(),
-            argParser.disableAllArg.getLongIdentifier(),
-            INFO_DESCRIPTION_DISABLE_ALL.get()));
+        commandBuilder.addArgument(newBooleanArgument(
+            argParser.disableAllArg, INFO_DESCRIPTION_DISABLE_ALL));
       }
       else if (disableData.disableReplicationServer())
       {
-        commandBuilder.addArgument(new BooleanArgument(
-            argParser.disableReplicationServerArg.getName(),
-            argParser.disableReplicationServerArg.getShortIdentifier(),
-            argParser.disableReplicationServerArg.getLongIdentifier(),
-            INFO_DESCRIPTION_DISABLE_REPLICATION_SERVER.get()));
+        commandBuilder.addArgument(newBooleanArgument(
+            argParser.disableReplicationServerArg, INFO_DESCRIPTION_DISABLE_REPLICATION_SERVER));
       }
     }
 
@@ -8894,33 +8741,17 @@
       CommandBuilder interactionBuilder = ci.getCommandBuilder();
       for (Argument arg : interactionBuilder.getArguments())
       {
-        if (arg.getLongIdentifier().equals(OPTION_LONG_BINDPWD))
+        if (OPTION_LONG_BINDPWD.equals(arg.getLongIdentifier()))
         {
-          StringArgument bindPasswordArg = new StringArgument("adminPassword",
-              OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
-              INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-              INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
-          bindPasswordArg.addValue(arg.getValue());
-          commandBuilder.addObfuscatedArgument(bindPasswordArg);
+          commandBuilder.addObfuscatedArgument(getAdminPasswordArg(arg));
         }
         else if (OPTION_LONG_BINDPWD_FILE.equals(arg.getLongIdentifier()))
         {
-          FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-              "adminPasswordFile",
-              OPTION_SHORT_BINDPWD_FILE, "adminPasswordFile", false, false,
-              INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-              INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORDFILE.get());
-          bindPasswordFileArg.getNameToValueMap().putAll(
-              ((FileBasedArgument)arg).getNameToValueMap());
-          commandBuilder.addArgument(bindPasswordFileArg);
-        }
-        else if (interactionBuilder.isObfuscated(arg))
-        {
-          commandBuilder.addObfuscatedArgument(arg);
+          commandBuilder.addArgument(getAdminPasswordFileArg(arg));
         }
         else
         {
-          commandBuilder.addArgument(arg);
+          addArgument(commandBuilder, arg, interactionBuilder.isObfuscated(arg));
         }
       }
     }
@@ -8997,13 +8828,10 @@
     ArrayList<Argument> toMoveArgs = new ArrayList<Argument>();
     for (String longID : identifiersToMove)
     {
-      for (Argument arg : commandBuilder.getArguments())
+      final Argument arg = findArg(commandBuilder, longID);
+      if (arg != null)
       {
-        if (longID.equals(arg.getLongIdentifier()))
-        {
-          toMoveArgs.add(arg);
-          break;
-        }
+        toMoveArgs.add(arg);
       }
     }
     for (Argument argToMove : toMoveArgs)
@@ -9045,6 +8873,35 @@
     }
   }
 
+  private Argument findArg(CommandBuilder commandBuilder, String longIdentifier)
+  {
+    for (Argument arg : commandBuilder.getArguments())
+    {
+      if (longIdentifier.equals(arg.getLongIdentifier()))
+      {
+        return arg;
+      }
+    }
+    return null;
+  }
+
+  private boolean existsArg(CommandBuilder commandBuilder, String longIdentifier)
+  {
+    return findArg(commandBuilder, longIdentifier) != null;
+  }
+
+  private void addArgument(CommandBuilder commandBuilder, Argument arg, boolean isObfuscated)
+  {
+    if (isObfuscated)
+    {
+      commandBuilder.addObfuscatedArgument(arg);
+    }
+    else
+    {
+      commandBuilder.addArgument(arg);
+    }
+  }
+
   private void updateCommandBuilder(CommandBuilder commandBuilder,
       EnableReplicationUserData uData)
   throws ArgumentException
@@ -9055,15 +8912,7 @@
 
     if (firstServerCommandBuilder != null)
     {
-      boolean useAdminUID = false;
-      for (Argument arg : firstServerCommandBuilder.getArguments())
-      {
-        if (OPTION_LONG_ADMIN_UID.equals(arg.getLongIdentifier()))
-        {
-          useAdminUID = true;
-          break;
-        }
-      }
+      boolean useAdminUID = existsArg(firstServerCommandBuilder, OPTION_LONG_ADMIN_UID);
       // This is required when both the bindDN and the admin UID are provided
       // in the command-line.
       boolean forceAddBindDN1 = false;
@@ -9074,123 +8923,65 @@
         String adminUID = uData.getAdminUid();
         if (bindDN1 != null
             && adminUID != null
-            && !areDnsEqual(ADSContext.getAdministratorDN(adminUID), bindDN1))
+            && !areDnsEqual(getAdministratorDN(adminUID), bindDN1))
         {
           forceAddBindDN1 = true;
-          for (Argument arg : firstServerCommandBuilder.getArguments())
-          {
-            if (OPTION_LONG_BINDPWD_FILE.equals(arg.getLongIdentifier()))
-            {
-              forceAddBindPwdFile1 = true;
-              break;
-            }
-          }
+          forceAddBindPwdFile1 = existsArg(firstServerCommandBuilder, OPTION_LONG_BINDPWD_FILE);
         }
       }
       for (Argument arg : firstServerCommandBuilder.getArguments())
       {
         if (OPTION_LONG_HOST.equals(arg.getLongIdentifier()))
         {
-          StringArgument host = new StringArgument("host1", OPTION_SHORT_HOST,
-              "host1", false, false, true, INFO_HOST_PLACEHOLDER.get(),
-              null,
-              null, INFO_DESCRIPTION_ENABLE_REPLICATION_HOST1.get());
-          host.addValue(uData.getHostName1());
-          commandBuilder.addArgument(host);
+          commandBuilder.addArgument(getHostArg("host1", OPTION_SHORT_HOST, uData.getHostName1(),
+              INFO_DESCRIPTION_ENABLE_REPLICATION_HOST1));
         }
         else if (OPTION_LONG_PORT.equals(arg.getLongIdentifier()))
         {
-          IntegerArgument port = new IntegerArgument("port1", OPTION_SHORT_PORT,
-              "port1",
-              false, false, true, INFO_PORT_PLACEHOLDER.get(), 4444, null,
-              INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT1.get());
-          port.addValue(String.valueOf(uData.getPort1()));
-          commandBuilder.addArgument(port);
+          commandBuilder.addArgument(getPortArg("port1", OPTION_SHORT_PORT, uData.getPort1(),
+              INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT1));
 
           if (forceAddBindDN1)
           {
-            StringArgument bindDN = new StringArgument("bindDN1",
-                OPTION_SHORT_BINDDN,
-                "bindDN1", false, false, true, INFO_BINDDN_PLACEHOLDER.get(),
-                "cn=Directory Manager", null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN1.get());
-            bindDN.addValue(uData.getBindDn1());
-            commandBuilder.addArgument(bindDN);
+            commandBuilder.addArgument(getBindDN1Arg(uData));
             if (forceAddBindPwdFile1)
             {
-              FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                  "bindPasswordFile1",
-                  null, "bindPasswordFile1", false, false,
-                  INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                  INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE1.get());
+              FileBasedArgument bindPasswordFileArg = getBindPasswordFile1Arg();
               bindPasswordFileArg.getNameToValueMap().put("{password file}",
                   "{password file}");
               commandBuilder.addArgument(bindPasswordFileArg);
             }
             else
             {
-              StringArgument bindPasswordArg = new StringArgument(
-                  "bindPassword1",
-                  null, "bindPassword1", false, false, true,
-                  INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                  INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD1.get());
-              bindPasswordArg.addValue(arg.getValue());
-              commandBuilder.addObfuscatedArgument(bindPasswordArg);
+              commandBuilder.addObfuscatedArgument(getBindPassword1Arg(arg));
             }
           }
         }
         else if (OPTION_LONG_BINDDN.equals(arg.getLongIdentifier()))
         {
-          StringArgument bindDN = new StringArgument("bindDN1",
-              OPTION_SHORT_BINDDN,
-              "bindDN1", false, false, true, INFO_BINDDN_PLACEHOLDER.get(),
-              "cn=Directory Manager", null,
-              INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN1.get());
-          bindDN.addValue(uData.getBindDn1());
-          commandBuilder.addArgument(bindDN);
+          commandBuilder.addArgument(getBindDN1Arg(uData));
         }
         else if (OPTION_LONG_BINDPWD.equals(arg.getLongIdentifier()))
         {
           if (useAdminUID)
           {
             adminInformationAdded = true;
-            StringArgument bindPasswordArg = new StringArgument("adminPassword",
-                OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
-                INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
-            bindPasswordArg.addValue(arg.getValue());
-            commandBuilder.addObfuscatedArgument(bindPasswordArg);
+            commandBuilder.addObfuscatedArgument(getAdminPasswordArg(arg));
           }
           else
           {
-            StringArgument bindPasswordArg = new StringArgument("bindPassword1",
-                null, "bindPassword1", false, false, true,
-                INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD1.get());
-            bindPasswordArg.addValue(arg.getValue());
-            commandBuilder.addObfuscatedArgument(bindPasswordArg);
+            commandBuilder.addObfuscatedArgument(getBindPassword1Arg(arg));
           }
         }
         else if (OPTION_LONG_BINDPWD_FILE.equals(arg.getLongIdentifier()))
         {
           if (useAdminUID)
           {
-            FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                "adminPasswordFile",
-                OPTION_SHORT_BINDPWD_FILE, "adminPasswordFile", false, false,
-                INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORDFILE.get());
-            bindPasswordFileArg.getNameToValueMap().putAll(
-                ((FileBasedArgument)arg).getNameToValueMap());
-            commandBuilder.addArgument(bindPasswordFileArg);
+            commandBuilder.addArgument(getAdminPasswordFileArg(arg));
           }
           else
           {
-            FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                "bindPasswordFile1",
-                null, "bindPasswordFile1", false, false,
-                INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE1.get());
+            FileBasedArgument bindPasswordFileArg = getBindPasswordFile1Arg();
             bindPasswordFileArg.getNameToValueMap().putAll(
                 ((FileBasedArgument)arg).getNameToValueMap());
             commandBuilder.addArgument(bindPasswordFileArg);
@@ -9203,14 +8994,7 @@
             adminInformationAdded = true;
           }
 
-          if (firstServerCommandBuilder.isObfuscated(arg))
-          {
-            commandBuilder.addObfuscatedArgument(arg);
-          }
-          else
-          {
-            commandBuilder.addArgument(arg);
-          }
+          addArgument(commandBuilder, arg, firstServerCommandBuilder.isObfuscated(arg));
         }
       }
     }
@@ -9219,23 +9003,8 @@
     if (ci != null && ci.getCommandBuilder() != null)
     {
       CommandBuilder interactionBuilder = ci.getCommandBuilder();
-      boolean useAdminUID = false;
-      boolean hasBindDN = false;
-      for (Argument arg : interactionBuilder.getArguments())
-      {
-        if (OPTION_LONG_ADMIN_UID.equals(arg.getLongIdentifier()))
-        {
-          useAdminUID = true;
-        }
-        else if (OPTION_LONG_BINDDN.equals(arg.getLongIdentifier()))
-        {
-          hasBindDN = true;
-        }
-        if (useAdminUID && hasBindDN)
-        {
-          break;
-        }
-      }
+      boolean useAdminUID = existsArg(interactionBuilder, OPTION_LONG_ADMIN_UID);
+      boolean hasBindDN = existsArg(interactionBuilder, OPTION_LONG_BINDDN);
 //    This is required when both the bindDN and the admin UID are provided
       // in the command-line.
       boolean forceAddBindDN2 = false;
@@ -9246,17 +9015,10 @@
         String adminUID = uData.getAdminUid();
         if (bindDN2 != null
             && adminUID != null
-            && !areDnsEqual(ADSContext.getAdministratorDN(adminUID), bindDN2))
+            && !areDnsEqual(getAdministratorDN(adminUID), bindDN2))
         {
           forceAddBindDN2 = true;
-          for (Argument arg : interactionBuilder.getArguments())
-          {
-            if (arg.getLongIdentifier().equals(OPTION_LONG_BINDPWD_FILE))
-            {
-              forceAddBindPwdFile2 = true;
-              break;
-            }
-          }
+          forceAddBindPwdFile2 = existsArg(interactionBuilder, OPTION_LONG_BINDPWD_FILE);
         }
       }
       ArrayList<Argument> argsToAnalyze = new ArrayList<Argument>();
@@ -9264,82 +9026,44 @@
       {
         if (OPTION_LONG_HOST.equals(arg.getLongIdentifier()))
         {
-          StringArgument host = new StringArgument("host2", 'O',
-              "host2", false, false, true, INFO_HOST_PLACEHOLDER.get(),
-              null,
-              null, INFO_DESCRIPTION_ENABLE_REPLICATION_HOST2.get());
-          host.addValue(uData.getHostName2());
-          commandBuilder.addArgument(host);
+          commandBuilder.addArgument(getHostArg("host2", 'O', uData.getHostName2(),
+              INFO_DESCRIPTION_ENABLE_REPLICATION_HOST2));
         }
         else if (OPTION_LONG_PORT.equals(arg.getLongIdentifier()))
         {
-          IntegerArgument port = new IntegerArgument("port2", null, "port2",
-              false, false, true, INFO_PORT_PLACEHOLDER.get(), 4444, null,
-              INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT2.get());
-          port.addValue(String.valueOf(uData.getPort2()));
-          commandBuilder.addArgument(port);
+          commandBuilder.addArgument(getPortArg("port2", null, uData.getPort2(),
+              INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT2));
 
           if (forceAddBindDN2)
           {
-            StringArgument bindDN = new StringArgument("bindDN2",
-                OPTION_SHORT_BINDDN,
-                "bindDN2", false, false, true, INFO_BINDDN_PLACEHOLDER.get(),
-                "cn=Directory Manager", null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN2.get());
-            bindDN.addValue(uData.getBindDn2());
-            commandBuilder.addArgument(bindDN);
+            commandBuilder.addArgument(getBindDN2Arg(uData, OPTION_SHORT_BINDDN));
             if (forceAddBindPwdFile2)
             {
-              FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                  "bindPasswordFile2",
-                  null, "bindPasswordFile2", false, false,
-                  INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                  INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE2.get());
+              FileBasedArgument bindPasswordFileArg = getBindPasswordFile2Arg();
               bindPasswordFileArg.getNameToValueMap().put("{password file}",
                   "{password file}");
               commandBuilder.addArgument(bindPasswordFileArg);
             }
             else
             {
-              StringArgument bindPasswordArg = new StringArgument(
-                  "bindPassword2",
-                  null, "bindPassword2", false, false, true,
-                  INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                  INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD2.get());
-              bindPasswordArg.addValue(arg.getValue());
-              commandBuilder.addObfuscatedArgument(bindPasswordArg);
+              commandBuilder.addObfuscatedArgument(getBindPassword2Arg(arg));
             }
           }
         }
         else if (OPTION_LONG_BINDDN.equals(arg.getLongIdentifier()))
         {
-          StringArgument bindDN = new StringArgument("bindDN2", null,
-              "bindDN2", false, false, true, INFO_BINDDN_PLACEHOLDER.get(),
-              "cn=Directory Manager", null,
-              INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN2.get());
-          bindDN.addValue(uData.getBindDn2());
-          commandBuilder.addArgument(bindDN);
+          commandBuilder.addArgument(getBindDN2Arg(uData, null));
         }
         else if (OPTION_LONG_BINDPWD.equals(arg.getLongIdentifier()))
         {
           if (useAdminUID && !adminInformationAdded)
           {
             adminInformationAdded = true;
-            StringArgument bindPasswordArg = new StringArgument("adminPassword",
-                OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
-                INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
-            bindPasswordArg.addValue(arg.getValue());
-            commandBuilder.addObfuscatedArgument(bindPasswordArg);
+            commandBuilder.addObfuscatedArgument(getAdminPasswordArg(arg));
           }
           else if (hasBindDN)
           {
-            StringArgument bindPasswordArg = new StringArgument("bindPassword2",
-                null, "bindPassword2", false, false, true,
-                INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD2.get());
-            bindPasswordArg.addValue(arg.getValue());
-            commandBuilder.addObfuscatedArgument(bindPasswordArg);
+            commandBuilder.addObfuscatedArgument(getBindPassword2Arg(arg));
           }
         }
         else if (OPTION_LONG_BINDPWD_FILE.equals(arg.getLongIdentifier()))
@@ -9347,22 +9071,11 @@
           if (useAdminUID && !adminInformationAdded)
           {
             adminInformationAdded = true;
-            FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                "adminPasswordFile",
-                OPTION_SHORT_BINDPWD_FILE, "adminPasswordFile", false, false,
-                INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORDFILE.get());
-            bindPasswordFileArg.getNameToValueMap().putAll(
-                ((FileBasedArgument)arg).getNameToValueMap());
-            commandBuilder.addArgument(bindPasswordFileArg);
+            commandBuilder.addArgument(getAdminPasswordFileArg(arg));
           }
           else if (hasBindDN)
           {
-            FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-                "bindPasswordFile2",
-                null, "bindPasswordFile2", false, false,
-                INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-                INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE2.get());
+            FileBasedArgument bindPasswordFileArg = getBindPasswordFile2Arg();
             bindPasswordFileArg.getNameToValueMap().putAll(
                 ((FileBasedArgument)arg).getNameToValueMap());
             commandBuilder.addArgument(bindPasswordFileArg);
@@ -9377,26 +9090,9 @@
       for (Argument arg : argsToAnalyze)
       {
         // Just check that the arguments have not already been added.
-        boolean found = false;
-        for (Argument a : commandBuilder.getArguments())
+        if (!existsArg(commandBuilder, arg.getLongIdentifier()))
         {
-          if (a.getLongIdentifier().equals(arg.getLongIdentifier()))
-          {
-            found = true;
-            break;
-          }
-        }
-
-        if (!found)
-        {
-          if (interactionBuilder.isObfuscated(arg))
-          {
-            commandBuilder.addObfuscatedArgument(arg);
-          }
-          else
-          {
-            commandBuilder.addArgument(arg);
-          }
+          addArgument(commandBuilder, arg, interactionBuilder.isObfuscated(arg));
         }
       }
     }
@@ -9404,13 +9100,13 @@
     // Try to add the new administration information.
     if (!adminInformationAdded)
     {
-      StringArgument adminUID = new StringArgument(OPTION_LONG_ADMIN_UID, 'I',
-          OPTION_LONG_ADMIN_UID, false, false, true,
-          INFO_ADMINUID_PLACEHOLDER.get(),
-          Constants.GLOBAL_ADMIN_UID, null,
-          INFO_DESCRIPTION_REPLICATION_ADMIN_UID.get(ENABLE_REPLICATION_SUBCMD_NAME));
       if (uData.getAdminUid() != null)
       {
+        StringArgument adminUID = new StringArgument(OPTION_LONG_ADMIN_UID, 'I',
+            OPTION_LONG_ADMIN_UID, false, false, true,
+            INFO_ADMINUID_PLACEHOLDER.get(),
+            Constants.GLOBAL_ADMIN_UID, null,
+            INFO_DESCRIPTION_REPLICATION_ADMIN_UID.get(ENABLE_REPLICATION_SUBCMD_NAME));
         adminUID.addValue(uData.getAdminUid());
         commandBuilder.addArgument(adminUID);
       }
@@ -9419,38 +9115,26 @@
       {
         commandBuilder.addArgument(userProvidedAdminPwdFile);
       }
-      else
+      else if (uData.getAdminPwd() != null)
       {
-        Argument bindPasswordArg = new StringArgument("adminPassword",
-            OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
-            INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-            INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
-        if (uData.getAdminPwd() != null)
-        {
-          bindPasswordArg.addValue(uData.getAdminPwd());
-          commandBuilder.addObfuscatedArgument(bindPasswordArg);
-        }
+        Argument bindPasswordArg = getAdminPasswordArg();
+        bindPasswordArg.addValue(uData.getAdminPwd());
+        commandBuilder.addObfuscatedArgument(bindPasswordArg);
       }
     }
 
     if (uData.configureReplicationServer1() &&
         !uData.configureReplicationDomain1())
     {
-      commandBuilder.addArgument(new BooleanArgument(
-          argParser.onlyReplicationServer1Arg.getName(),
-          argParser.onlyReplicationServer1Arg.getShortIdentifier(),
-          argParser.onlyReplicationServer1Arg.getLongIdentifier(),
-          INFO_DESCRIPTION_ENABLE_REPLICATION_ONLY_REPLICATION_SERVER1.get()));
+      commandBuilder.addArgument(newBooleanArgument(
+          argParser.onlyReplicationServer1Arg, INFO_DESCRIPTION_ENABLE_REPLICATION_ONLY_REPLICATION_SERVER1));
     }
 
     if (!uData.configureReplicationServer1() &&
         uData.configureReplicationDomain1())
     {
-      commandBuilder.addArgument(new BooleanArgument(
-          argParser.noReplicationServer1Arg.getName(),
-          argParser.noReplicationServer1Arg.getShortIdentifier(),
-          argParser.noReplicationServer1Arg.getLongIdentifier(),
-          INFO_DESCRIPTION_ENABLE_REPLICATION_NO_REPLICATION_SERVER1.get()));
+      commandBuilder.addArgument(newBooleanArgument(
+          argParser.noReplicationServer1Arg, INFO_DESCRIPTION_ENABLE_REPLICATION_NO_REPLICATION_SERVER1));
     }
 
     if (uData.configureReplicationServer1() &&
@@ -9475,21 +9159,15 @@
     if (uData.configureReplicationServer2() &&
         !uData.configureReplicationDomain2())
     {
-      commandBuilder.addArgument(new BooleanArgument(
-          argParser.onlyReplicationServer2Arg.getName(),
-          argParser.onlyReplicationServer2Arg.getShortIdentifier(),
-          argParser.onlyReplicationServer2Arg.getLongIdentifier(),
-          INFO_DESCRIPTION_ENABLE_REPLICATION_ONLY_REPLICATION_SERVER2.get()));
+      commandBuilder.addArgument(newBooleanArgument(
+          argParser.onlyReplicationServer2Arg, INFO_DESCRIPTION_ENABLE_REPLICATION_ONLY_REPLICATION_SERVER2));
     }
 
     if (!uData.configureReplicationServer2() &&
         uData.configureReplicationDomain2())
     {
-      commandBuilder.addArgument(new BooleanArgument(
-          argParser.noReplicationServer2Arg.getName(),
-          argParser.noReplicationServer2Arg.getShortIdentifier(),
-          argParser.noReplicationServer2Arg.getLongIdentifier(),
-          INFO_DESCRIPTION_ENABLE_REPLICATION_NO_REPLICATION_SERVER2.get()));
+      commandBuilder.addArgument(newBooleanArgument(
+          argParser.noReplicationServer2Arg, INFO_DESCRIPTION_ENABLE_REPLICATION_NO_REPLICATION_SERVER2));
     }
     if (uData.configureReplicationServer2() &&
         uData.getReplicationPort2() > 0)
@@ -9532,6 +9210,66 @@
     }
   }
 
+  private BooleanArgument newBooleanArgument(BooleanArgument arg, Arg0 msg) throws ArgumentException
+  {
+    return new BooleanArgument(arg.getName(), arg.getShortIdentifier(), arg.getLongIdentifier(), msg.get());
+  }
+
+  private StringArgument getBindPassword1Arg(Argument arg) throws ArgumentException
+  {
+    StringArgument bindPasswordArg = new StringArgument(
+        "bindPassword1", null, "bindPassword1", false, false, true,
+        INFO_BINDPWD_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD1.get());
+    bindPasswordArg.addValue(arg.getValue());
+    return bindPasswordArg;
+  }
+
+  private StringArgument getBindPassword2Arg(Argument arg) throws ArgumentException
+  {
+    StringArgument bindPasswordArg = new StringArgument(
+        "bindPassword2", null, "bindPassword2", false, false, true,
+        INFO_BINDPWD_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORD2.get());
+    bindPasswordArg.addValue(arg.getValue());
+    return bindPasswordArg;
+  }
+
+  private FileBasedArgument getBindPasswordFile1Arg() throws ArgumentException
+  {
+    return new FileBasedArgument(
+        "bindPasswordFile1", null, "bindPasswordFile1", false, false,
+        INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE1.get());
+  }
+
+  private FileBasedArgument getBindPasswordFile2Arg() throws ArgumentException
+  {
+    return new FileBasedArgument(
+        "bindPasswordFile2", null, "bindPasswordFile2", false, false,
+        INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDPASSWORDFILE2.get());
+  }
+
+  private StringArgument getBindDN1Arg(EnableReplicationUserData uData) throws ArgumentException
+  {
+    StringArgument bindDN = new StringArgument("bindDN1", OPTION_SHORT_BINDDN, "bindDN1", false, false, true,
+        INFO_BINDDN_PLACEHOLDER.get(), "cn=Directory Manager", null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN1.get());
+    bindDN.addValue(uData.getBindDn1());
+    return bindDN;
+  }
+
+  private StringArgument getBindDN2Arg(EnableReplicationUserData uData, Character shortIdentifier)
+      throws ArgumentException
+  {
+    StringArgument bindDN = new StringArgument("bindDN2", shortIdentifier, "bindDN2", false, false, true,
+        INFO_BINDDN_PLACEHOLDER.get(), "cn=Directory Manager", null,
+        INFO_DESCRIPTION_ENABLE_REPLICATION_BINDDN2.get());
+    bindDN.addValue(uData.getBindDn2());
+    return bindDN;
+  }
+
   private void updateCommandBuilder(CommandBuilder commandBuilder,
       InitializeReplicationUserData uData)
   throws ArgumentException
@@ -9545,51 +9283,25 @@
       {
         if (OPTION_LONG_HOST.equals(arg.getLongIdentifier()))
         {
-          StringArgument host = new StringArgument("hostSource", 'O',
-              "hostSource", false, false, true,
-              INFO_HOST_PLACEHOLDER.get(), null, null,
-              INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_SOURCE.get());
-          host.addValue(uData.getHostNameSource());
-          commandBuilder.addArgument(host);
+          commandBuilder.addArgument(getHostArg("hostSource", 'O', uData.getHostNameSource(),
+              INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_SOURCE));
         }
         else if (OPTION_LONG_PORT.equals(arg.getLongIdentifier()))
         {
-          IntegerArgument port = new IntegerArgument("portSource", null,
-              "portSource", false, false, true,
-              INFO_PORT_PLACEHOLDER.get(),
-              4444,
-              null,
-         INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_SOURCE.get());
-          port.addValue(String.valueOf(uData.getPortSource()));
-          commandBuilder.addArgument(port);
+          commandBuilder.addArgument(getPortArg("portSource", null, uData.getPortSource(),
+              INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_SOURCE));
         }
         else if (OPTION_LONG_BINDPWD.equals(arg.getLongIdentifier()))
         {
-          StringArgument bindPasswordArg = new StringArgument("adminPassword",
-              OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
-              INFO_BINDPWD_PLACEHOLDER.get(), null, null,
-              INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
-          bindPasswordArg.addValue(arg.getValue());
-          commandBuilder.addObfuscatedArgument(bindPasswordArg);
+          commandBuilder.addObfuscatedArgument(getAdminPasswordArg(arg));
         }
         else if (OPTION_LONG_BINDPWD_FILE.equals(arg.getLongIdentifier()))
         {
-          FileBasedArgument bindPasswordFileArg = new FileBasedArgument(
-              "adminPasswordFile",
-              OPTION_SHORT_BINDPWD_FILE, "adminPasswordFile", false, false,
-              INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
-              INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORDFILE.get());
-          bindPasswordFileArg.getNameToValueMap().putAll(
-              ((FileBasedArgument)arg).getNameToValueMap());
-          commandBuilder.addArgument(bindPasswordFileArg);
-        }
-        else if (firstServerCommandBuilder.isObfuscated(arg))
-        {
-          commandBuilder.addObfuscatedArgument(arg);
+          commandBuilder.addArgument(getAdminPasswordFileArg(arg));
         }
         else
         {
-          commandBuilder.addArgument(arg);
+          addArgument(commandBuilder, arg, firstServerCommandBuilder.isObfuscated(arg));
         }
       }
     }
@@ -9600,35 +9312,66 @@
       CommandBuilder interactionBuilder = ci.getCommandBuilder();
       for (Argument arg : interactionBuilder.getArguments())
       {
-        if (arg.getLongIdentifier().equals(OPTION_LONG_HOST))
+        if (OPTION_LONG_HOST.equals(arg.getLongIdentifier()))
         {
-          StringArgument host = new StringArgument("hostDestination", 'O',
-              "hostDestination", false, false, true,
-              INFO_HOST_PLACEHOLDER.get(),
-              null, null,
-              INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_DESTINATION.get());
-          host.addValue(uData.getHostNameDestination());
-          commandBuilder.addArgument(host);
+          commandBuilder.addArgument(getHostArg("hostDestination", 'O', uData.getHostNameDestination(),
+              INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_DESTINATION));
         }
         else if (OPTION_LONG_PORT.equals(arg.getLongIdentifier()))
         {
-          IntegerArgument port = new IntegerArgument("portDestination", null,
-              "portDestination", false, false, true,
-              INFO_PORT_PLACEHOLDER.get(),
-              4444,
-              null,
-         INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_DESTINATION.get());
-          port.addValue(String.valueOf(uData.getPortDestination()));
-          commandBuilder.addArgument(port);
+          commandBuilder.addArgument(getPortArg("portDestination", null, uData.getPortDestination(),
+              INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_DESTINATION));
         }
       }
     }
   }
 
+  private StringArgument getAdminPasswordArg(Argument arg) throws ArgumentException
+  {
+    StringArgument sArg = getAdminPasswordArg();
+    sArg.addValue(arg.getValue());
+    return sArg;
+  }
+
+  private StringArgument getAdminPasswordArg() throws ArgumentException
+  {
+    return new StringArgument("adminPassword",
+        OPTION_SHORT_BINDPWD, "adminPassword", false, false, true,
+        INFO_BINDPWD_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORD.get());
+  }
+
+  private FileBasedArgument getAdminPasswordFileArg(Argument arg) throws ArgumentException
+  {
+    FileBasedArgument fbArg = new FileBasedArgument(
+        "adminPasswordFile", OPTION_SHORT_BINDPWD_FILE, "adminPasswordFile", false, false,
+        INFO_BINDPWD_FILE_PLACEHOLDER.get(), null, null,
+        INFO_DESCRIPTION_REPLICATION_ADMIN_BINDPASSWORDFILE.get());
+    fbArg.getNameToValueMap().putAll(((FileBasedArgument) arg).getNameToValueMap());
+    return fbArg;
+  }
+
+  private IntegerArgument getPortArg(String longIdentifier, Character shortIdentifier, int value, Arg0 arg)
+      throws ArgumentException
+  {
+    IntegerArgument iArg = new IntegerArgument(longIdentifier, shortIdentifier, longIdentifier, false, false, true,
+        INFO_PORT_PLACEHOLDER.get(), 4444, null, arg.get());
+    iArg.addValue(String.valueOf(value));
+    return iArg;
+  }
+
+  private StringArgument getHostArg(String longIdentifier, char shortIdentifier, String value,
+      Arg0 description) throws ArgumentException
+  {
+    StringArgument sArg = new StringArgument(longIdentifier, shortIdentifier, longIdentifier, false, false, true,
+        INFO_HOST_PLACEHOLDER.get(), null, null, description.get());
+    sArg.addValue(value);
+    return sArg;
+  }
+
   private void updateAvailableAndReplicatedSuffixesForOneDomain(
       InitialLdapContext ctxDomain, InitialLdapContext ctxOther,
-      Collection<String> availableSuffixes,
-      Collection<String> alreadyReplicatedSuffixes)
+      Set<String> availableSuffixes, Set<String> alreadyReplicatedSuffixes)
   {
     Collection<ReplicaDescriptor> replicas = getReplicas(ctxDomain);
     int replicationPort = getReplicationPort(ctxOther);
@@ -9644,6 +9387,7 @@
         }
         availableSuffixes.add(replica.getSuffix().getDN());
       }
+
       if (!isReplicationServerConfigured)
       {
         availableSuffixes.add(replica.getSuffix().getDN());
@@ -9665,8 +9409,7 @@
 
   private void updateAvailableAndReplicatedSuffixesForNoDomain(
       InitialLdapContext ctx1, InitialLdapContext ctx2,
-      Collection<String> availableSuffixes,
-      Collection<String> alreadyReplicatedSuffixes)
+      Set<String> availableSuffixes, Set<String> alreadyReplicatedSuffixes)
   {
     int replicationPort1 = getReplicationPort(ctx1);
     boolean isReplicationServer1Configured = replicationPort1 != -1;
@@ -9736,8 +9479,7 @@
   private void updateAvailableAndReplicatedSuffixesForNoDomainOneSense(
       TopologyCache cache1, TopologyCache cache2, String replicationServer1,
       String replicationServer2,
-      Collection<String> availableSuffixes,
-      Collection<String> alreadyReplicatedSuffixes)
+      Set<String> availableSuffixes, Set<String> alreadyReplicatedSuffixes)
   {
     for (SuffixDescriptor suffix : cache1.getSuffixes())
     {
@@ -9949,7 +9691,7 @@
       print(INFO_REPLICATION_MERGING_REGISTRIES_PROGRESS.get());
       pointAdder.start();
 
-      Collection<LocalizableMessage> cache1Errors = cache1.getErrorMessages();
+      Set<LocalizableMessage> cache1Errors = cache1.getErrorMessages();
       if (!cache1Errors.isEmpty())
       {
         throw new ReplicationCliException(
@@ -9960,7 +9702,7 @@
                     ERROR_READING_ADS, null);
       }
 
-      Collection<LocalizableMessage> cache2Errors = cache2.getErrorMessages();
+      Set<LocalizableMessage> cache2Errors = cache2.getErrorMessages();
       if (!cache2Errors.isEmpty())
       {
         throw new ReplicationCliException(
@@ -10130,10 +9872,8 @@
       catch (Throwable t)
       {
         logger.error(LocalizableMessage.raw("Error seeding truststore: "+t, t));
-        String arg = (t instanceof OpenDsException) ?
-            ((OpenDsException)t).getMessageObject().toString() : t.toString();
         LocalizableMessage msg = ERR_REPLICATION_ENABLE_SEEDING_TRUSTSTORE.get(
-            getHostPort(adsCtx2.getDirContext()), getHostPort(adsCtx1.getDirContext()), arg);
+            getHostPort(adsCtx2.getDirContext()), getHostPort(adsCtx1.getDirContext()), toString(t));
         throw new ReplicationCliException(msg, ERROR_SEEDING_TRUSTORE, t);
       }
       pointAdder.stop();
@@ -10149,6 +9889,12 @@
     }
   }
 
+  private String toString(Throwable t)
+  {
+    return (t instanceof OpenDsException) ?
+        ((OpenDsException) t).getMessageObject().toString() : t.toString();
+  }
+
   private TopologyCache createTopologyCache(ADSContext adsCtx, Set<PreferredConnection> cnx)
       throws ReplicationCliException
   {
@@ -10259,6 +10005,7 @@
   }
 
   private String binDir;
+
   /**
    * Returns the binary/script directory.
    * @return the binary/script directory.
@@ -10299,9 +10046,7 @@
   }
 }
 
-/**
- * Class used to compare replication servers.
- */
+/** Class used to compare replication servers. */
 class ReplicationServerComparator implements Comparator<ServerDescriptor>
 {
   /** {@inheritDoc} */
@@ -10324,10 +10069,7 @@
   }
 }
 
-/**
- * Class used to compare suffixes.
- *
- */
+/** Class used to compare suffixes. */
 class SuffixComparator implements Comparator<SuffixDescriptor>
 {
   /** {@inheritDoc} */
@@ -10338,9 +10080,7 @@
   }
 }
 
-/**
- * Class used to compare servers.
- */
+/** Class used to compare servers. */
 class ServerComparator implements Comparator<ServerDescriptor>
 {
   /** {@inheritDoc} */

--
Gitblit v1.10.0