From b1693fdfd35f1c5c9c178d98d59cca54c71ebe4a Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 11 Feb 2009 03:29:00 +0000
Subject: [PATCH] Add options displayCommand and commandFilePath to the dsreplication command-line.  These options display the equivalent non-interactive command-line when dsreplication is run in interactive mode (they are the same options already provided by dsconfig).  The WIKI content has already been updated to reflect these changes.

---
 opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java |  127 +++++++++++++++++++++++++++++++----------
 1 files changed, 95 insertions(+), 32 deletions(-)

diff --git a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
index c115368..cd7abac 100644
--- a/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
+++ b/opends/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
@@ -31,6 +31,7 @@
 import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.tools.ToolConstants.*;
 
+import java.io.File;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -66,7 +67,10 @@
   private SubCommand preExternalInitializationSubCmd;
   private SubCommand statusReplicationSubCmd;
 
-  private BooleanArgument noPromptArg;
+  /**
+   * No-prompt argument.
+   */
+  BooleanArgument noPromptArg;
 
   private String defaultLocalHostValue;
 
@@ -88,22 +92,22 @@
   /**
    * The 'bindPasswordFile' argument for the first server.
    */
-  private FileBasedArgument bindPasswordFile1Arg = null;
+  FileBasedArgument bindPasswordFile1Arg = null;
 
   /**
    * The 'bindPassword' argument for the first server.
    */
-  private StringArgument bindPassword1Arg = null;
+  StringArgument bindPassword1Arg = null;
 
   /**
    * The 'replicationPort' argument for the first server.
    */
-  private IntegerArgument replicationPort1Arg = null;
+  IntegerArgument replicationPort1Arg = null;
 
   /**
    * The 'secureReplication' argument for the first server.
    */
-  private BooleanArgument secureReplication1Arg = null;
+  BooleanArgument secureReplication1Arg = null;
 
   /**
    * The 'hostName' argument for the second server.
@@ -123,12 +127,12 @@
   /**
    * The 'bindPasswordFile' argument for the second server.
    */
-  private FileBasedArgument bindPasswordFile2Arg = null;
+  FileBasedArgument bindPasswordFile2Arg = null;
 
   /**
    * The 'bindPassword' argument for the second server.
    */
-  private StringArgument bindPassword2Arg = null;
+  StringArgument bindPassword2Arg = null;
 
   /**
    * The 'replicationPort' argument for the second server.
@@ -148,7 +152,7 @@
   /**
    * The 'noSchemaReplication' argument to not replicate schema.
    */
-  private BooleanArgument noSchemaReplicationArg;
+  BooleanArgument noSchemaReplicationArg;
 
   /**
    * The 'useSecondServerAsSchemaSource' argument to not replicate schema.
@@ -189,12 +193,34 @@
   /**
    * The 'quiet' argument.
    */
-  private BooleanArgument quietArg;
+  BooleanArgument quietArg;
 
   /**
    * The 'scriptFriendly' argument.
    */
-  private BooleanArgument scriptFriendlyArg;
+  BooleanArgument scriptFriendlyArg;
+
+  /**
+   * Properties file argument.
+   */
+  StringArgument propertiesFileArgument;
+
+  /**
+   * No-properties file argument.
+   */
+  BooleanArgument noPropertiesFileArgument;
+
+  /**
+   * The argument that the user must set to display the equivalent
+   * non-interactive mode argument.
+   */
+  BooleanArgument displayEquivalentArgument;
+
+  /**
+   * The argument that allows the user to dump the equivalent non-interactive
+   * command to a file.
+   */
+  StringArgument equivalentCommandFileArgument;
 
   /**
    * The text of the enable replication subcommand.
@@ -307,6 +333,28 @@
       errors.add(message);
     }
 
+    // Check that we can write on the provided path where we write the
+    // equivalent non-interactive commands.
+    if (equivalentCommandFileArgument.isPresent())
+    {
+      String file = equivalentCommandFileArgument.getValue();
+      if (!Utils.canWrite(file))
+      {
+        errors.add(
+            ERR_REPLICATION_CANNOT_WRITE_EQUIVALENT_COMMAND_LINE_FILE.get(
+                file));
+      }
+      else
+      {
+        File f = new File(file);
+        if (f.isDirectory())
+        {
+          errors.add(
+              ERR_REPLICATION_EQUIVALENT_COMMAND_LINE_FILE_DIRECTORY.get(file));
+        }
+      }
+    }
+
     if (!isInteractive())
     {
       // Check that we have the required data
@@ -379,8 +427,8 @@
     {
       defaultArgs.remove(argsToRemove[i]);
     }
-    defaultArgs.remove(noPropertiesFileArg);
-    defaultArgs.remove(propertiesFileArg);
+    defaultArgs.remove(super.noPropertiesFileArg);
+    defaultArgs.remove(super.propertiesFileArg);
     // Remove it from the default location and redefine it.
     defaultArgs.remove(secureArgsList.adminUidArg);
 
@@ -394,11 +442,12 @@
     defaultArgs.add(index++, baseDNsArg);
 
     secureArgsList.adminUidArg = new StringArgument("adminUID", 'I',
-        "adminUID", false, false, true, INFO_ADMINUID_PLACEHOLDER.get(),
+        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));
-    secureArgsList.adminUidArg.setPropertyName("adminUID");
+    secureArgsList.adminUidArg.setPropertyName(OPTION_LONG_ADMIN_UID);
     secureArgsList.adminUidArg.setHidden(false);
     defaultArgs.add(index++, secureArgsList.adminUidArg);
 
@@ -416,6 +465,14 @@
     defaultArgs.add(index++, secureArgsList.bindPasswordFileArg);
 
     defaultArgs.remove(verboseArg);
+
+    quietArg = new BooleanArgument(
+        OPTION_LONG_QUIET,
+        OPTION_SHORT_QUIET,
+        OPTION_LONG_QUIET,
+        INFO_REPLICATION_DESCRIPTION_QUIET.get());
+    defaultArgs.add(index++, quietArg);
+
     noPromptArg = new BooleanArgument(
         OPTION_LONG_NO_PROMPT,
         OPTION_SHORT_NO_PROMPT,
@@ -423,32 +480,37 @@
         INFO_DESCRIPTION_NO_PROMPT.get());
     defaultArgs.add(index++, noPromptArg);
 
+    displayEquivalentArgument = new BooleanArgument(
+        OPTION_DSCFG_LONG_DISPLAY_EQUIVALENT,
+        null, OPTION_DSCFG_LONG_DISPLAY_EQUIVALENT,
+        INFO_REPLICATION_DESCRIPTION_DISPLAY_EQUIVALENT.get());
+    defaultArgs.add(index++, displayEquivalentArgument);
+
+    equivalentCommandFileArgument = new StringArgument(
+        OPTION_LONG_EQUIVALENT_COMMAND_FILE_PATH, null,
+        OPTION_LONG_EQUIVALENT_COMMAND_FILE_PATH, false, false, true,
+        INFO_PATH_PLACEHOLDER.get(), null, null,
+        INFO_REPLICATION_DESCRIPTION_EQUIVALENT_COMMAND_FILE_PATH.get());
+    defaultArgs.add(index++, equivalentCommandFileArgument);
+
     for (int i=0; i<index; i++)
     {
       Argument arg = defaultArgs.get(i);
       arg.setPropertyName(arg.getLongIdentifier());
     }
 
-    quietArg = new BooleanArgument(
-        OPTION_LONG_QUIET,
-        OPTION_SHORT_QUIET,
-        OPTION_LONG_QUIET,
-        INFO_REPLICATION_DESCRIPTION_QUIET.get());
-    quietArg.setPropertyName(OPTION_LONG_QUIET);
-    defaultArgs.add(quietArg);
-
-    StringArgument propertiesFileArgument = new StringArgument(
+    this.propertiesFileArgument = new StringArgument(
         "propertiesFilePath", null, OPTION_LONG_PROP_FILE_PATH, false, false,
         true, INFO_PROP_FILE_PATH_PLACEHOLDER.get(), null, null,
         INFO_DESCRIPTION_PROP_FILE_PATH.get());
-    defaultArgs.add(propertiesFileArgument);
-    setFilePropertiesArgument(propertiesFileArgument);
+    defaultArgs.add(this.propertiesFileArgument);
+    setFilePropertiesArgument(this.propertiesFileArgument);
 
-    BooleanArgument noPropertiesFileArgument = new BooleanArgument(
+    this.noPropertiesFileArgument = new BooleanArgument(
         "noPropertiesFileArgument", null, OPTION_LONG_NO_PROP_FILE,
         INFO_DESCRIPTION_NO_PROP_FILE.get());
-    defaultArgs.add(noPropertiesFileArgument);
-    setNoPropertiesFileArgument(noPropertiesFileArgument);
+    defaultArgs.add(this.noPropertiesFileArgument);
+    setNoPropertiesFileArgument(this.noPropertiesFileArgument);
 
     initializeGlobalArguments(defaultArgs);
   }
@@ -467,7 +529,7 @@
         null, INFO_DESCRIPTION_ENABLE_REPLICATION_HOST1.get());
 
     port1Arg = new IntegerArgument("port1", OPTION_SHORT_PORT, "port1",
-        false, false, true, INFO_PORT_PLACEHOLDER.get(), 389, null,
+        false, false, true, INFO_PORT_PLACEHOLDER.get(), 4444, null,
         INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT1.get());
 
     bindDn1Arg = new StringArgument("bindDN1", OPTION_SHORT_BINDDN,
@@ -500,7 +562,7 @@
         null, INFO_DESCRIPTION_ENABLE_REPLICATION_HOST2.get());
 
     port2Arg = new IntegerArgument("port2", null, "port2",
-        false, false, true, INFO_PORT_PLACEHOLDER.get(), 389, null,
+        false, false, true, INFO_PORT_PLACEHOLDER.get(), 4444, null,
         INFO_DESCRIPTION_ENABLE_REPLICATION_SERVER_PORT2.get());
 
     bindDn2Arg = new StringArgument("bindDN2", null,
@@ -597,7 +659,7 @@
         INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_SOURCE.get());
 
     portSourceArg = new IntegerArgument("portSource", OPTION_SHORT_PORT,
-        "portSource", false, false, true, INFO_PORT_PLACEHOLDER.get(), 389,
+        "portSource", false, false, true, INFO_PORT_PLACEHOLDER.get(), 4444,
         null,
         INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_SOURCE.get());
 
@@ -607,7 +669,8 @@
         INFO_DESCRIPTION_INITIALIZE_REPLICATION_HOST_DESTINATION.get());
 
     portDestinationArg = new IntegerArgument("portDestination", null,
-        "portDestination", false, false, true, INFO_PORT_PLACEHOLDER.get(), 389,
+        "portDestination", false, false, true, INFO_PORT_PLACEHOLDER.get(),
+        4444,
         null,
         INFO_DESCRIPTION_INITIALIZE_REPLICATION_SERVER_PORT_DESTINATION.get());
 

--
Gitblit v1.10.0