From 4915128605a07d7c82fda681596d4da9746e3f97 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Fri, 09 Mar 2007 19:06:23 +0000
Subject: [PATCH] Update the argument parser so that it will always treat "-?" as as request to see the usage information.  Also, allow short identifiers to be requested using a forward slash in addition to a single dash (e.g., "/?" will be treated the same as "-?").

---
 opends/src/server/org/opends/server/util/args/ArgumentParser.java |   68 +++++++++++++++++++++++++++++-----
 1 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/opends/src/server/org/opends/server/util/args/ArgumentParser.java b/opends/src/server/org/opends/server/util/args/ArgumentParser.java
index 7dfeb9f..b80ec4c 100644
--- a/opends/src/server/org/opends/server/util/args/ArgumentParser.java
+++ b/opends/src/server/org/opends/server/util/args/ArgumentParser.java
@@ -69,6 +69,9 @@
   // manner.
   private boolean longArgumentsCaseSensitive;
 
+  // Indicates whether the usage information has been displayed.
+  private boolean usageDisplayed;
+
   // The set of arguments defined for this parser, referenced by short ID.
   private HashMap<Character,Argument> shortIDMap;
 
@@ -133,6 +136,7 @@
     shortIDMap              = new HashMap<Character,Argument>();
     longIDMap               = new HashMap<String,Argument>();
     allowsTrailingArguments = false;
+    usageDisplayed          = false;
     trailingArgsDisplayName = null;
     maxTrailingArguments    = 0;
     minTrailingArguments    = 0;
@@ -194,6 +198,7 @@
     shortIDMap        = new HashMap<Character,Argument>();
     longIDMap         = new HashMap<String,Argument>();
     trailingArguments = new ArrayList<String>();
+    usageDisplayed    = false;
     rawArguments      = null;
     usageArgument     = null;
     usageOutputStream = System.out;
@@ -646,10 +651,24 @@
         Argument a = longIDMap.get(argName);
         if (a == null)
         {
-          // There is no such argument registered.
-          int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID;
-          String message = getMessage(msgID, argName);
-          throw new ArgumentException(msgID, message);
+          if (argName.equals("help"))
+          {
+            // "--help" will always be interpreted as requesting usage
+            // information.
+            try
+            {
+              getUsage(usageOutputStream);
+            } catch (Exception e) {}
+
+            return;
+          }
+          else
+          {
+            // There is no such argument registered.
+            int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID;
+            String message = getMessage(msgID, argName);
+            throw new ArgumentException(msgID, message);
+          }
         }
         else
         {
@@ -715,14 +734,14 @@
           }
         }
       }
-      else if (arg.startsWith("-"))
+      else if (arg.startsWith("-") || arg.startsWith("/"))
       {
         // This indicates that we are using the 1-character name to reference
         // the argument.  It may be in any of the following forms:
         // -n
         // -nvalue
         // -n value
-        if (arg.equals("-"))
+        if (arg.equals("-") || arg.equals("/"))
         {
           int    msgID   = MSGID_ARGPARSER_INVALID_DASH_AS_ARGUMENT;
           String message = getMessage(msgID);
@@ -745,10 +764,23 @@
         Argument a = shortIDMap.get(argCharacter);
         if (a == null)
         {
-          // There is no such argument registered.
-          int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID;
-          String message = getMessage(msgID, String.valueOf(argCharacter));
-          throw new ArgumentException(msgID, message);
+          if (argCharacter == '?')
+          {
+            // "-?" will always be interpreted as requesting usage information.
+            try
+            {
+              getUsage(usageOutputStream);
+            } catch (Exception e) {}
+
+            return;
+          }
+          else
+          {
+            // There is no such argument registered.
+            int    msgID   = MSGID_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID;
+            String message = getMessage(msgID, String.valueOf(argCharacter));
+            throw new ArgumentException(msgID, message);
+          }
         }
         else
         {
@@ -938,6 +970,7 @@
    */
   public void getUsage(StringBuilder buffer)
   {
+    usageDisplayed = true;
     if ((toolDescription != null) && (toolDescription.length() > 0))
     {
       buffer.append(wrapText(toolDescription, 79));
@@ -1141,5 +1174,20 @@
 
     outputStream.write(getBytes(buffer.toString()));
   }
+
+
+
+  /**
+   * Indicates whether the usage information has been displayed to the end user
+   * either by an explicit argument like "-H" or "--help", or by a built-in
+   * argument like "-?".
+   *
+   * @return  {@code true} if the usage information has been displayed, or
+   *          {@code false} if not.
+   */
+  public boolean usageDisplayed()
+  {
+    return usageDisplayed;
+  }
 }
 

--
Gitblit v1.10.0