View Javadoc

    1   /*
    2    * $Id: BigIntegerValidator.java 386637 2006-03-17 13:22:26Z niallp $
    3    * $Revision: 386637 $
    4    * $Date: 2006-03-17 13:22:26 +0000 (Fri, 17 Mar 2006) $
    5    *
    6    * ====================================================================
    7    * Copyright 2006 The Apache Software Foundation
    8    *
    9    * Licensed under the Apache License, Version 2.0 (the "License");
    10   * you may not use this file except in compliance with the License.
    11   * You may obtain a copy of the License at
    12   *
    13   *     http://www.apache.org/licenses/LICENSE-2.0
    14   *
    15   * Unless required by applicable law or agreed to in writing, software
    16   * distributed under the License is distributed on an "AS IS" BASIS,
    17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    18   * See the License for the specific language governing permissions and
    19   * limitations under the License.
    20   */
    21  package org.apache.commons.validator.routines;
    22
    23  import java.math.BigInteger;
    24  import java.text.Format;
    25  import java.util.Locale;
    26
    27  /***
    28   * <p><b>BigInteger Validation</b> and Conversion routines (<code>java.math.BigInteger</code>).</p>
    29   *
    30   * <p>This validator provides a number of methods for
    31   *    validating/converting a <code>String</code> value to
    32   *    a <code>BigInteger</code> using <code>java.text.NumberFormat</code>
    33   *    to parse either:</p>
    34   *    <ul>
    35   *       <li>using the default format for the default <code>Locale</code></li>
    36   *       <li>using a specified pattern with the default <code>Locale</code></li>
    37   *       <li>using the default format for a specified <code>Locale</code></li>
    38   *       <li>using a specified pattern with a specified <code>Locale</code></li>
    39   *    </ul>
    40   *
    41   * <p>Use one of the <code>isValid()</code> methods to just validate or
    42   *    one of the <code>validate()</code> methods to validate and receive a
    43   *    <i>converted</i> <code>BigInteger</code> value.</p>
    44   *
    45   * <p>Once a value has been sucessfully converted the following
    46   *    methods can be used to perform minimum, maximum and range checks:</p>
    47   *    <ul>
    48   *       <li><code>minValue()</code> checks whether the value is greater
    49   *           than or equal to a specified minimum.</li>
    50   *       <li><code>maxValue()</code> checks whether the value is less
    51   *           than or equal to a specified maximum.</li>
    52   *       <li><code>isInRange()</code> checks whether the value is within
    53   *           a specified range of values.</li>
    54   *    </ul>
    55   *
    56   * <p>So that the same mechanism used for parsing an <i>input</i> value
    57   *    for validation can be used to format <i>output</i>, corresponding
    58   *    <code>format()</code> methods are also provided. That is you can
    59   *    format either:</p>
    60   *    <ul>
    61   *       <li>using the default format for the default <code>Locale</code></li>
    62   *       <li>using a specified pattern with the default <code>Locale</code></li>
    63   *       <li>using the default format for a specified <code>Locale</code></li>
    64   *       <li>using a specified pattern with a specified <code>Locale</code></li>
    65   *    </ul>
    66   *
    67   * @version $Revision: 386637 $ $Date: 2006-03-17 13:22:26 +0000 (Fri, 17 Mar 2006) $
    68   * @since Validator 1.3.0
    69   */
    70  public class BigIntegerValidator extends AbstractNumberValidator {
    71
    72      private static final BigIntegerValidator VALIDATOR = new BigIntegerValidator();
    73
    74      /***
    75       * Return a singleton instance of this validator.
    76       * @return A singleton instance of the BigIntegerValidator.
    77       */
    78      public static BigIntegerValidator getInstance() {
    79          return VALIDATOR;
    80      }
    81
    82      /***
    83       * Construct a <i>strict</i> instance.
    84       */
    85      public BigIntegerValidator() {
    86          this(true, STANDARD_FORMAT);
    87      }
    88
    89      /***
    90       * <p>Construct an instance with the specified strict setting
    91       *    and format type.</p>
    92       *
    93       * <p>The <code>formatType</code> specified what type of
    94       *    <code>NumberFormat</code> is created - valid types
    95       *    are:</p>
    96       *    <ul>
    97       *       <li>AbstractNumberValidator.STANDARD_FORMAT -to create
    98       *           <i>standard</i> number formats (the default).</li>
    99       *       <li>AbstractNumberValidator.CURRENCY_FORMAT -to create
    100      *           <i>currency</i> number formats.</li>
    101      *       <li>AbstractNumberValidator.PERCENT_FORMAT -to create
    102      *           <i>percent</i> number formats (the default).</li>
    103      *    </ul>
    104      *
    105      * @param strict <code>true</code> if strict
    106      *        <code>Format</code> parsing should be used.
    107      * @param formatType The <code>NumberFormat</code> type to
    108      *        create for validation, default is STANDARD_FORMAT.
    109      */
    110     public BigIntegerValidator(boolean strict, int formatType) {
    111         super(strict, formatType, false);
    112     }
    113
    114     /***
    115      * <p>Validate/convert a <code>BigInteger</code> using the default
    116      *    <code>Locale</code>.
    117      *
    118      * @param value The value validation is being performed on.
    119      * @return The parsed <code>BigInteger</code> if valid or <code>null</code>
    120      *  if invalid.
    121      */
    122     public BigInteger validate(String value) {
    123         return (BigInteger)parse(value, (String)null, (Locale)null);
    124     }
    125
    126     /***
    127      * <p>Validate/convert a <code>BigInteger</code> using the
    128      *    specified <i>pattern</i>.
    129      *
    130      * @param value The value validation is being performed on.
    131      * @param pattern The pattern used to validate the value against.
    132      * @return The parsed <code>BigInteger</code> if valid or <code>null</code> if invalid.
    133      */
    134     public BigInteger validate(String value, String pattern) {
    135         return (BigInteger)parse(value, pattern, (Locale)null);
    136     }
    137
    138     /***
    139      * <p>Validate/convert a <code>BigInteger</code> using the
    140      *    specified <code>Locale</code>.
    141      *
    142      * @param value The value validation is being performed on.
    143      * @param locale The locale to use for the number format, system default if null.
    144      * @return The parsed <code>BigInteger</code> if valid or <code>null</code> if invalid.
    145      */
    146     public BigInteger validate(String value, Locale locale) {
    147         return (BigInteger)parse(value, (String)null, locale);
    148     }
    149
    150     /***
    151      * <p>Validate/convert a <code>BigInteger</code> using the
    152      *    specified pattern and/ or <code>Locale</code>.
    153      *
    154      * @param value The value validation is being performed on.
    155      * @param pattern The pattern used to validate the value against, or the
    156      *        default for the <code>Locale</code> if <code>null</code>.
    157      * @param locale The locale to use for the date format, system default if null.
    158      * @return The parsed <code>BigInteger</code> if valid or <code>null</code> if invalid.
    159      */
    160     public BigInteger validate(String value, String pattern, Locale locale) {
    161         return (BigInteger)parse(value, pattern, locale);
    162     }
    163
    164     /***
    165      * Check if the value is within a specified range.
    166      *
    167      * @param value The <code>Number</code> value to check.
    168      * @param min The minimum value of the range.
    169      * @param max The maximum value of the range.
    170      * @return <code>true</code> if the value is within the
    171      *         specified range.
    172      */
    173     public boolean isInRange(BigInteger value, long min, long max) {
    174         return (value.longValue() >= min && value.longValue() <= max);
    175     }
    176
    177     /***
    178      * Check if the value is greater than or equal to a minimum.
    179      *
    180      * @param value The value validation is being performed on.
    181      * @param min The minimum value.
    182      * @return <code>true</code> if the value is greater than
    183      *         or equal to the minimum.
    184      */
    185     public boolean minValue(BigInteger value, long min) {
    186         return (value.longValue() >= min);
    187     }
    188
    189     /***
    190      * Check if the value is less than or equal to a maximum.
    191      *
    192      * @param value The value validation is being performed on.
    193      * @param max The maximum value.
    194      * @return <code>true</code> if the value is less than
    195      *         or equal to the maximum.
    196      */
    197     public boolean maxValue(BigInteger value, long max) {
    198         return (value.longValue() <= max);
    199     }
    200
    201     /***
    202      * Convert the parsed value to a <code>BigInteger</code>.
    203      *
    204      * @param value The parsed <code>Number</code> object created.
    205      * @param formatter The Format used to parse the value with.
    206      * @return The parsed <code>Number</code> converted to a
    207      *         <code>BigInteger</code>.
    208      */
    209     protected Object processParsedValue(Object value, Format formatter) {
    210         return BigInteger.valueOf(((Number)value).longValue());
    211     }
    212 }