From 27995a8327fd4af5c902ecd62e7b174383d8ec13 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 22 Jun 2007 16:00:28 +0000
Subject: [PATCH] Update the sub-command argument parser as follows:

---
 opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java |  141 ++++++++++++++++++++++++++++-------------------
 1 files changed, 84 insertions(+), 57 deletions(-)

diff --git a/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java b/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
index 7b9451f..e71d781 100644
--- a/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
+++ b/opends/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
@@ -1486,10 +1486,10 @@
       if (usageGroupArguments.size() > 1) {
         // We have sub-command groups, so don't display any
         // sub-commands by default.
-        getFullUsage(Collections.<SubCommand> emptySet(), buffer);
+        getFullUsage(Collections.<SubCommand> emptySet(), true, buffer);
       } else {
         // No grouping, so display all sub-commands.
-        getFullUsage(subCommands.values(), buffer);
+        getFullUsage(subCommands.values(), true, buffer);
       }
     } else {
       getSubCommandUsage(buffer, subCommand);
@@ -1501,6 +1501,28 @@
 
 
   /**
+   * Retrieves a string describing how the user can get more help.
+   *
+   * @return A string describing how the user can get more help.
+   */
+  public String getHelpUsageReference()
+  {
+    usageOrVersionDisplayed = true;
+    String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
+    if ((scriptName == null) || (scriptName.length() == 0))
+    {
+      scriptName = "java " + mainClassName;
+    }
+
+    StringBuilder buffer = new StringBuilder();
+    buffer.append(getMessage(MSGID_GLOBAL_HELP_REFERENCE, scriptName));
+    buffer.append(EOL);
+    return buffer.toString();
+  }
+
+
+
+  /**
    * Retrieves the set of unnamed trailing arguments that were
    * provided on the command line.
    *
@@ -1552,9 +1574,15 @@
     if (a.equals(usageArgument) && subCommand != null) {
       getSubCommandUsage(buffer, subCommand);
     } else if (a.equals(usageArgument) && usageGroupArguments.size() <= 1) {
-      getFullUsage(subCommands.values(), buffer);
+      // No groups - so display all sub-commands.
+      getFullUsage(subCommands.values(), true, buffer);
+    } else if (a.equals(usageArgument)) {
+      // Using groups - so display all sub-commands group help.
+      getFullUsage(Collections.<SubCommand> emptySet(), true, buffer);
     } else {
-      getFullUsage(usageGroupArguments.get(a), buffer);
+      // Requested help on specific group - don't display global
+      // options.
+      getFullUsage(usageGroupArguments.get(a), false, buffer);
     }
 
     outputStream.write(getBytes(buffer.toString()));
@@ -1572,7 +1600,8 @@
 
   // Appends complete usage information for the specified set of
   // sub-commands.
-  private void getFullUsage(Collection<SubCommand> c, StringBuilder buffer) {
+  private void getFullUsage(Collection<SubCommand> c,
+      boolean showGlobalOptions, StringBuilder buffer) {
     usageOrVersionDisplayed = true;
     if ((toolDescription != null) && (toolDescription.length() > 0))
     {
@@ -1598,10 +1627,18 @@
     buffer.append(EOL);
 
     if (c.isEmpty()) {
-      buffer.append("    ");
-      buffer.append(getMessage(MSGID_SUBCMDPARSER_SUBCMD_REFERENCE,
-          scriptName));
-      buffer.append(EOL);
+      // Display usage arguments (except the default one).
+      for (Argument a : globalArgumentList) {
+        if (a.isHidden()) {
+          continue;
+        }
+
+        if (usageGroupArguments.containsKey(a)) {
+          if (!a.equals(usageArgument)) {
+            printArgumentUsage(a, buffer);
+          }
+        }
+      }
     } else {
       int indentNb = 0;
       for (SubCommand sc : c) {
@@ -1627,67 +1664,57 @@
     }
 
     buffer.append(EOL);
-    buffer.append(getMessage(MSGID_SUBCMDPARSER_GLOBAL_HEADING));
-    buffer.append(EOL);
 
-    // --version is a builtin option
-    boolean dashVAccepted = true;
-    if (globalShortIDMap.containsKey(OPTION_SHORT_PRODUCT_VERSION))
-    {
-      dashVAccepted = false;
-    }
-    else
-    {
-      for (SubCommand subCmd : subCommands.values())
+    if (showGlobalOptions) {
+      buffer.append(getMessage(MSGID_SUBCMDPARSER_GLOBAL_HEADING));
+      buffer.append(EOL);
+
+      // --version is a builtin option
+      boolean dashVAccepted = true;
+      if (globalShortIDMap.containsKey(OPTION_SHORT_PRODUCT_VERSION))
       {
-        if (subCmd.getArgument(OPTION_SHORT_PRODUCT_VERSION) != null)
+        dashVAccepted = false;
+      }
+      else
+      {
+        for (SubCommand subCmd : subCommands.values())
         {
-          dashVAccepted = false;
-          break;
+          if (subCmd.getArgument(OPTION_SHORT_PRODUCT_VERSION) != null)
+          {
+            dashVAccepted = false;
+            break;
+          }
         }
       }
-    }
-    if (dashVAccepted)
-    {
-      buffer.append("-" + OPTION_SHORT_PRODUCT_VERSION + ", ");
-    }
-    buffer.append("--" + OPTION_LONG_PRODUCT_VERSION);
-    buffer.append(EOL);
-    buffer.append("    ");
-    buffer.append( getMessage(MSGID_DESCRIPTION_PRODUCT_VERSION));
-    buffer.append(EOL);
-
-    // Display non-usage arguments.
-    for (Argument a : globalArgumentList) {
-      if (a.isHidden()) {
-        continue;
+      if (dashVAccepted)
+      {
+        buffer.append("-" + OPTION_SHORT_PRODUCT_VERSION + ", ");
       }
+      buffer.append("--" + OPTION_LONG_PRODUCT_VERSION);
+      buffer.append(EOL);
+      buffer.append("    ");
+      buffer.append( getMessage(MSGID_DESCRIPTION_PRODUCT_VERSION));
+      buffer.append(EOL);
 
-      if (!usageGroupArguments.containsKey(a)) {
-        printArgumentUsage(a, buffer);
-      }
-    }
+      // Display non-usage arguments.
+      for (Argument a : globalArgumentList) {
+        if (a.isHidden()) {
+          continue;
+        }
 
-    // Display usage arguments (except the default one).
-    for (Argument a : globalArgumentList) {
-      if (a.isHidden()) {
-        continue;
-      }
-
-      if (usageGroupArguments.containsKey(a)) {
-        if (!a.equals(usageArgument)) {
+        if (!usageGroupArguments.containsKey(a)) {
           printArgumentUsage(a, buffer);
         }
       }
-    }
 
-    // Finally print default usage argument.
-    if (usageArgument != null) {
-      printArgumentUsage(usageArgument, buffer);
-    } else {
-      buffer.append("-?");
+      // Finally print default usage argument.
+      if (usageArgument != null) {
+        printArgumentUsage(usageArgument, buffer);
+      } else {
+        buffer.append("-?");
+      }
+      buffer.append(EOL);
     }
-    buffer.append(EOL);
   }
 
 

--
Gitblit v1.10.0