From 263d085885df024dca9250cc03c807912b0a7662 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 24 Apr 2012 22:33:21 +0000
Subject: [PATCH] Reformat to comply with new Checkstyle rules.

---
 opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/IntegerArgument.java |  930 +++++++++++++++++++++++++++------------------------------
 1 files changed, 441 insertions(+), 489 deletions(-)

diff --git a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/IntegerArgument.java b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/IntegerArgument.java
index ff6f72f..3effa04 100644
--- a/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/IntegerArgument.java
+++ b/opendj3/opendj-ldap-toolkit/src/main/java/com/forgerock/opendj/ldap/tools/IntegerArgument.java
@@ -6,17 +6,16 @@
  * (the "License").  You may not use this file except in compliance
  * with the License.
  *
- * You can obtain a copy of the license at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
  * or http://forgerock.org/license/CDDLv1.0.html.
  * See the License for the specific language governing permissions
  * and limitations under the License.
  *
  * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at
- * trunk/opendj3/legal-notices/CDDLv1_0.txt.  If applicable,
- * add the following below this CDDL HEADER, with the fields enclosed
- * by brackets "[]" replaced with your own identifying information:
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
  *      Portions Copyright [yyyy] [name of copyright owner]
  *
  * CDDL HEADER END
@@ -26,508 +25,461 @@
  */
 package com.forgerock.opendj.ldap.tools;
 
-
-
-import static com.forgerock.opendj.ldap.tools.ToolsMessages.*;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_ARG_CANNOT_DECODE_AS_INT;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_INTARG_VALUE_ABOVE_UPPER_BOUND;
+import static com.forgerock.opendj.ldap.tools.ToolsMessages.ERR_INTARG_VALUE_BELOW_LOWER_BOUND;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
 
-
-
 /**
  * This class defines an argument type that will only accept integer values, and
  * potentially only those in a given range.
  */
-final class IntegerArgument extends Argument
-{
-  // Indicates whether a lower bound will be enforced for this argument.
-  private final boolean hasLowerBound;
+final class IntegerArgument extends Argument {
+    // Indicates whether a lower bound will be enforced for this argument.
+    private final boolean hasLowerBound;
 
-  // Indicates whether an upper bound will be enforced for this
-  // argument.
-  private final boolean hasUpperBound;
+    // Indicates whether an upper bound will be enforced for this
+    // argument.
+    private final boolean hasUpperBound;
 
-  // The lower bound that will be enforced for this argument.
-  private final double lowerBound;
+    // The lower bound that will be enforced for this argument.
+    private final double lowerBound;
 
-  // The upper bound that will be enforced for this argument.
-  private final double upperBound;
+    // The upper bound that will be enforced for this argument.
+    private final double upperBound;
 
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param isMultiValued
+     *            Indicates whether this argument may be specified more than
+     *            once to provide multiple values.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param defaultValue
+     *            The default value that should be used for this argument if
+     *            none is provided in a properties file or on the command line.
+     *            This may be <CODE>null</CODE> if there is no generic default.
+     * @param propertyName
+     *            The name of the property in a property file that may be used
+     *            to override the default value but will be overridden by a
+     *            command-line argument.
+     * @param hasLowerBound
+     *            Indicates whether a lower bound should be enforced for values
+     *            of this argument.
+     * @param lowerBound
+     *            The lower bound that should be enforced for values of this
+     *            argument.
+     * @param hasUpperBound
+     *            Indicates whether an upperbound should be enforced for values
+     *            of this argument.
+     * @param upperBound
+     *            The upper bound that should be enforced for values of this
+     *            argument.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean isMultiValued,
+            final boolean needsValue, final LocalizableMessage valuePlaceholder,
+            final double defaultValue, final String propertyName, final boolean hasLowerBound,
+            final double lowerBound, final boolean hasUpperBound, final double upperBound,
+            final LocalizableMessage description) throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued, needsValue,
+                valuePlaceholder, String.valueOf(defaultValue), propertyName, description);
 
+        this.hasLowerBound = hasLowerBound;
+        this.hasUpperBound = hasUpperBound;
+        this.lowerBound = lowerBound;
+        this.upperBound = upperBound;
 
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param isMultiValued
-   *          Indicates whether this argument may be specified more than once to
-   *          provide multiple values.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param defaultValue
-   *          The default value that should be used for this argument if none is
-   *          provided in a properties file or on the command line. This may be
-   *          <CODE>null</CODE> if there is no generic default.
-   * @param propertyName
-   *          The name of the property in a property file that may be used to
-   *          override the default value but will be overridden by a
-   *          command-line argument.
-   * @param hasLowerBound
-   *          Indicates whether a lower bound should be enforced for values of
-   *          this argument.
-   * @param lowerBound
-   *          The lower bound that should be enforced for values of this
-   *          argument.
-   * @param hasUpperBound
-   *          Indicates whether an upperbound should be enforced for values of
-   *          this argument.
-   * @param upperBound
-   *          The upper bound that should be enforced for values of this
-   *          argument.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean isMultiValued, final boolean needsValue,
-      final LocalizableMessage valuePlaceholder, final double defaultValue,
-      final String propertyName, final boolean hasLowerBound,
-      final double lowerBound, final boolean hasUpperBound,
-      final double upperBound, final LocalizableMessage description)
-      throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
-        needsValue, valuePlaceholder, String.valueOf(defaultValue),
-        propertyName, description);
-
-    this.hasLowerBound = hasLowerBound;
-    this.hasUpperBound = hasUpperBound;
-    this.lowerBound = lowerBound;
-    this.upperBound = upperBound;
-
-    if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
-    {
-      final LocalizableMessage message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND
-          .get(name, lowerBound, upperBound);
-      throw new ArgumentException(message);
-    }
-  }
-
-
-
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param isMultiValued
-   *          Indicates whether this argument may be specified more than once to
-   *          provide multiple values.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param defaultValue
-   *          The default value that should be used for this argument if none is
-   *          provided in a properties file or on the command line. This may be
-   *          <CODE>null</CODE> if there is no generic default.
-   * @param propertyName
-   *          The name of the property in a property file that may be used to
-   *          override the default value but will be overridden by a
-   *          command-line argument.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean isMultiValued, final boolean needsValue,
-      final LocalizableMessage valuePlaceholder, final double defaultValue,
-      final String propertyName, final LocalizableMessage description)
-      throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
-        needsValue, valuePlaceholder, String.format("%f", defaultValue),
-        propertyName, description);
-
-    hasLowerBound = false;
-    hasUpperBound = false;
-    lowerBound = Integer.MIN_VALUE;
-    upperBound = Integer.MAX_VALUE;
-  }
-
-
-
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param isMultiValued
-   *          Indicates whether this argument may be specified more than once to
-   *          provide multiple values.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param defaultValue
-   *          The default value that should be used for this argument if none is
-   *          provided in a properties file or on the command line. This may be
-   *          <CODE>null</CODE> if there is no generic default.
-   * @param propertyName
-   *          The name of the property in a property file that may be used to
-   *          override the default value but will be overridden by a
-   *          command-line argument.
-   * @param hasLowerBound
-   *          Indicates whether a lower bound should be enforced for values of
-   *          this argument.
-   * @param lowerBound
-   *          The lower bound that should be enforced for values of this
-   *          argument.
-   * @param hasUpperBound
-   *          Indicates whether an upperbound should be enforced for values of
-   *          this argument.
-   * @param upperBound
-   *          The upper bound that should be enforced for values of this
-   *          argument.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean isMultiValued, final boolean needsValue,
-      final LocalizableMessage valuePlaceholder, final int defaultValue,
-      final String propertyName, final boolean hasLowerBound,
-      final double lowerBound, final boolean hasUpperBound,
-      final double upperBound, final LocalizableMessage description)
-      throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
-        needsValue, valuePlaceholder, String.valueOf(defaultValue),
-        propertyName, description);
-
-    this.hasLowerBound = hasLowerBound;
-    this.hasUpperBound = hasUpperBound;
-    this.lowerBound = lowerBound;
-    this.upperBound = upperBound;
-
-    if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
-    {
-      final LocalizableMessage message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND
-          .get(name, lowerBound, upperBound);
-      throw new ArgumentException(message);
-    }
-  }
-
-
-
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param isMultiValued
-   *          Indicates whether this argument may be specified more than once to
-   *          provide multiple values.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param defaultValue
-   *          The default value that should be used for this argument if none is
-   *          provided in a properties file or on the command line. This may be
-   *          <CODE>null</CODE> if there is no generic default.
-   * @param propertyName
-   *          The name of the property in a property file that may be used to
-   *          override the default value but will be overridden by a
-   *          command-line argument.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean isMultiValued, final boolean needsValue,
-      final LocalizableMessage valuePlaceholder, final int defaultValue,
-      final String propertyName, final LocalizableMessage description)
-      throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
-        needsValue, valuePlaceholder, String.valueOf(defaultValue),
-        propertyName, description);
-
-    hasLowerBound = false;
-    hasUpperBound = false;
-    lowerBound = Integer.MIN_VALUE;
-    upperBound = Integer.MAX_VALUE;
-  }
-
-
-
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param hasLowerBound
-   *          Indicates whether a lower bound should be enforced for values of
-   *          this argument.
-   * @param lowerBound
-   *          The lower bound that should be enforced for values of this
-   *          argument.
-   * @param hasUpperBound
-   *          Indicates whether an upperbound should be enforced for values of
-   *          this argument.
-   * @param upperBound
-   *          The upper bound that should be enforced for values of this
-   *          argument.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean needsValue, final LocalizableMessage valuePlaceholder,
-      final boolean hasLowerBound, final double lowerBound,
-      final boolean hasUpperBound, final double upperBound,
-      final LocalizableMessage description) throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-        valuePlaceholder, null, null, description);
-
-    this.hasLowerBound = hasLowerBound;
-    this.hasUpperBound = hasUpperBound;
-    this.lowerBound = lowerBound;
-    this.upperBound = upperBound;
-
-    if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
-    {
-      final LocalizableMessage message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND
-          .get(name, lowerBound, upperBound);
-      throw new ArgumentException(message);
-    }
-  }
-
-
-
-  /**
-   * Creates a new integer argument with the provided information.
-   *
-   * @param name
-   *          The generic name that should be used to refer to this argument.
-   * @param shortIdentifier
-   *          The single-character identifier for this argument, or
-   *          <CODE>null</CODE> if there is none.
-   * @param longIdentifier
-   *          The long identifier for this argument, or <CODE>null</CODE> if
-   *          there is none.
-   * @param isRequired
-   *          Indicates whether this argument must be specified on the command
-   *          line.
-   * @param needsValue
-   *          Indicates whether this argument requires a value.
-   * @param valuePlaceholder
-   *          The placeholder for the argument value that will be displayed in
-   *          usage information, or <CODE>null</CODE> if this argument does not
-   *          require a value.
-   * @param description
-   *          LocalizableMessage for the description of this argument.
-   * @throws ArgumentException
-   *           If there is a problem with any of the parameters used to create
-   *           this argument.
-   */
-  public IntegerArgument(final String name, final Character shortIdentifier,
-      final String longIdentifier, final boolean isRequired,
-      final boolean needsValue, final LocalizableMessage valuePlaceholder,
-      final LocalizableMessage description) throws ArgumentException
-  {
-    super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
-        valuePlaceholder, null, null, description);
-
-    hasLowerBound = false;
-    hasUpperBound = false;
-    lowerBound = Double.MIN_VALUE;
-    upperBound = Double.MAX_VALUE;
-  }
-
-
-
-  /**
-   * Retrieves the lower bound that may be enforced for values of this argument.
-   *
-   * @return The lower bound that may be enforced for values of this argument.
-   */
-  public double getLowerBound()
-  {
-    return lowerBound;
-  }
-
-
-
-  /**
-   * Retrieves the upper bound that may be enforced for values of this argument.
-   *
-   * @return The upper bound that may be enforced for values of this argument.
-   */
-  public double getUpperBound()
-  {
-    return upperBound;
-  }
-
-
-
-  /**
-   * Indicates whether a lower bound should be enforced for values of this
-   * argument.
-   *
-   * @return <CODE>true</CODE> if a lower bound should be enforced for values of
-   *         this argument, or <CODE>false</CODE> if not.
-   */
-  public boolean hasLowerBound()
-  {
-    return hasLowerBound;
-  }
-
-
-
-  /**
-   * Indicates whether a upper bound should be enforced for values of this
-   * argument.
-   *
-   * @return <CODE>true</CODE> if a upper bound should be enforced for values of
-   *         this argument, or <CODE>false</CODE> if not.
-   */
-  public boolean hasUpperBound()
-  {
-    return hasUpperBound;
-  }
-
-
-
-  /**
-   * Indicates whether the provided value is acceptable for use in this
-   * argument.
-   *
-   * @param valueString
-   *          The value for which to make the determination.
-   * @param invalidReason
-   *          A buffer into which the invalid reason may be written if the value
-   *          is not acceptable.
-   * @return <CODE>true</CODE> if the value is acceptable, or <CODE>false</CODE>
-   *         if it is not.
-   */
-  @Override
-  public boolean valueIsAcceptable(final String valueString,
-      final LocalizableMessageBuilder invalidReason)
-  {
-    // First, the value must be decodable as an integer.
-    double intValue;
-    try
-    {
-      intValue = Double.parseDouble(valueString);
-    }
-    catch (final Exception e)
-    {
-      invalidReason.append(ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString,
-          getName()));
-      return false;
+        if (hasLowerBound && hasUpperBound && (lowerBound > upperBound)) {
+            final LocalizableMessage message =
+                    ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(name, lowerBound, upperBound);
+            throw new ArgumentException(message);
+        }
     }
 
-    // If there is a lower bound, then the value must be greater than or
-    // equal to it.
-    if (hasLowerBound && (intValue < lowerBound))
-    {
-      invalidReason.append(ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get(getName(),
-          intValue, lowerBound));
-      return false;
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param isMultiValued
+     *            Indicates whether this argument may be specified more than
+     *            once to provide multiple values.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param defaultValue
+     *            The default value that should be used for this argument if
+     *            none is provided in a properties file or on the command line.
+     *            This may be <CODE>null</CODE> if there is no generic default.
+     * @param propertyName
+     *            The name of the property in a property file that may be used
+     *            to override the default value but will be overridden by a
+     *            command-line argument.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean isMultiValued,
+            final boolean needsValue, final LocalizableMessage valuePlaceholder,
+            final double defaultValue, final String propertyName,
+            final LocalizableMessage description) throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued, needsValue,
+                valuePlaceholder, String.format("%f", defaultValue), propertyName, description);
+
+        hasLowerBound = false;
+        hasUpperBound = false;
+        lowerBound = Integer.MIN_VALUE;
+        upperBound = Integer.MAX_VALUE;
     }
 
-    // If there is an upper bound, then the value must be less than or
-    // equal to it.
-    if (hasUpperBound && (intValue > upperBound))
-    {
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param isMultiValued
+     *            Indicates whether this argument may be specified more than
+     *            once to provide multiple values.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param defaultValue
+     *            The default value that should be used for this argument if
+     *            none is provided in a properties file or on the command line.
+     *            This may be <CODE>null</CODE> if there is no generic default.
+     * @param propertyName
+     *            The name of the property in a property file that may be used
+     *            to override the default value but will be overridden by a
+     *            command-line argument.
+     * @param hasLowerBound
+     *            Indicates whether a lower bound should be enforced for values
+     *            of this argument.
+     * @param lowerBound
+     *            The lower bound that should be enforced for values of this
+     *            argument.
+     * @param hasUpperBound
+     *            Indicates whether an upperbound should be enforced for values
+     *            of this argument.
+     * @param upperBound
+     *            The upper bound that should be enforced for values of this
+     *            argument.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean isMultiValued,
+            final boolean needsValue, final LocalizableMessage valuePlaceholder,
+            final int defaultValue, final String propertyName, final boolean hasLowerBound,
+            final double lowerBound, final boolean hasUpperBound, final double upperBound,
+            final LocalizableMessage description) throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued, needsValue,
+                valuePlaceholder, String.valueOf(defaultValue), propertyName, description);
 
-      invalidReason.append(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get(getName(),
-          intValue, upperBound));
-      return false;
+        this.hasLowerBound = hasLowerBound;
+        this.hasUpperBound = hasUpperBound;
+        this.lowerBound = lowerBound;
+        this.upperBound = upperBound;
+
+        if (hasLowerBound && hasUpperBound && (lowerBound > upperBound)) {
+            final LocalizableMessage message =
+                    ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(name, lowerBound, upperBound);
+            throw new ArgumentException(message);
+        }
     }
 
-    // At this point, the value should be acceptable.
-    return true;
-  }
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param isMultiValued
+     *            Indicates whether this argument may be specified more than
+     *            once to provide multiple values.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param defaultValue
+     *            The default value that should be used for this argument if
+     *            none is provided in a properties file or on the command line.
+     *            This may be <CODE>null</CODE> if there is no generic default.
+     * @param propertyName
+     *            The name of the property in a property file that may be used
+     *            to override the default value but will be overridden by a
+     *            command-line argument.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean isMultiValued,
+            final boolean needsValue, final LocalizableMessage valuePlaceholder,
+            final int defaultValue, final String propertyName, final LocalizableMessage description)
+            throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued, needsValue,
+                valuePlaceholder, String.valueOf(defaultValue), propertyName, description);
+
+        hasLowerBound = false;
+        hasUpperBound = false;
+        lowerBound = Integer.MIN_VALUE;
+        upperBound = Integer.MAX_VALUE;
+    }
+
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param hasLowerBound
+     *            Indicates whether a lower bound should be enforced for values
+     *            of this argument.
+     * @param lowerBound
+     *            The lower bound that should be enforced for values of this
+     *            argument.
+     * @param hasUpperBound
+     *            Indicates whether an upperbound should be enforced for values
+     *            of this argument.
+     * @param upperBound
+     *            The upper bound that should be enforced for values of this
+     *            argument.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean needsValue,
+            final LocalizableMessage valuePlaceholder, final boolean hasLowerBound,
+            final double lowerBound, final boolean hasUpperBound, final double upperBound,
+            final LocalizableMessage description) throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
+                valuePlaceholder, null, null, description);
+
+        this.hasLowerBound = hasLowerBound;
+        this.hasUpperBound = hasUpperBound;
+        this.lowerBound = lowerBound;
+        this.upperBound = upperBound;
+
+        if (hasLowerBound && hasUpperBound && (lowerBound > upperBound)) {
+            final LocalizableMessage message =
+                    ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(name, lowerBound, upperBound);
+            throw new ArgumentException(message);
+        }
+    }
+
+    /**
+     * Creates a new integer argument with the provided information.
+     *
+     * @param name
+     *            The generic name that should be used to refer to this
+     *            argument.
+     * @param shortIdentifier
+     *            The single-character identifier for this argument, or
+     *            <CODE>null</CODE> if there is none.
+     * @param longIdentifier
+     *            The long identifier for this argument, or <CODE>null</CODE> if
+     *            there is none.
+     * @param isRequired
+     *            Indicates whether this argument must be specified on the
+     *            command line.
+     * @param needsValue
+     *            Indicates whether this argument requires a value.
+     * @param valuePlaceholder
+     *            The placeholder for the argument value that will be displayed
+     *            in usage information, or <CODE>null</CODE> if this argument
+     *            does not require a value.
+     * @param description
+     *            LocalizableMessage for the description of this argument.
+     * @throws ArgumentException
+     *             If there is a problem with any of the parameters used to
+     *             create this argument.
+     */
+    public IntegerArgument(final String name, final Character shortIdentifier,
+            final String longIdentifier, final boolean isRequired, final boolean needsValue,
+            final LocalizableMessage valuePlaceholder, final LocalizableMessage description)
+            throws ArgumentException {
+        super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
+                valuePlaceholder, null, null, description);
+
+        hasLowerBound = false;
+        hasUpperBound = false;
+        lowerBound = Double.MIN_VALUE;
+        upperBound = Double.MAX_VALUE;
+    }
+
+    /**
+     * Retrieves the lower bound that may be enforced for values of this
+     * argument.
+     *
+     * @return The lower bound that may be enforced for values of this argument.
+     */
+    public double getLowerBound() {
+        return lowerBound;
+    }
+
+    /**
+     * Retrieves the upper bound that may be enforced for values of this
+     * argument.
+     *
+     * @return The upper bound that may be enforced for values of this argument.
+     */
+    public double getUpperBound() {
+        return upperBound;
+    }
+
+    /**
+     * Indicates whether a lower bound should be enforced for values of this
+     * argument.
+     *
+     * @return <CODE>true</CODE> if a lower bound should be enforced for values
+     *         of this argument, or <CODE>false</CODE> if not.
+     */
+    public boolean hasLowerBound() {
+        return hasLowerBound;
+    }
+
+    /**
+     * Indicates whether a upper bound should be enforced for values of this
+     * argument.
+     *
+     * @return <CODE>true</CODE> if a upper bound should be enforced for values
+     *         of this argument, or <CODE>false</CODE> if not.
+     */
+    public boolean hasUpperBound() {
+        return hasUpperBound;
+    }
+
+    /**
+     * Indicates whether the provided value is acceptable for use in this
+     * argument.
+     *
+     * @param valueString
+     *            The value for which to make the determination.
+     * @param invalidReason
+     *            A buffer into which the invalid reason may be written if the
+     *            value is not acceptable.
+     * @return <CODE>true</CODE> if the value is acceptable, or
+     *         <CODE>false</CODE> if it is not.
+     */
+    @Override
+    public boolean valueIsAcceptable(final String valueString,
+            final LocalizableMessageBuilder invalidReason) {
+        // First, the value must be decodable as an integer.
+        double intValue;
+        try {
+            intValue = Double.parseDouble(valueString);
+        } catch (final Exception e) {
+            invalidReason.append(ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, getName()));
+            return false;
+        }
+
+        // If there is a lower bound, then the value must be greater than or
+        // equal to it.
+        if (hasLowerBound && (intValue < lowerBound)) {
+            invalidReason.append(ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get(getName(), intValue,
+                    lowerBound));
+            return false;
+        }
+
+        // If there is an upper bound, then the value must be less than or
+        // equal to it.
+        if (hasUpperBound && (intValue > upperBound)) {
+
+            invalidReason.append(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get(getName(), intValue,
+                    upperBound));
+            return false;
+        }
+
+        // At this point, the value should be acceptable.
+        return true;
+    }
 }

--
Gitblit v1.10.0