From dfcb1b5674ba90e20a12c34c45016920531b1a44 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 20 Jan 2015 14:17:43 +0000
Subject: [PATCH] More code cleanup

---
 opendj-cli/src/test/java/com/forgerock/opendj/cli/TestSubCommandArgumentParserTestCase.java |   20 +-
 opendj3-server-dev/src/server/org/opends/server/util/Base64.java                            |    3 
 opendj-cli/src/main/java/com/forgerock/opendj/cli/ConnectionFactoryProvider.java            |   51 +++-----
 opendj-cli/src/main/java/com/forgerock/opendj/cli/SubCommandArgumentParser.java             |  108 ++++-------------
 opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentParser.java                       |  166 ++++++++------------------
 5 files changed, 109 insertions(+), 239 deletions(-)

diff --git a/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentParser.java b/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentParser.java
index 8f59c5a..25a46b2 100644
--- a/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentParser.java
+++ b/opendj-cli/src/main/java/com/forgerock/opendj/cli/ArgumentParser.java
@@ -157,20 +157,20 @@
     private String[] rawArguments;
 
     /** Set of argument groups. */
-    protected Set<ArgumentGroup> argumentGroups;
+    protected final Set<ArgumentGroup> argumentGroups = new TreeSet<ArgumentGroup>();
 
     /**
      * Group for arguments that have not been explicitly grouped. These will
      * appear at the top of the usage statement without a header.
      */
-    private final ArgumentGroup defaultArgGroup = new ArgumentGroup(LocalizableMessage.EMPTY,
-            Integer.MAX_VALUE);
+    private final ArgumentGroup defaultArgGroup = new ArgumentGroup(
+            LocalizableMessage.EMPTY, Integer.MAX_VALUE);
 
     /**
      * Group for arguments that are related to connection through LDAP. This
      * includes options like the bind DN, the port, etc.
      */
-    private final ArgumentGroup ldapArgGroup = new ArgumentGroup(
+    final ArgumentGroup ldapArgGroup = new ArgumentGroup(
             INFO_DESCRIPTION_LDAP_CONNECTION_ARGS.get(), Integer.MIN_VALUE + 2);
 
     /**
@@ -178,15 +178,15 @@
      * properties file, no-prompt etc. These will appear toward the bottom of
      * the usage statement.
      */
-    protected final ArgumentGroup ioArgGroup = new ArgumentGroup(INFO_DESCRIPTION_IO_ARGS.get(),
-            Integer.MIN_VALUE + 1);
+    private final ArgumentGroup ioArgGroup = new ArgumentGroup(
+            INFO_DESCRIPTION_IO_ARGS.get(), Integer.MIN_VALUE + 1);
 
     /**
      * Group for arguments that are general like help, version etc. These will
      * appear at the end of the usage statement.
      */
-    private final ArgumentGroup generalArgGroup = new ArgumentGroup(INFO_DESCRIPTION_GENERAL_ARGS
-            .get(), Integer.MIN_VALUE);
+    private final ArgumentGroup generalArgGroup = new ArgumentGroup(
+            INFO_DESCRIPTION_GENERAL_ARGS.get(), Integer.MIN_VALUE);
 
     private static final String INDENT = "    ";
 
@@ -273,22 +273,6 @@
      *             has already been defined.
      */
     public void addArgument(final Argument argument) throws ArgumentException {
-        addArgument(argument, null);
-    }
-
-    /**
-     * Adds the provided argument to the set of arguments handled by this
-     * parser.
-     *
-     * @param argument
-     *            The argument to be added.
-     * @param group
-     *            The argument group to which the argument belongs.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another argument that
-     *             has already been defined.
-     */
-    public void addArgument(final Argument argument, ArgumentGroup group) throws ArgumentException {
         final Character shortID = argument.getShortIdentifier();
         if (shortID != null && shortIDMap.containsKey(shortID)) {
             final String conflictingName = shortIDMap.get(shortID).getName();
@@ -332,9 +316,7 @@
 
         argumentList.add(argument);
 
-        if (group == null) {
-            group = getStandardGroup(argument);
-        }
+        final ArgumentGroup group = getStandardGroup(argument);
         group.addArgument(argument);
         argumentGroups.add(group);
     }
@@ -345,62 +327,6 @@
     }
 
     /**
-     * Adds the provided argument to the set of arguments handled by this parser
-     * and puts the argument in the default group.
-     *
-     * @param argument
-     *            The argument to be added.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another argument that
-     *             has already been defined.
-     */
-    protected void addDefaultArgument(final Argument argument) throws ArgumentException {
-        addArgument(argument, defaultArgGroup);
-    }
-
-    /**
-     * Adds the provided argument to the set of arguments handled by this parser
-     * and puts the argument in the general group.
-     *
-     * @param argument
-     *            The argument to be added.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another argument that
-     *             has already been defined.
-     */
-    void addGeneralArgument(final Argument argument) throws ArgumentException {
-        addArgument(argument, generalArgGroup);
-    }
-
-    /**
-     * Adds the provided argument to the set of arguments handled by this parser
-     * and puts the argument in the input/output group.
-     *
-     * @param argument
-     *            The argument to be added.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another argument that
-     *             has already been defined.
-     */
-    public void addInputOutputArgument(final Argument argument) throws ArgumentException {
-        addArgument(argument, ioArgGroup);
-    }
-
-    /**
-     * Adds the provided argument to the set of arguments handled by this parser
-     * and puts the argument in the LDAP connection group.
-     *
-     * @param argument
-     *            The argument to be added.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another argument that
-     *             has already been defined.
-     */
-    public void addLdapConnectionArgument(final Argument argument) throws ArgumentException {
-        addArgument(argument, ldapArgGroup);
-    }
-
-    /**
      * Indicates whether this parser will allow unnamed trailing arguments.
      * These will be arguments at the end of the list that are not preceded by
      * either a long or short identifier and will need to be manually parsed by
@@ -752,7 +678,7 @@
                 }
 
                 // Help argument should be printed at the end
-                if (usageArgument != null && usageArgument.getName().equals(a.getName())) {
+                if (isUsageArgument(a)) {
                     helpArgument = a;
                     continue;
                 }
@@ -778,6 +704,16 @@
     }
 
     /**
+     * Returns whether the provided argument is the usage argument.
+     *
+     * @param a the argument to test
+     * @return true if the provided argument is the usage argument, false otherwise
+     */
+    boolean isUsageArgument(final Argument a) {
+        return usageArgument != null && usageArgument.getName().equals(a.getName());
+    }
+
+    /**
      * Retrieves a message containing usage information based on the defined
      * arguments.
      *
@@ -906,8 +842,7 @@
                     // token.
                 } else if (equalPos == 0) {
                     // The argument starts with "--=", which is not acceptable.
-                    final LocalizableMessage message = ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
-                    throw new ArgumentException(message);
+                    throw new ArgumentException(ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg));
                 } else {
                     // The argument is in the form --name=value, so parse them
                     // both out.
@@ -931,8 +866,7 @@
                         writeToUsageOutputStream(getUsage());
                         return;
                     } else if (versionHandler != null && OPTION_LONG_PRODUCT_VERSION.equals(argName)) {
-                        // "--version" will always be interpreted as requesting
-                        // version information.
+                        // "--version" will always be interpreted as requesting version information.
                         printVersion();
                         return;
                     } else {
@@ -945,7 +879,7 @@
 
                     // If this is the usage argument, then immediately stop and
                     // print usage information.
-                    if (usageArgument != null && usageArgument.getName().equals(a.getName())) {
+                    if (isUsageArgument(a)) {
                         writeToUsageOutputStream(getUsage());
                         return;
                     }
@@ -1019,7 +953,7 @@
 
                     // If this is the usage argument, then immediately stop and
                     // print usage information.
-                    if (usageArgument != null && usageArgument.getName().equals(a.getName())) {
+                    if (isUsageArgument(a)) {
                         writeToUsageOutputStream(getUsage());
                         return;
                     }
@@ -1074,7 +1008,7 @@
 
                             // If this is the usage argument,
                             // then immediately stop and print usage information.
-                            if (usageArgument != null && usageArgument.getName().equals(b.getName())) {
+                            if (isUsageArgument(b)) {
                                 writeToUsageOutputStream(getUsage());
                                 return;
                             }
@@ -1338,7 +1272,6 @@
     }
 
     private void initGroups() {
-        this.argumentGroups = new TreeSet<ArgumentGroup>();
         this.argumentGroups.add(defaultArgGroup);
         this.argumentGroups.add(ldapArgGroup);
         this.argumentGroups.add(generalArgGroup);
@@ -1415,15 +1348,36 @@
      *            The buffer to which the usage information should be appended.
      */
     private void printArgumentUsage(final Argument a, final StringBuilder buffer) {
-        // Write a line with the short and/or long identifiers that may be
-        // used for the argument.
+        printLineForShortLongArgument(a, buffer);
+
+        // Write one or more lines with the description of the argument.
+        // We will indent the description five characters and try our best to wrap
+        // at or before column 79 so it will be friendly to 80-column displays.
         final int indentLength = INDENT.length();
+        buffer.append(wrapText(a.getDescription(), MAX_LINE_WIDTH, indentLength));
+        buffer.append(EOL);
+
+        if (a.needsValue() && a.getDefaultValue() != null && a.getDefaultValue().length() > 0) {
+            buffer.append(INDENT);
+            buffer.append(INFO_ARGPARSER_USAGE_DEFAULT_VALUE.get(a.getDefaultValue()));
+            buffer.append(EOL);
+        }
+    }
+
+    /**
+     * Appends a line with the short and/or long identifiers that may be used for the argument to the provided string
+     * builder.
+     *
+     * @param a the argument for which to print a line
+     * @param buffer the string builder where to append the line
+     */
+    void printLineForShortLongArgument(final Argument a, final StringBuilder buffer) {
         final Character shortID = a.getShortIdentifier();
         final String longID = a.getLongIdentifier();
         if (shortID != null) {
             final int currentLength = buffer.length();
 
-            if (usageArgument.getName().equals(a.getName())) {
+            if (isUsageArgument(a)) {
                 buffer.append("-?, ");
             }
 
@@ -1454,7 +1408,7 @@
 
             buffer.append(EOL);
         } else if (longID != null) {
-            if (usageArgument.getName().equals(a.getName())) {
+            if (isUsageArgument(a)) {
                 buffer.append("-?, ");
             }
             buffer.append("--");
@@ -1467,33 +1421,19 @@
 
             buffer.append(EOL);
         }
-
-        // Write one or more lines with the description of the argument.
-        // We will indent the description five characters and try our best to wrap
-        // at or before column 79 so it will be friendly to 80-column displays.
-        buffer.append(wrapText(a.getDescription(), MAX_LINE_WIDTH, indentLength));
-        buffer.append(EOL);
-
-        if (a.needsValue() && a.getDefaultValue() != null && a.getDefaultValue().length() > 0) {
-            buffer.append(INDENT);
-            buffer.append(INFO_ARGPARSER_USAGE_DEFAULT_VALUE.get(a.getDefaultValue()));
-            buffer.append(EOL);
-        }
     }
 
     void normalizeArguments(final Properties argumentProperties, final List<Argument> arguments)
             throws ArgumentException {
         for (final Argument a : arguments) {
             if (!a.isPresent()
-            // See if there is a value in the properties that can be used
+                    // See if there is a value in the properties that can be used
                     && argumentProperties != null && a.getPropertyName() != null) {
                 final String value = argumentProperties.getProperty(a.getPropertyName().toLowerCase());
                 final LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
                 if (value != null) {
-                    Boolean addValue = true;
-                    if (!(a instanceof BooleanArgument)) {
-                        addValue = a.valueIsAcceptable(value, invalidReason);
-                    }
+                    boolean addValue = !(a instanceof BooleanArgument)
+                            && a.valueIsAcceptable(value, invalidReason);
                     if (addValue) {
                         a.addValue(value);
                         if (a.needsValue()) {
diff --git a/opendj-cli/src/main/java/com/forgerock/opendj/cli/ConnectionFactoryProvider.java b/opendj-cli/src/main/java/com/forgerock/opendj/cli/ConnectionFactoryProvider.java
index fb21e1b..9521e92 100644
--- a/opendj-cli/src/main/java/com/forgerock/opendj/cli/ConnectionFactoryProvider.java
+++ b/opendj-cli/src/main/java/com/forgerock/opendj/cli/ConnectionFactoryProvider.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2014 ForgeRock AS
+ *      Portions copyright 2011-2015 ForgeRock AS
  */
 package com.forgerock.opendj.cli;
 
@@ -74,19 +74,16 @@
 
     /** The 'hostName' global argument. */
     private StringArgument hostNameArg;
-
     /** The 'port' global argument. */
     private IntegerArgument portArg;
 
     /** The 'bindDN' global argument. */
     private StringArgument bindNameArg;
-
     /** The 'bindPasswordFile' global argument. */
     private FileBasedArgument bindPasswordFileArg;
 
     /** The 'password' value. */
     private char[] password;
-
     /** The 'bindPassword' global argument. */
     private StringArgument bindPasswordArg;
 
@@ -95,22 +92,17 @@
 
     /** The 'trustAllArg' global argument. */
     private BooleanArgument trustAllArg;
-
     /** The 'trustStore' global argument. */
     private StringArgument trustStorePathArg;
-
     /** The 'trustStorePassword' global argument. */
     private StringArgument trustStorePasswordArg;
-
     /** The 'trustStorePasswordFile' global argument. */
     private FileBasedArgument trustStorePasswordFileArg;
 
     /** The 'keyStore' global argument. */
     private StringArgument keyStorePathArg;
-
     /** The 'keyStorePassword' global argument. */
     private StringArgument keyStorePasswordArg;
-
     /** The 'keyStorePasswordFile' global argument. */
     private FileBasedArgument keyStorePasswordFileArg;
 
@@ -119,10 +111,8 @@
 
     /** The 'useSSLArg' global argument. */
     private BooleanArgument useSSLArg;
-
     /** The 'useStartTLSArg' global argument. */
     private BooleanArgument useStartTLSArg;
-
     /** Argument indicating a SASL option. */
     private StringArgument saslOptionArg;
 
@@ -132,9 +122,7 @@
      */
     private final BooleanArgument reportAuthzIDArg;
 
-    /**
-     * Whether to use the password policy control in the bind request.
-     */
+    /** Whether to use the password policy control in the bind request. */
     private final BooleanArgument usePasswordPolicyControlArg;
 
     /** The port number to used to connect. */
@@ -145,7 +133,6 @@
 
     /**  The basic connection factory. */
     private ConnectionFactory connFactory;
-
     /** The authenticated connection factory. */
     protected ConnectionFactory authenticatedConnFactory;
 
@@ -195,10 +182,10 @@
             final ConsoleApplication app, final String defaultBindDN, final int defaultPort,
             final boolean alwaysSSL) throws ArgumentException {
         this.app = app;
-        useSSLArg = CommonArguments.getUseSSL();
 
+        useSSLArg = CommonArguments.getUseSSL();
         if (!alwaysSSL) {
-            argumentParser.addLdapConnectionArgument(useSSLArg);
+            argumentParser.addArgument(useSSLArg);
         } else {
             // simulate that the useSSL arg has been given in the CLI
             useSSLArg.setPresent(true);
@@ -206,7 +193,7 @@
 
         useStartTLSArg = CommonArguments.getStartTLS();
         if (!alwaysSSL) {
-            argumentParser.addLdapConnectionArgument(useStartTLSArg);
+            argumentParser.addArgument(useStartTLSArg);
         }
 
         String defaultHostName;
@@ -216,7 +203,7 @@
             defaultHostName = "Unknown (" + e + ")";
         }
         hostNameArg = CommonArguments.getHostName(defaultHostName);
-        argumentParser.addLdapConnectionArgument(hostNameArg);
+        argumentParser.addArgument(hostNameArg);
 
         LocalizableMessage portDescription = INFO_DESCRIPTION_PORT.get();
         if (alwaysSSL) {
@@ -224,43 +211,43 @@
         }
 
         portArg = CommonArguments.getPort(defaultPort, portDescription);
-        argumentParser.addLdapConnectionArgument(portArg);
+        argumentParser.addArgument(portArg);
 
         bindNameArg = CommonArguments.getBindDN(defaultBindDN);
-        argumentParser.addLdapConnectionArgument(bindNameArg);
+        argumentParser.addArgument(bindNameArg);
 
         bindPasswordArg = CommonArguments.getBindPassword();
-        argumentParser.addLdapConnectionArgument(bindPasswordArg);
+        argumentParser.addArgument(bindPasswordArg);
 
         bindPasswordFileArg = CommonArguments.getBindPasswordFile();
-        argumentParser.addLdapConnectionArgument(bindPasswordFileArg);
+        argumentParser.addArgument(bindPasswordFileArg);
 
         saslOptionArg = CommonArguments.getSASL();
-        argumentParser.addLdapConnectionArgument(saslOptionArg);
+        argumentParser.addArgument(saslOptionArg);
 
         trustAllArg = CommonArguments.getTrustAll();
-        argumentParser.addLdapConnectionArgument(trustAllArg);
+        argumentParser.addArgument(trustAllArg);
 
         trustStorePathArg = CommonArguments.getTrustStorePath();
-        argumentParser.addLdapConnectionArgument(trustStorePathArg);
+        argumentParser.addArgument(trustStorePathArg);
 
         trustStorePasswordArg = CommonArguments.getTrustStorePassword();
-        argumentParser.addLdapConnectionArgument(trustStorePasswordArg);
+        argumentParser.addArgument(trustStorePasswordArg);
 
         trustStorePasswordFileArg = CommonArguments.getTrustStorePasswordFile();
-        argumentParser.addLdapConnectionArgument(trustStorePasswordFileArg);
+        argumentParser.addArgument(trustStorePasswordFileArg);
 
         keyStorePathArg = CommonArguments.getKeyStorePath();
-        argumentParser.addLdapConnectionArgument(keyStorePathArg);
+        argumentParser.addArgument(keyStorePathArg);
 
         keyStorePasswordArg = CommonArguments.getKeyStorePassword();
-        argumentParser.addLdapConnectionArgument(keyStorePasswordArg);
+        argumentParser.addArgument(keyStorePasswordArg);
 
         keyStorePasswordFileArg = CommonArguments.getKeyStorePasswordFile();
-        argumentParser.addLdapConnectionArgument(keyStorePasswordFileArg);
+        argumentParser.addArgument(keyStorePasswordFileArg);
 
         certNicknameArg = CommonArguments.getCertNickName();
-        argumentParser.addLdapConnectionArgument(certNicknameArg);
+        argumentParser.addArgument(certNicknameArg);
 
         reportAuthzIDArg = CommonArguments.getReportAuthzId();
         argumentParser.addArgument(reportAuthzIDArg);
diff --git a/opendj-cli/src/main/java/com/forgerock/opendj/cli/SubCommandArgumentParser.java b/opendj-cli/src/main/java/com/forgerock/opendj/cli/SubCommandArgumentParser.java
index fea2d44..b611a29 100644
--- a/opendj-cli/src/main/java/com/forgerock/opendj/cli/SubCommandArgumentParser.java
+++ b/opendj-cli/src/main/java/com/forgerock/opendj/cli/SubCommandArgumentParser.java
@@ -244,20 +244,15 @@
         addGlobalArgument(argument, null);
     }
 
-
-    /**
-     * Adds the provided argument to the set of arguments handled by this parser and puts the argument in the LDAP
-     * connection group.
-     *
-     * @param argument
-     *            The argument to add to this sub command.
-     * @throws ArgumentException
-     *             If the provided argument conflicts with another global or subcommand argument that has already been
-     *             defined.
-     */
+    /** {@inheritDoc} */
     @Override
-    public void addLdapConnectionArgument(final Argument argument) throws ArgumentException {
-        addGlobalArgument(argument, null);
+    public void addArgument(Argument argument) throws ArgumentException {
+        final ArgumentGroup group = getStandardGroup(argument);
+        if (group == ldapArgGroup) {
+            addGlobalArgument(argument);
+        } else {
+            super.addArgument(argument);
+        }
     }
 
     /**
@@ -501,8 +496,7 @@
                             writeToUsageOutputStream(getUsage());
                             return;
                         } else if (OPTION_LONG_PRODUCT_VERSION.equals(argName) && getVersionHandler() != null) {
-                            // "--version" will always be interpreted as requesting usage
-                            // information.
+                            // "--version" will always be interpreted as requesting usage information.
                             printVersion();
                             return;
                         } else if (subCommand != null) {
@@ -765,7 +759,7 @@
      * @param subCommand
      *            The subcommand for which to display the usage information.
      */
-    public void getSubCommandUsage(LocalizableMessageBuilder buffer, SubCommand subCommand) {
+    public void getSubCommandUsage(StringBuilder buffer, SubCommand subCommand) {
         setUsageOrVersionDisplayed(true);
         String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
         if (scriptName == null || scriptName.length() == 0) {
@@ -801,64 +795,13 @@
             buffer.append(EOL);
         }
 
-        final Argument usageArgument = getUsageArgument();
         for (Argument a : subCommand.getArguments()) {
             // If this argument is hidden, then skip it.
             if (a.isHidden()) {
                 continue;
             }
 
-            // Write a line with the short and/or long identifiers that may be used
-            // for the argument.
-            Character shortID = a.getShortIdentifier();
-            String longID = a.getLongIdentifier();
-            if (shortID != null) {
-                int currentLength = buffer.length();
-
-                if (a.equals(usageArgument)) {
-                    buffer.append("-?, ");
-                }
-
-                buffer.append("-");
-                buffer.append(shortID.charValue());
-
-                if (a.needsValue() && longID == null) {
-                    buffer.append(" ");
-                    buffer.append(a.getValuePlaceholder());
-                }
-
-                if (longID != null) {
-                    StringBuilder newBuffer = new StringBuilder();
-                    newBuffer.append(", --");
-                    newBuffer.append(longID);
-
-                    if (a.needsValue()) {
-                        newBuffer.append(" ");
-                        newBuffer.append(a.getValuePlaceholder());
-                    }
-
-                    int lineLength = (buffer.length() - currentLength) + newBuffer.length();
-                    if (lineLength > MAX_LINE_WIDTH) {
-                        buffer.append(EOL);
-                    }
-                    buffer.append(newBuffer);
-                }
-
-                buffer.append(EOL);
-            } else if (longID != null) {
-                if (a.equals(usageArgument)) {
-                    buffer.append("-?, ");
-                }
-                buffer.append("--");
-                buffer.append(longID);
-
-                if (a.needsValue()) {
-                    buffer.append(" ");
-                    buffer.append(a.getValuePlaceholder());
-                }
-
-                buffer.append(EOL);
-            }
+            printLineForShortLongArgument(a, buffer);
 
             indentAndWrap2(INDENT, a.getDescription(), buffer);
             if (a.needsValue() && a.getDefaultValue() != null && a.getDefaultValue().length() > 0) {
@@ -873,7 +816,7 @@
      * <p>
      * FIXME Try to merge with #indentAndWrap(LocalizableMessage, LocalizableMessage, LocalizableMessageBuilder).
      */
-    private void indentAndWrap2(String indent, LocalizableMessage text, LocalizableMessageBuilder buffer) {
+    private void indentAndWrap2(String indent, LocalizableMessage text, StringBuilder buffer) {
         int actualSize = MAX_LINE_WIDTH - indent.length() - 1;
         indentAndWrap(indent, actualSize, text, buffer);
     }
@@ -885,7 +828,7 @@
      */
     @Override
     public String getUsage() {
-        LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
+        final StringBuilder buffer = new StringBuilder();
 
         if (subCommand == null) {
             if (System.getProperty("org.forgerock.opendj.gendoc") != null) {
@@ -905,7 +848,7 @@
             getSubCommandUsage(buffer, subCommand);
         }
 
-        return buffer.toMessage().toString();
+        return buffer.toString();
     }
 
     /**
@@ -940,15 +883,15 @@
 
     /** Get usage for a specific usage argument. */
     private void getUsage(Argument a) {
-        LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
+        final StringBuilder buffer = new StringBuilder();
 
-        final Argument usageArgument = getUsageArgument();
-        if (a.equals(usageArgument) && subCommand != null) {
+        final boolean isUsageArgument = isUsageArgument(a);
+        if (isUsageArgument && subCommand != null) {
             getSubCommandUsage(buffer, subCommand);
-        } else if (a.equals(usageArgument) && usageGroupArguments.size() <= 1) {
+        } else if (isUsageArgument && usageGroupArguments.size() <= 1) {
             // No groups - so display all sub-commands.
             getFullUsage(subCommands.values(), true, buffer);
-        } else if (a.equals(usageArgument)) {
+        } else if (isUsageArgument) {
             // Using groups - so display all sub-commands group help.
             getFullUsage(Collections.<SubCommand> emptySet(), true, buffer);
         } else {
@@ -962,7 +905,7 @@
     /**
      * Appends complete usage information for the specified set of sub-commands.
      */
-    private void getFullUsage(Collection<SubCommand> c, boolean showGlobalOptions, LocalizableMessageBuilder buffer) {
+    private void getFullUsage(Collection<SubCommand> c, boolean showGlobalOptions, StringBuilder buffer) {
         setUsageOrVersionDisplayed(true);
 
         final LocalizableMessage toolDescription = getToolDescription();
@@ -996,7 +939,6 @@
             buffer.append(EOL);
         }
 
-        final Argument usageArgument = getUsageArgument();
         if (c.isEmpty()) {
             // Display usage arguments (except the default one).
             for (Argument a : globalArgumentList) {
@@ -1004,7 +946,7 @@
                     continue;
                 }
 
-                if (usageGroupArguments.containsKey(a) && !a.equals(usageArgument)) {
+                if (usageGroupArguments.containsKey(a) && !isUsageArgument(a)) {
                     printArgumentUsage(a, buffer);
                 }
             }
@@ -1061,6 +1003,7 @@
             }
 
             // Finally print default usage argument.
+            final Argument usageArgument = getUsageArgument();
             if (usageArgument != null) {
                 printArgumentUsage(usageArgument, buffer);
             } else {
@@ -1078,7 +1021,7 @@
      * @param buffer
      *            The buffer to which the usage information should be appended.
      */
-    private void printArgumentUsage(Argument a, LocalizableMessageBuilder buffer) {
+    private void printArgumentUsage(Argument a, StringBuilder buffer) {
         String value;
         if (a.needsValue()) {
             LocalizableMessage pHolder = a.getValuePlaceholder();
@@ -1130,13 +1073,12 @@
      * Write one or more lines with the description of the argument. We will indent the description five characters and
      * try our best to wrap at or before column 79 so it will be friendly to 80-column displays.
      */
-    private void indentAndWrap(String indent, LocalizableMessage text, LocalizableMessageBuilder buffer) {
+    private void indentAndWrap(String indent, LocalizableMessage text, StringBuilder buffer) {
         int actualSize = MAX_LINE_WIDTH - indent.length();
         indentAndWrap(indent, actualSize, text, buffer);
     }
 
-    static void indentAndWrap(String indent, int actualSize, LocalizableMessage text,
-            LocalizableMessageBuilder buffer) {
+    static void indentAndWrap(String indent, int actualSize, LocalizableMessage text, StringBuilder buffer) {
         if (text.length() <= actualSize) {
             buffer.append(indent);
             buffer.append(text);
diff --git a/opendj-cli/src/test/java/com/forgerock/opendj/cli/TestSubCommandArgumentParserTestCase.java b/opendj-cli/src/test/java/com/forgerock/opendj/cli/TestSubCommandArgumentParserTestCase.java
index 6080518..a19e534 100644
--- a/opendj-cli/src/test/java/com/forgerock/opendj/cli/TestSubCommandArgumentParserTestCase.java
+++ b/opendj-cli/src/test/java/com/forgerock/opendj/cli/TestSubCommandArgumentParserTestCase.java
@@ -22,23 +22,22 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2014 ForgeRock AS
+ *      Portions Copyright 2014-2015 ForgeRock AS
  */
 package com.forgerock.opendj.cli;
 
+import static com.forgerock.opendj.cli.CliMessages.*;
+
 import java.util.ArrayList;
 import java.util.List;
 
 import org.fest.assertions.Assertions;
 import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
-import static com.forgerock.opendj.cli.CliMessages.*;
-
 /**
  * Unit tests for the SubCommand class.
  */
@@ -49,7 +48,6 @@
 
     /** First sub-command. */
     private SubCommand sc1;
-
     /** Second sub-command. */
     private SubCommand sc2;
 
@@ -88,7 +86,9 @@
      */
     @DataProvider(name = "validCommandLineArgs")
     public Object[][] createValidCommandLineArgs() {
-        return new Object[][] { { new String[] {}, null }, { new String[] { "sub-command1" }, sc1 },
+        return new Object[][] {
+            { new String[] {}, null },
+            { new String[] { "sub-command1" }, sc1 },
             { new String[] { "sub-command2", "one", "two" }, sc2 },
             { new String[] { "sub-command2", "one", "two", "three" }, sc2 },
             { new String[] { "sub-command2", "one", "two", "three", "four" }, sc2 }, };
@@ -131,8 +131,10 @@
      */
     @DataProvider(name = "invalidCommandLineArgs")
     public Object[][] createInvalidCommandLineArgs() {
-        return new Object[][] { { new String[] { "sub-command1", "one" } },
-            { new String[] { "sub-command1", "one", "two" } }, { new String[] { "sub-command2" } },
+        return new Object[][] {
+            { new String[] { "sub-command1", "one" } },
+            { new String[] { "sub-command1", "one", "two" } },
+            { new String[] { "sub-command2" } },
             { new String[] { "sub-command2", "one" } },
             { new String[] { "sub-command2", "one", "two", "three", "four", "five" } }, };
     }
@@ -162,7 +164,7 @@
 
     @Test(dataProvider = "indentAndWrapProvider")
     public void testIndentAndWrap(String text, int wrapColumn, String indent, String expected) {
-        final LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
+        final StringBuilder buffer = new StringBuilder();
         SubCommandArgumentParser.indentAndWrap(indent, wrapColumn, LocalizableMessage.raw(text), buffer);
         Assertions.assertThat(buffer.toString()).isEqualTo(expected);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/Base64.java b/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
index 4b9dcf6..1067585 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
@@ -47,7 +47,6 @@
 import java.util.StringTokenizer;
 
 import org.forgerock.i18n.LocalizableMessage;
-import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.opendj.ldap.ByteSequence;
 import org.opends.server.core.DirectoryServer.DirectoryServerVersionHandler;
 import org.opends.server.types.NullOutputStream;
@@ -565,7 +564,7 @@
       }
       else
       {
-        LocalizableMessageBuilder messageBuilder = new LocalizableMessageBuilder();
+        final StringBuilder messageBuilder = new StringBuilder();
         argParser.getSubCommandUsage(messageBuilder, subCommand);
         System.out.println(messageBuilder.toString());
       }

--
Gitblit v1.10.0