View Javadoc
1   package org.apache.fulcrum.intake.validator;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.text.ParseException;
23  
24  import org.apache.commons.lang3.StringUtils;
25  
26  /**
27   * Validator for boolean field types.<br><br>
28   *
29   * Values are validated by attempting to match the value to
30   * a list of strings for true and false values.  The string
31   * values are compared without regard to case.<br>
32   *
33   * Valid values for Boolean.TRUE:
34   * <ul>
35   * <li>TRUE</li>
36   * <li>T</li>
37   * <li>YES</li>
38   * <li>Y</li>
39   * <li>1</li>
40   * <li>ON</li>
41   * </ul>
42   * Valid values for Boolean.FALSE:
43   * <ul>
44   * <li>FALSE</li>
45   * <li>F</li>
46   * <li>NO</li>
47   * <li>N</li>
48   * <li>0</li>
49   * <li>OFF</li>
50   * </ul>
51   *
52   * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
53   * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
54   * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
55   * @version $Id$
56   */
57  public class BooleanValidator
58          extends DefaultValidator<Boolean>
59  {
60      /** String values which would evaluate to Boolean.TRUE */
61      private static String[] trueValues = {"TRUE","T","YES","Y","1","ON"};
62  
63      /** String values which would evaluate to Boolean.FALSE */
64      private static String[] falseValues = {"FALSE","F","NO","N","0","OFF"};
65  
66      /**
67       * Default Constructor
68       */
69      public BooleanValidator()
70      {
71          super();
72      }
73  
74      /**
75       * Determine whether a testValue meets the criteria specified
76       * in the constraints defined for this validator
77       *
78       * @param testValue a <code>String</code> to be tested
79       * @throws ValidationException containing an error message if the
80       * testValue did not pass the validation tests.
81       */
82      @Override
83  	public void assertValidity(String testValue)
84              throws ValidationException
85      {
86          super.assertValidity(testValue);
87  
88          if (required || StringUtils.isNotEmpty(testValue))
89          {
90              try
91              {
92                  parse(testValue);
93              }
94              catch (ParseException e)
95              {
96                  throw new ValidationException(e.getMessage());
97              }
98          }
99      }
100 
101     /**
102      * Parses a string value into a Boolean object.
103      *
104      * @param stringValue the value to parse
105      * @return a <code>Boolean</code> object
106      * @throws ParseException if the value cannot be parsed to a boolean
107      */
108     public Boolean parse(String stringValue)
109             throws ParseException
110     {
111         Boolean result = null;
112 
113         for (int cnt = 0;
114              cnt < Math.max(trueValues.length, falseValues.length); cnt++)
115         {
116             // Short-cut evaluation or bust!
117             if (cnt < trueValues.length &&
118                     stringValue.equalsIgnoreCase(trueValues[cnt]))
119             {
120                 result = Boolean.TRUE;
121                 break;
122             }
123 
124             if (cnt < falseValues.length &&
125                     stringValue.equalsIgnoreCase(falseValues[cnt]))
126             {
127                 result = Boolean.FALSE;
128                 break;
129             }
130         }
131 
132         if (result == null)
133         {
134             throw new ParseException(stringValue +
135                     " could not be converted to a Boolean", 0);
136         }
137         return result;
138     }
139 }