From 107be3d9186d5cdc000181a41abed56d2ca76252 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 15 Jun 2011 15:02:06 +0000
Subject: [PATCH] Fix OPENDJ-187: ldapsearch tool does not hide the password in the command line

---
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPCompare.java               |  126 -----
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java                |  119 -----
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConnectionFactoryProvider.java |   17 
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java                   |  120 -----
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java                |  128 -----
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConsoleApplication.java        |  389 ++++-------------
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPPasswordModify.java        |  132 -----
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPSearch.java                |  157 ------
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java                  |  119 -----
 9 files changed, 134 insertions(+), 1,173 deletions(-)

diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
index de17abf..75762cf 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/AuthRate.java
@@ -34,8 +34,6 @@
 import static com.forgerock.opendj.ldap.tools.ToolConstants.*;
 import static com.forgerock.opendj.ldap.tools.Utils.filterExitCode;
 
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -444,132 +442,27 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainAuthRate(args, System.in, System.out, System.err);
+    final int retCode = new AuthRate().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainAuthRate(final String[] args)
-  {
-    return mainAuthRate(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-
-  static int mainAuthRate(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-
-  {
-    return new AuthRate(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private BooleanArgument verbose;
 
   private BooleanArgument scriptFriendly;
 
 
 
-  private AuthRate(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private AuthRate()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isScriptFriendly()
@@ -580,9 +473,7 @@
 
 
   /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConnectionFactoryProvider.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConnectionFactoryProvider.java
index 5cae1fd..e9bdd2b 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConnectionFactoryProvider.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConnectionFactoryProvider.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -596,7 +597,7 @@
             || bindPasswordArg.isPresent())
         {
           bindRequest = Requests.newSimpleBindRequest(getBindName(),
-              getPassword().toCharArray());
+              getPassword());
         }
       }
       else if (mech.equals(DigestMD5SASLBindRequest.SASL_MECHANISM_NAME))
@@ -769,22 +770,24 @@
    * @return The password stored into the specified file on by the command line
    *         argument, or null it if not specified.
    */
-  private String getPassword() throws ArgumentException
+  private char[] getPassword() throws ArgumentException
   {
-    String value = "";
+    char[] value = "".toCharArray();
+
     if (bindPasswordArg.isPresent())
     {
-      value = bindPasswordArg.getValue();
+      value = bindPasswordArg.getValue().toCharArray();
     }
     else if (bindPasswordFileArg.isPresent())
     {
-      value = bindPasswordFileArg.getValue();
+      value = bindPasswordFileArg.getValue().toCharArray();
     }
-    if (value.length() == 0 && app.isInteractive())
+
+    if (value.length == 0 && app.isInteractive())
     {
       try
       {
-        value = app.readLineOfInput(LocalizableMessage.raw("Bind Password:"));
+        value = app.readPassword(LocalizableMessage.raw("Bind Password:"));
       }
       catch(CLIException e)
       {
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConsoleApplication.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConsoleApplication.java
index 5fa9e76..4308804 100755
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConsoleApplication.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ConsoleApplication.java
@@ -23,20 +23,18 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
+ *      Portions copyright 2011 Nemanja Lukić
  */
 package com.forgerock.opendj.ldap.tools;
 
 
 
-import static com.forgerock.opendj.ldap.tools.ToolsMessages.INFO_ERROR_EMPTY_RESPONSE;
-import static com.forgerock.opendj.ldap.tools.ToolsMessages.INFO_MENU_PROMPT_RETURN_TO_CONTINUE;
-import static com.forgerock.opendj.ldap.tools.ToolsMessages.INFO_PROMPT_SINGLE_DEFAULT;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
 import static com.forgerock.opendj.ldap.tools.Utils.MAX_LINE_WIDTH;
 import static com.forgerock.opendj.ldap.tools.Utils.wrapText;
 
 import java.io.*;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 import org.forgerock.i18n.LocalizableMessage;
 
@@ -48,202 +46,33 @@
  */
 abstract class ConsoleApplication
 {
-  private static final class NullOutputStream extends OutputStream
-  {
-    /**
-     * The singleton instance for this class.
-     */
-    private static final NullOutputStream INSTANCE = new NullOutputStream();
+  private final PrintStream err = new PrintStream(System.out);
 
-    /**
-     * The singleton print stream tied to the null output stream.
-     */
-    private static final PrintStream PRINT_STREAM = new PrintStream(INSTANCE);
+  private final BufferedReader reader = new BufferedReader(
+      new InputStreamReader(System.in));
 
+  private final InputStream in = System.in;
 
+  private final PrintStream out = new PrintStream(System.out);
 
-    /**
-     * Retrieves a print stream using this null output stream.
-     *
-     * @return A print stream using this null output stream.
-     */
-    static PrintStream printStream()
-    {
-      return PRINT_STREAM;
-    }
-
-
-
-    /**
-     * Creates a new instance of this null output stream.
-     */
-    private NullOutputStream()
-    {
-      // No implementation is required.
-    }
-
-
-
-    /**
-     * Closes the output stream. This has no effect.
-     */
-    @Override
-    public void close()
-    {
-      // No implementation is required.
-    }
-
-
-
-    /**
-     * Flushes the output stream. This has no effect.
-     */
-    @Override
-    public void flush()
-    {
-      // No implementation is required.
-    }
-
-
-
-    /**
-     * Writes the provided data to this output stream. This has no effect.
-     *
-     * @param b
-     *          The byte array containing the data to be written.
-     */
-    @Override
-    public void write(final byte[] b)
-    {
-      // No implementation is required.
-    }
-
-
-
-    /**
-     * Writes the provided data to this output stream. This has no effect.
-     *
-     * @param b
-     *          The byte array containing the data to be written.
-     * @param off
-     *          The offset at which the real data begins.
-     * @param len
-     *          The number of bytes to be written.
-     */
-    @Override
-    public void write(final byte[] b, final int off, final int len)
-    {
-      // No implementation is required.
-    }
-
-
-
-    /**
-     * Writes the provided byte to this output stream. This has no effect.
-     *
-     * @param b
-     *          The byte to be written.
-     */
-    @Override
-    public void write(final int b)
-    {
-      // No implementation is required.
-    }
-  }
-
-
-
-  /**
-   * A null reader.
-   */
-  private static final class NullReader extends Reader
-  {
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void close() throws IOException
-    {
-      // Do nothing.
-    }
-
-
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public int read(final char[] cbuf, final int off, final int len)
-        throws IOException
-    {
-      return -1;
-    }
-  }
-
-
-
-  // The error stream which this application should use.
-  private final PrintStream err;
-
-  // The input stream reader which this application should use.
-  private final BufferedReader reader;
-
-  private final InputStream in;
-
-  // The output stream which this application should use.
-  private final PrintStream out;
+  private final Console console = System.console();
 
 
 
   /**
    * Creates a new console application instance.
-   *
-   * @param in
-   *          The application input stream.
-   * @param out
-   *          The application output stream.
-   * @param err
-   *          The application error stream.
    */
-  ConsoleApplication(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  ConsoleApplication()
   {
-    this.in = in;
-    if (in != null)
-    {
-      this.reader = new BufferedReader(new InputStreamReader(in));
-    }
-    else
-    {
-      this.reader = new BufferedReader(new NullReader());
-    }
-
-    if (out != null)
-    {
-      this.out = new PrintStream(out);
-    }
-    else
-    {
-      this.out = NullOutputStream.printStream();
-    }
-
-    if (err != null)
-    {
-      this.err = new PrintStream(err);
-    }
-    else
-    {
-      this.err = NullOutputStream.printStream();
-    }
+    // Nothing to do.
   }
 
 
 
   /**
-   * Gets the application error stream.
+   * Returns the application error stream.
    *
-   * @return Returns the application error stream.
+   * @return The application error stream.
    */
   final PrintStream getErrorStream()
   {
@@ -253,21 +82,9 @@
 
 
   /**
-   * Gets the application input stream reader.
+   * Returns the application input stream.
    *
-   * @return Returns the application input stream.
-   */
-  final BufferedReader getInputReader()
-  {
-    return reader;
-  }
-
-
-
-  /**
-   * Gets the application input stream.
-   *
-   * @return Returns the application input stream.
+   * @return The application input stream.
    */
   final InputStream getInputStream()
   {
@@ -277,9 +94,9 @@
 
 
   /**
-   * Gets the application output stream.
+   * Returns the application output stream.
    *
-   * @return Returns the application output stream.
+   * @return The application output stream.
    */
   final PrintStream getOutputStream()
   {
@@ -289,62 +106,54 @@
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
+   * Indicates whether or not the user has requested interactive behavior. The
+   * default implementation returns {@code true}.
    *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
+   * @return {@code true} if the user has requested interactive behavior.
    */
-  abstract boolean isAdvancedMode();
+  boolean isInteractive()
+  {
+    return true;
+  }
 
 
 
   /**
-   * Indicates whether or not the user has requested interactive behavior.
+   * Indicates whether or not the user has requested quiet output. The default
+   * implementation returns {@code false}.
    *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
+   * @return {@code true} if the user has requested quiet output.
    */
-  abstract boolean isInteractive();
+  boolean isQuiet()
+  {
+    return false;
+  }
 
 
 
   /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
+   * Indicates whether or not the user has requested script-friendly output. The
+   * default implementation returns {@code false}.
    *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
+   * @return {@code true} if the user has requested script-friendly output.
    */
-  abstract boolean isMenuDrivenMode();
+  boolean isScriptFriendly()
+  {
+    return false;
+  }
 
 
 
   /**
-   * Indicates whether or not the user has requested quiet output.
+   * Indicates whether or not the user has requested verbose output. The default
+   * implementation returns {@code false}.
    *
-   * @return Returns <code>true</code> if the user has requested quiet output.
+   * @return {@code true} if the user has requested verbose output.
    */
-  abstract boolean isQuiet();
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
-   */
-  abstract boolean isScriptFriendly();
-
-
-
-  /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
-   */
-  abstract boolean isVerbose();
+  boolean isVerbose()
+  {
+    return false;
+  }
 
 
 
@@ -356,7 +165,8 @@
    */
   final void pressReturnToContinue()
   {
-    final LocalizableMessage msg = INFO_MENU_PROMPT_RETURN_TO_CONTINUE.get();
+    final LocalizableMessage msg = INFO_MENU_PROMPT_RETURN_TO_CONTINUE
+        .get();
     try
     {
       readLineOfInput(msg);
@@ -422,35 +232,6 @@
 
 
   /**
-   * Displays a blank line to the output stream if we are not in quiet mode.
-   */
-  final void printlnProgress()
-  {
-    if (!isQuiet())
-    {
-      out.println();
-    }
-  }
-
-
-
-  /**
-   * Displays a message to the output stream if we are not in quiet mode.
-   *
-   * @param msg
-   *          The message.
-   */
-  final void printProgress(final LocalizableMessage msg)
-  {
-    if (!isQuiet())
-    {
-      out.print(msg);
-    }
-  }
-
-
-
-  /**
    * Displays a message to the error stream if verbose mode is enabled.
    *
    * @param msg
@@ -467,29 +248,29 @@
 
 
   /**
-   * Commodity method that interactively prompts (on error output) the user to
-   * provide a string value. Any non-empty string will be allowed (the empty
-   * string will indicate that the default should be used, if there is one).
+   * Interactively prompts (on error output) the user to provide a string value.
+   * Any non-empty string will be allowed (the empty string will indicate that
+   * the default should be used, if there is one).
    *
    * @param prompt
    *          The prompt to present to the user.
    * @param defaultValue
    *          The default value to assume if the user presses ENTER without
-   *          typing anything, or <CODE>null</CODE> if there should not be a
-   *          default and the user must explicitly provide a value.
+   *          typing anything, or {@code null} if there should not be a default
+   *          and the user must explicitly provide a value.
    * @throws CLIException
    *           If the line of input could not be retrieved for some reason.
    * @return The string value read from the user.
    */
-  final String readInput(LocalizableMessage prompt, final String defaultValue)
-      throws CLIException
+  final String readInput(LocalizableMessage prompt,
+      final String defaultValue) throws CLIException
   {
     while (true)
     {
       if (defaultValue != null)
       {
-        prompt = INFO_PROMPT_SINGLE_DEFAULT
-            .get(prompt.toString(), defaultValue);
+        prompt = INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(),
+            defaultValue);
       }
       final String response = readLineOfInput(prompt);
 
@@ -514,34 +295,43 @@
 
 
   /**
-   * Commodity method that interactively prompts (on error output) the user to
-   * provide a string value. Any non-empty string will be allowed (the empty
-   * string will indicate that the default should be used, if there is one). If
-   * an error occurs a message will be logged to the provided logger.
+   * Interactively reads a password from the console.
    *
    * @param prompt
-   *          The prompt to present to the user.
-   * @param defaultValue
-   *          The default value to assume if the user presses ENTER without
-   *          typing anything, or <CODE>null</CODE> if there should not be a
-   *          default and the user must explicitly provide a value.
-   * @param logger
-   *          the Logger to be used to log the error message.
-   * @return The string value read from the user.
+   *          The password prompt.
+   * @return The password.
+   * @throws CLIException
+   *           If the password could not be retrieved for some reason.
    */
-  final String readInput(final LocalizableMessage prompt,
-      final String defaultValue, final Logger logger)
+  final char[] readPassword(final LocalizableMessage prompt)
+      throws CLIException
   {
-    String s = defaultValue;
-    try
+    if (console != null)
     {
-      s = readInput(prompt, defaultValue);
+      if (prompt != null)
+      {
+        err.print(wrapText(prompt, MAX_LINE_WIDTH));
+        err.print(" ");
+      }
+      try
+      {
+        final char[] password = console.readPassword();
+        if (password == null)
+        {
+          throw new EOFException("End of input");
+        }
+        return password;
+      }
+      catch (final Throwable e)
+      {
+        throw CLIException.adaptInputException(e);
+      }
     }
-    catch (final CLIException ce)
+    else
     {
-      logger.log(Level.WARNING, "Error reading input: " + ce, ce);
+      // FIXME: should go direct to char[] and avoid the String.
+      return readLineOfInput(prompt).toCharArray();
     }
-    return s;
   }
 
 
@@ -551,12 +341,11 @@
    *
    * @param prompt
    *          The prompt.
-   * @return Returns the line of input, or <code>null</code> if the end of input
-   *         has been reached.
+   * @return The line of input.
    * @throws CLIException
    *           If the line of input could not be retrieved for some reason.
    */
-  final String readLineOfInput(final LocalizableMessage prompt)
+  private final String readLineOfInput(final LocalizableMessage prompt)
       throws CLIException
   {
     if (prompt != null)
@@ -569,8 +358,8 @@
       final String s = reader.readLine();
       if (s == null)
       {
-        throw CLIException
-            .adaptInputException(new EOFException("End of input"));
+        throw CLIException.adaptInputException(new EOFException(
+            "End of input"));
       }
       else
       {
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPCompare.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPCompare.java
index e116bae..7cba37f 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPCompare.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPCompare.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -65,142 +66,25 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainCompare(args, System.in, System.out, System.err);
+    final int retCode = new LDAPCompare().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the LDAPModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainCompare(final String[] args)
-  {
-    return mainCompare(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the LDAPModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program. specified,
-   *          the number of matching entries should be returned or not.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-  static int mainCompare(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-  {
-    return new LDAPCompare(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private BooleanArgument verbose;
 
 
 
-  private LDAPCompare(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private LDAPCompare()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
-   */
-  @Override
-  public boolean isScriptFriendly()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
index 598df04..f4f36b4 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPModify.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -36,8 +37,6 @@
 
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
@@ -313,54 +312,12 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainModify(args, System.in, System.out, System.err);
+    final int retCode = new LDAPModify().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the LDAPModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainModify(final String[] args)
-  {
-    return mainModify(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the LDAPModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program. specified,
-   *          the number of matching entries should be returned or not.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-  static int mainModify(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-  {
-    return new LDAPModify(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private Connection connection;
 
   private EntryWriter writer;
@@ -371,90 +328,15 @@
 
 
 
-  private LDAPModify(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private LDAPModify()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
-   */
-  @Override
-  public boolean isScriptFriendly()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPPasswordModify.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPPasswordModify.java
index 04fc6de..478d2a0 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPPasswordModify.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPPasswordModify.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -34,9 +35,6 @@
 import static com.forgerock.opendj.ldap.tools.Utils.filterExitCode;
 import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
 
-import java.io.InputStream;
-import java.io.OutputStream;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.*;
 import org.forgerock.opendj.ldap.controls.Control;
@@ -70,145 +68,25 @@
    */
   public static void main(final String[] args)
   {
-    final int retCode = mainPasswordModify(args, System.in, System.out,
-        System.err);
+    final int retCode = new LDAPPasswordModify().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the command-line arguments, establishes a connection to the
-   * Directory Server, sends the password modify request, and reads the
-   * response.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return An integer value of zero if everything completed successfully, or a
-   *         nonzero value if an error occurred.
-   */
-  static int mainPasswordModify(final String[] args)
-  {
-    return mainPasswordModify(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the LDAPPasswordModify tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program. specified,
-   *          the number of matching entries should be returned or not.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-  static int mainPasswordModify(final String[] args,
-      final InputStream inStream, final OutputStream outStream,
-      final OutputStream errStream)
-  {
-    return new LDAPPasswordModify(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private BooleanArgument verbose;
 
 
 
-  private LDAPPasswordModify(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private LDAPPasswordModify()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
-   */
-  @Override
-  public boolean isScriptFriendly()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPSearch.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPSearch.java
index 9aa4952..11a373e 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPSearch.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/LDAPSearch.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions copyright 2011 ForgeRock AS
  */
 
 package com.forgerock.opendj.ldap.tools;
@@ -215,175 +216,27 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainSearch(args, false, System.in, System.out,
-        System.err);
+    final int retCode = new LDAPSearch().run(args, false);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainSearch(final String[] args)
-  {
-    return mainSearch(args, true, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @param returnMatchingEntries
-   *          whether when the option --countEntries is specified, the number of
-   *          matching entries should be returned or not.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-
-  static int mainSearch(final String[] args,
-      final boolean returnMatchingEntries, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-  {
-    return new LDAPSearch(inStream, outStream, errStream).run(args,
-        returnMatchingEntries);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-  static int mainSearch(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-  {
-    return mainSearch(args, true, inStream, outStream, errStream);
-  }
-
-
-
   private BooleanArgument verbose;
 
   private EntryWriter ldifWriter;
 
 
 
-  private LDAPSearch(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private LDAPSearch()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return true;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
-   */
-  @Override
-  public boolean isScriptFriendly()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
index 84d374b..a6c668a 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/ModRate.java
@@ -34,9 +34,6 @@
 import static com.forgerock.opendj.ldap.tools.ToolConstants.*;
 import static com.forgerock.opendj.ldap.tools.Utils.filterExitCode;
 
-import java.io.InputStream;
-import java.io.OutputStream;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.*;
 import org.forgerock.opendj.ldap.requests.ModifyRequest;
@@ -163,132 +160,27 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainModRate(args, System.in, System.out, System.err);
+    final int retCode = new ModRate().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the modrate tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainModRate(final String[] args)
-  {
-    return mainModRate(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the modrate tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-
-  static int mainModRate(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-
-  {
-    return new ModRate(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private BooleanArgument verbose;
 
   private BooleanArgument scriptFriendly;
 
 
 
-  private ModRate(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private ModRate()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isScriptFriendly()
@@ -299,9 +191,7 @@
 
 
   /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()
diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
index a78c738..6c07efa 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/SearchRate.java
@@ -34,8 +34,6 @@
 import static com.forgerock.opendj.ldap.tools.ToolConstants.*;
 import static com.forgerock.opendj.ldap.tools.Utils.filterExitCode;
 
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
@@ -215,55 +213,12 @@
 
   public static void main(final String[] args)
   {
-    final int retCode = mainSearchRate(args, System.in, System.out, System.err);
+    final int retCode = new SearchRate().run(args);
     System.exit(filterExitCode(retCode));
   }
 
 
 
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @return The error code.
-   */
-
-  static int mainSearchRate(final String[] args)
-  {
-    return mainSearchRate(args, System.in, System.out, System.err);
-  }
-
-
-
-  /**
-   * Parses the provided command-line arguments and uses that information to run
-   * the ldapsearch tool.
-   *
-   * @param args
-   *          The command-line arguments provided to this program.
-   * @param inStream
-   *          The input stream to use for standard input, or <CODE>null</CODE>
-   *          if standard input is not needed.
-   * @param outStream
-   *          The output stream to use for standard output, or <CODE>null</CODE>
-   *          if standard output is not needed.
-   * @param errStream
-   *          The output stream to use for standard error, or <CODE>null</CODE>
-   *          if standard error is not needed.
-   * @return The error code.
-   */
-
-  static int mainSearchRate(final String[] args, final InputStream inStream,
-      final OutputStream outStream, final OutputStream errStream)
-
-  {
-    return new SearchRate(inStream, outStream, errStream).run(args);
-  }
-
-
-
   private BooleanArgument verbose;
 
   private BooleanArgument scriptFriendly;
@@ -272,77 +227,15 @@
 
 
 
-  private SearchRate(final InputStream in, final OutputStream out,
-      final OutputStream err)
+  private SearchRate()
   {
-    super(in, out, err);
-
+    // Nothing to do.
   }
 
 
 
   /**
-   * Indicates whether or not the user has requested advanced mode.
-   *
-   * @return Returns <code>true</code> if the user has requested advanced mode.
-   */
-  @Override
-  public boolean isAdvancedMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested interactive behavior.
-   *
-   * @return Returns <code>true</code> if the user has requested interactive
-   *         behavior.
-   */
-  @Override
-  public boolean isInteractive()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not this console application is running in its
-   * menu-driven mode. This can be used to dictate whether output should go to
-   * the error stream or not. In addition, it may also dictate whether or not
-   * sub-menus should display a cancel option as well as a quit option.
-   *
-   * @return Returns <code>true</code> if this console application is running in
-   *         its menu-driven mode.
-   */
-  @Override
-  public boolean isMenuDrivenMode()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested quiet output.
-   *
-   * @return Returns <code>true</code> if the user has requested quiet output.
-   */
-  @Override
-  public boolean isQuiet()
-  {
-    return false;
-  }
-
-
-
-  /**
-   * Indicates whether or not the user has requested script-friendly output.
-   *
-   * @return Returns <code>true</code> if the user has requested script-friendly
-   *         output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isScriptFriendly()
@@ -353,9 +246,7 @@
 
 
   /**
-   * Indicates whether or not the user has requested verbose output.
-   *
-   * @return Returns <code>true</code> if the user has requested verbose output.
+   * {@inheritDoc}
    */
   @Override
   public boolean isVerbose()

--
Gitblit v1.10.0