From df993e4e7a2b5af0c8e0907a80e1a4cef10ee56d Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Thu, 11 Feb 2016 14:17:18 +0000
Subject: [PATCH] OPENDJSDK-42 cli arguments fluent builder

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java |   80 +++++++++++++++++++++-------------------
 1 files changed, 42 insertions(+), 38 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
index 59c2e72..f69e233 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/InstallDS.java
@@ -210,28 +210,32 @@
 
   private final BackendTypeHelper backendTypeHelper = new BackendTypeHelper();
 
+  /** The argument parser. */
+  private InstallDSArgumentParser argParser;
+
   /** Different variables we use when the user decides to provide data again. */
   private NewSuffixOptions.Type lastResetPopulateOption;
   private ManagedObjectDefinition<? extends BackendCfgClient, ? extends BackendCfg> lastResetBackendType;
-
   private String lastResetImportFile;
   private String lastResetRejectedFile;
   private String lastResetSkippedFile;
-
   private Integer lastResetNumEntries;
   private Boolean lastResetEnableSSL;
   private Boolean lastResetEnableStartTLS;
-
   private SecurityOptions.CertificateType lastResetCertType;
   private String lastResetKeyStorePath;
-
   private Boolean lastResetEnableWindowsService;
   private Boolean lastResetStartServer;
+  private String lastResetBaseDN = Installation.DEFAULT_INTERACTIVE_BASE_DN;
+  private String lastResetDirectoryManagerDN;
+  private Integer lastResetLdapPort;
+  private Integer lastResetLdapsPort;
+  private Integer lastResetAdminConnectorPort;
+  private Integer lastResetJmxPort;
+
 
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
-  /** The argument parser. */
-  private InstallDSArgumentParser argParser;
 
   /**
    * Constructor for the InstallDS object.
@@ -338,6 +342,12 @@
       return InstallReturnCode.ERROR_UNEXPECTED.getReturnCode();
     }
 
+    lastResetDirectoryManagerDN = argParser.directoryManagerDNArg.getDefaultValue();
+    lastResetLdapPort = Integer.parseInt(argParser.ldapPortArg.getDefaultValue());
+    lastResetLdapsPort = Integer.parseInt(argParser.ldapsPortArg.getDefaultValue());
+    lastResetAdminConnectorPort = Integer.parseInt(argParser.adminConnectorPortArg.getDefaultValue());
+    lastResetJmxPort = Integer.parseInt(argParser.jmxPortArg.getDefaultValue());
+
     // Validate user provided data
     try
     {
@@ -983,7 +993,7 @@
   private void promptIfRequiredForDirectoryManager(UserData uData) throws UserDataException, ClientException
   {
     final LinkedList<String> dns = promptIfRequiredForDNs(
-        argParser.directoryManagerDNArg, INFO_INSTALLDS_PROMPT_ROOT_DN.get(), true);
+            argParser.directoryManagerDNArg, lastResetDirectoryManagerDN, INFO_INSTALLDS_PROMPT_ROOT_DN.get(), true);
     uData.setDirectoryManagerDn(dns.getFirst());
 
     int nTries = 0;
@@ -1028,6 +1038,8 @@
    *
    * @param arg
    *          the Argument that the user provided to specify the DNs.
+   * @param valueToSuggest
+   *          the value to suggest by default on prompt.
    * @param promptMsg
    *          the prompt message to be displayed.
    * @param includeLineBreak
@@ -1036,8 +1048,8 @@
    * @throws UserDataException
    *           if something went wrong checking the data.
    */
-  private LinkedList<String> promptIfRequiredForDNs(StringArgument arg,
-      LocalizableMessage promptMsg, boolean includeLineBreak) throws UserDataException
+  private LinkedList<String> promptIfRequiredForDNs(StringArgument arg, String valueToSuggest,
+          LocalizableMessage promptMsg, boolean includeLineBreak) throws UserDataException
   {
     final LinkedList<String> dns = new LinkedList<>();
 
@@ -1059,7 +1071,7 @@
         }
         try
         {
-          final String dn = readInput(promptMsg, arg.getDefaultValue());
+          final String dn = readInput(promptMsg, valueToSuggest);
           firstPrompt = false;
           dns.add(dn);
           prompted = true;
@@ -1120,20 +1132,20 @@
 
     final List<Integer> usedPorts = new LinkedList<>();
     //  Determine the LDAP port number.
-    final int ldapPort = promptIfRequiredForPortData(argParser.ldapPortArg,
-        INFO_INSTALLDS_PROMPT_LDAPPORT.get(), usedPorts, true);
+    final int ldapPort = promptIfRequiredForPortData(
+            argParser.ldapPortArg, lastResetLdapPort, INFO_INSTALLDS_PROMPT_LDAPPORT.get(), usedPorts, true);
     uData.setServerPort(ldapPort);
     usedPorts.add(ldapPort);
 
     //  Determine the Admin Connector port number.
     final int adminConnectorPort = promptIfRequiredForPortData(argParser.adminConnectorPortArg,
-        INFO_INSTALLDS_PROMPT_ADMINCONNECTORPORT.get(), usedPorts, true);
+            lastResetAdminConnectorPort, INFO_INSTALLDS_PROMPT_ADMINCONNECTORPORT.get(), usedPorts, true);
     uData.setAdminConnectorPort(adminConnectorPort);
     usedPorts.add(adminConnectorPort);
 
     if (argParser.jmxPortArg.isPresent())
     {
-      final int jmxPort = promptIfRequiredForPortData(argParser.jmxPortArg,
+      final int jmxPort = promptIfRequiredForPortData(argParser.jmxPortArg, lastResetJmxPort,
           INFO_INSTALLDS_PROMPT_JMXPORT.get(), usedPorts, true);
       uData.setServerJMXPort(jmxPort);
     }
@@ -1150,6 +1162,8 @@
    *
    * @param portArg
    *          the Argument that the user provided to specify the port.
+   * @param valueToSuggest
+   *          the value to suggest by default on prompt.
    * @param promptMsg
    *          the prompt message to be displayed.
    * @param usedPorts
@@ -1159,7 +1173,7 @@
    *          whether to include a line break before the first prompt or not.
    * @return a valid port number.
    */
-  private int promptIfRequiredForPortData(IntegerArgument portArg, LocalizableMessage promptMsg,
+  private int promptIfRequiredForPortData(IntegerArgument portArg, Integer valueToSuggest, LocalizableMessage promptMsg,
       Collection<Integer> usedPorts, boolean includeLineBreak)
   {
     int portNumber = -1;
@@ -1172,11 +1186,6 @@
         boolean prompted = false;
         if (usedProvided || !portArg.isPresent())
         {
-          int defaultValue = -1;
-          if (portArg.getDefaultValue() != null)
-          {
-            defaultValue = Integer.parseInt(portArg.getDefaultValue());
-          }
           if (firstPrompt && includeLineBreak)
           {
             println();
@@ -1186,7 +1195,7 @@
           {
             try
             {
-              portNumber = readPort(promptMsg, defaultValue);
+              portNumber = readPort(promptMsg, valueToSuggest);
             }
             catch (final ClientException ce)
             {
@@ -1267,14 +1276,9 @@
     }
 
     uData.setBackendType(getOrPromptForBackendType());
-
-    // Add default value for base DN on first prompt
-    if (argParser.baseDNArg.getDefaultValue() == null)
-    {
-      argParser.baseDNArg.setDefaultValue(Installation.DEFAULT_INTERACTIVE_BASE_DN);
-    }
     // Check the validity of the base DNs
-    final List<String> baseDNs = promptIfRequiredForDNs(argParser.baseDNArg, INFO_INSTALLDS_PROMPT_BASEDN.get(), true);
+    final List<String> baseDNs = promptIfRequiredForDNs(
+            argParser.baseDNArg, lastResetBaseDN, INFO_INSTALLDS_PROMPT_BASEDN.get(), true);
     return promptIfRequiredForDataOptions(baseDNs);
 
   }
@@ -1600,8 +1604,8 @@
         enableSSL = confirmAction(INFO_INSTALLDS_PROMPT_ENABLE_SSL.get(), defaultValue);
         if (enableSSL)
         {
-          ldapsPort = promptIfRequiredForPortData(argParser.ldapsPortArg,
-              INFO_INSTALLDS_PROMPT_LDAPSPORT.get(), usedPorts, false);
+          ldapsPort = promptIfRequiredForPortData(
+                  argParser.ldapsPortArg, lastResetLdapsPort, INFO_INSTALLDS_PROMPT_LDAPSPORT.get(), usedPorts, false);
         }
       }
       catch (final ClientException ce)
@@ -1611,8 +1615,8 @@
     }
     else
     {
-      ldapsPort = promptIfRequiredForPortData(argParser.ldapsPortArg,
-          INFO_INSTALLDS_PROMPT_LDAPSPORT.get(), usedPorts, true);
+      ldapsPort = promptIfRequiredForPortData(
+              argParser.ldapsPortArg, lastResetLdapsPort, INFO_INSTALLDS_PROMPT_LDAPSPORT.get(), usedPorts, true);
       enableSSL = true;
     }
 
@@ -2541,20 +2545,20 @@
     try
     {
       argParser.initializeArguments();
-      argParser.directoryManagerDNArg.setDefaultValue(uData.getDirectoryManagerDn());
-      argParser.ldapPortArg.setDefaultValue(String.valueOf(uData.getServerPort()));
-      argParser.adminConnectorPortArg.setDefaultValue(String.valueOf(uData.getAdminConnectorPort()));
+      lastResetDirectoryManagerDN = uData.getDirectoryManagerDn();
+      lastResetLdapPort = uData.getServerPort();
+      lastResetAdminConnectorPort = uData.getAdminConnectorPort();
 
       final int jmxPort = uData.getServerJMXPort();
       if (jmxPort != -1)
       {
-        argParser.jmxPortArg.setDefaultValue(String.valueOf(jmxPort));
+        lastResetJmxPort = jmxPort;
       }
 
       final LinkedList<String> baseDNs = uData.getNewSuffixOptions().getBaseDns();
       if (!baseDNs.isEmpty())
       {
-        argParser.baseDNArg.setDefaultValue(baseDNs.getFirst());
+        lastResetBaseDN = baseDNs.getFirst();
       }
 
       final NewSuffixOptions suffixOptions = uData.getNewSuffixOptions();
@@ -2574,7 +2578,7 @@
       final SecurityOptions sec = uData.getSecurityOptions();
       if (sec.getEnableSSL())
       {
-        argParser.ldapsPortArg.setDefaultValue(String.valueOf(sec.getSslPort()));
+        lastResetLdapsPort = sec.getSslPort();
       }
       lastResetEnableSSL = sec.getEnableSSL();
       lastResetEnableStartTLS = sec.getEnableStartTLS();

--
Gitblit v1.10.0