View Javadoc

1   /*
2    * $Id: LongValidator.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.text.Format;
24  import java.util.Locale;
25  
26  /***
27   * <p><b>Long Validation</b> and Conversion routines (<code>java.lang.Long</code>).</p>
28   *
29   * <p>This validator provides a number of methods for
30   *    validating/converting a <code>String</code> value to
31   *    a <code>Long</code> using <code>java.text.NumberFormat</code>
32   *    to parse either:</p>
33   *    <ul>
34   *       <li>using the default format for the default <code>Locale</code></li>
35   *       <li>using a specified pattern with the default <code>Locale</code></li>
36   *       <li>using the default format for a specified <code>Locale</code></li>
37   *       <li>using a specified pattern with a specified <code>Locale</code></li>
38   *    </ul>
39   *    
40   * <p>Use one of the <code>isValid()</code> methods to just validate or
41   *    one of the <code>validate()</code> methods to validate and receive a
42   *    <i>converted</i> <code>Long</code> value.</p>
43   * 
44   * <p>Once a value has been sucessfully converted the following
45   *    methods can be used to perform minimum, maximum and range checks:</p>
46   *    <ul>
47   *       <li><code>minValue()</code> checks whether the value is greater
48   *           than or equal to a specified minimum.</li>
49   *       <li><code>maxValue()</code> checks whether the value is less
50   *           than or equal to a specified maximum.</li>
51   *       <li><code>isInRange()</code> checks whether the value is within
52   *           a specified range of values.</li>
53   *    </ul>
54   * 
55   * <p>So that the same mechanism used for parsing an <i>input</i> value 
56   *    for validation can be used to format <i>output</i>, corresponding
57   *    <code>format()</code> methods are also provided. That is you can 
58   *    format either:</p>
59   *    <ul>
60   *       <li>using a specified pattern</li>
61   *       <li>using the format for a specified <code>Locale</code></li>
62   *       <li>using the format for the <i>default</i> <code>Locale</code></li>
63   *    </ul>
64   *
65   * @version $Revision: 386637 $ $Date: 2006-03-17 13:22:26 +0000 (Fri, 17 Mar 2006) $
66   * @since Validator 1.3.0
67   */
68  public class LongValidator extends AbstractNumberValidator {
69  
70      private static final LongValidator VALIDATOR = new LongValidator();
71  
72      /***
73       * Return a singleton instance of this validator.
74       * @return A singleton instance of the LongValidator.
75       */
76      public static LongValidator getInstance() {
77          return VALIDATOR;
78      }
79  
80      /***
81       * Construct a <i>strict</i> instance.
82       */
83      public LongValidator() {
84          this(true, STANDARD_FORMAT);
85      }
86  
87      /***
88       * <p>Construct an instance with the specified strict setting
89       *    and format type.</p>
90       *    
91       * <p>The <code>formatType</code> specified what type of
92       *    <code>NumberFormat</code> is created - valid types
93       *    are:</p>
94       *    <ul>
95       *       <li>AbstractNumberValidator.STANDARD_FORMAT -to create
96       *           <i>standard</i> number formats (the default).</li>
97       *       <li>AbstractNumberValidator.CURRENCY_FORMAT -to create
98       *           <i>currency</i> number formats.</li>
99       *       <li>AbstractNumberValidator.PERCENT_FORMAT -to create
100      *           <i>percent</i> number formats (the default).</li>
101      *    </ul>
102      * 
103      * @param strict <code>true</code> if strict 
104      *        <code>Format</code> parsing should be used.
105      * @param formatType The <code>NumberFormat</code> type to
106      *        create for validation, default is STANDARD_FORMAT.
107      */
108     public LongValidator(boolean strict, int formatType) {
109         super(strict, formatType, false);
110     }
111 
112     /***
113      * <p>Validate/convert a <code>Long</code> using the default
114      *    <code>Locale</code>. 
115      *
116      * @param value The value validation is being performed on.
117      * @return The parsed <code>Long</code> if valid or <code>null</code>
118      *  if invalid.
119      */
120     public Long validate(String value) {
121         return (Long)parse(value, (String)null, (Locale)null);
122     }
123 
124     /***
125      * <p>Validate/convert a <code>Long</code> using the
126      *    specified <i>pattern</i>. 
127      *
128      * @param value The value validation is being performed on.
129      * @param pattern The pattern used to validate the value against.
130      * @return The parsed <code>Long</code> if valid or <code>null</code> if invalid.
131      */
132     public Long validate(String value, String pattern) {
133         return (Long)parse(value, pattern, (Locale)null);
134     }
135 
136     /***
137      * <p>Validate/convert a <code>Long</code> using the
138      *    specified <code>Locale</code>. 
139      *
140      * @param value The value validation is being performed on.
141      * @param locale The locale to use for the number format, system default if null.
142      * @return The parsed <code>Long</code> if valid or <code>null</code> if invalid.
143      */
144     public Long validate(String value, Locale locale) {
145         return (Long)parse(value, (String)null, locale);
146     }
147 
148     /***
149      * <p>Validate/convert a <code>Long</code> using the
150      *    specified pattern and/ or <code>Locale</code>. 
151      *
152      * @param value The value validation is being performed on.
153      * @param pattern The pattern used to validate the value against, or the
154      *        default for the <code>Locale</code> if <code>null</code>.
155      * @param locale The locale to use for the date format, system default if null.
156      * @return The parsed <code>Long</code> if valid or <code>null</code> if invalid.
157      */
158     public Long validate(String value, String pattern, Locale locale) {
159         return (Long)parse(value, pattern, locale);
160     }
161 
162     /***
163      * Check if the value is within a specified range.
164      * 
165      * @param value The <code>Number</code> value to check.
166      * @param min The minimum value of the range.
167      * @param max The maximum value of the range.
168      * @return <code>true</code> if the value is within the
169      *         specified range.
170      */
171     public boolean isInRange(long value, long min, long max) {
172         return (value >= min && value <= max);
173     }
174 
175     /***
176      * Check if the value is within a specified range.
177      * 
178      * @param value The <code>Number</code> value to check.
179      * @param min The minimum value of the range.
180      * @param max The maximum value of the range.
181      * @return <code>true</code> if the value is within the
182      *         specified range.
183      */
184     public boolean isInRange(Long value, long min, long max) {
185         return isInRange(value.longValue(), min, max);
186     }
187 
188     /***
189      * Check if the value is greater than or equal to a minimum.
190      * 
191      * @param value The value validation is being performed on.
192      * @param min The minimum value.
193      * @return <code>true</code> if the value is greater than
194      *         or equal to the minimum.
195      */
196     public boolean minValue(long value, long min) {
197         return (value >= min);
198     }
199 
200     /***
201      * Check if the value is greater than or equal to a minimum.
202      * 
203      * @param value The value validation is being performed on.
204      * @param min The minimum value.
205      * @return <code>true</code> if the value is greater than
206      *         or equal to the minimum.
207      */
208     public boolean minValue(Long value, long min) {
209         return minValue(value.longValue(), min);
210     }
211 
212     /***
213      * Check if the value is less than or equal to a maximum.
214      * 
215      * @param value The value validation is being performed on.
216      * @param max The maximum value.
217      * @return <code>true</code> if the value is less than
218      *         or equal to the maximum.
219      */
220     public boolean maxValue(long value, long max) {
221         return (value <= max);
222     }
223 
224     /***
225      * Check if the value is less than or equal to a maximum.
226      * 
227      * @param value The value validation is being performed on.
228      * @param max The maximum value.
229      * @return <code>true</code> if the value is less than
230      *         or equal to the maximum.
231      */
232     public boolean maxValue(Long value, long max) {
233         return maxValue(value.longValue(), max);
234     }
235 
236     /***
237      * Convert the parsed value to a <code>Long</code>.
238      * 
239      * @param value The parsed <code>Number</code> object created.
240      * @param formatter The Format used to parse the value with.
241      * @return The parsed <code>Number</code> converted to a 
242      *         <code>Long</code>.
243      */
244     protected Object processParsedValue(Object value, Format formatter) {
245 
246         if (value instanceof Long) {
247             return value;
248         } else {
249             return new Long(((Number)value).longValue());
250         }
251 
252     }
253 }