KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fulcrum > intake > validator > DefaultValidator


1 package org.apache.fulcrum.intake.validator;
2
3 /* ====================================================================
4  * The Apache Software License, Version 1.1
5  *
6  * Copyright (c) 2001 The Apache Software Foundation. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution,
22  * if any, must include the following acknowledgment:
23  * "This product includes software developed by the
24  * Apache Software Foundation (http://www.apache.org/)."
25  * Alternately, this acknowledgment may appear in the software itself,
26  * if and wherever such third-party acknowledgments normally appear.
27  *
28  * 4. The names "Apache" and "Apache Software Foundation" and
29  * "Apache Turbine" must not be used to endorse or promote products
30  * derived from this software without prior written permission. For
31  * written permission, please contact apache@apache.org.
32  *
33  * 5. Products derived from this software may not be called "Apache",
34  * "Apache Turbine", nor may "Apache" appear in their name, without
35  * prior written permission of the Apache Software Foundation.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals on behalf of the Apache Software Foundation. For more
53  * information on the Apache Software Foundation, please see
54  * <http://www.apache.org/>.
55  */

56
57 import java.util.Map JavaDoc;
58 import org.apache.regexp.RE;
59 import org.apache.fulcrum.ServiceException;
60
61 /**
62  * A validator that will compare a testValue against the following
63  * constraints:
64  * <table>
65  * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
66  * <tr><td>required</td><td>true|false</td><td>false</td></tr>
67  * <tr><td>mask</td><td>regexp</td><td>&nbsp;</td></tr>
68  * <tr><td>minLength</td><td>integer</td><td>0</td></tr>
69  * <tr><td>maxLength</td><td>integer</td><td>&nbsp;</td></tr>
70  * </table>
71  *
72  * This validator can serve as the base class for more specific validators
73  *
74  * @author <a HREF="mailto:jmcnally@collab.net">John McNally</a>
75  * @version $Id: DefaultValidator.java,v 1.1 2004/11/12 10:26:02 epugh Exp $
76  */

77 public class DefaultValidator
78     implements Validator, InitableByConstraintMap
79 {
80     protected boolean required;
81     protected String JavaDoc requiredMessage;
82     protected RE mask;
83     protected String JavaDoc maskMessage;
84     protected int minLength;
85     protected String JavaDoc minLengthMessage;
86     protected int maxLength;
87     protected String JavaDoc maxLengthMessage;
88
89     protected String JavaDoc message;
90
91     public DefaultValidator(Map JavaDoc paramMap)
92         throws ServiceException
93     {
94         init(paramMap);
95     }
96
97     public DefaultValidator()
98     {
99     }
100
101
102
103     /**
104      * Extract the relevant parameters from the constraints listed
105      * in <rule> tags within the intake.xml file.
106      *
107      * @param paramMap a <code>Map</code> of <code>Rule</code>'s
108      * containing constraints on the input.
109      * @exception ServiceException if an error occurs
110      */

111     public void init(Map JavaDoc paramMap)
112         throws ServiceException
113     {
114         mask = null;
115         maskMessage = null;
116         minLength = 0;
117         minLengthMessage = null;
118         maxLength = 0;
119         maxLengthMessage = null;
120
121         Constraint constraint = (Constraint)paramMap.get("mask");
122         if ( constraint != null )
123         {
124             String JavaDoc param = constraint.getValue();
125             setMask(param);
126             maskMessage = constraint.getMessage();
127         }
128
129         constraint = (Constraint)paramMap.get("minLength");
130         if ( constraint != null )
131         {
132             String JavaDoc param = constraint.getValue();
133             minLength = Integer.parseInt(param);
134             minLengthMessage = constraint.getMessage();
135         }
136
137         constraint = (Constraint)paramMap.get("maxLength");
138         if ( constraint != null )
139         {
140             String JavaDoc param = constraint.getValue();
141             maxLength = Integer.parseInt(param);
142             maxLengthMessage = constraint.getMessage();
143         }
144
145         constraint = (Constraint)paramMap.get("required");
146         if ( constraint == null )
147         {
148             required = false;
149         }
150         else
151         {
152             String JavaDoc param = constraint.getValue();
153             required = new Boolean JavaDoc(param).booleanValue();
154             requiredMessage = constraint.getMessage();
155         }
156     }
157
158     /**
159      * Determine whether a testValue meets the criteria specified
160      * in the constraints defined for this validator
161      *
162      * @param testValue a <code>String</code> to be tested
163      * @return true if valid, false otherwise
164      */

165     public boolean isValid(String JavaDoc testValue)
166     {
167         boolean valid = false;
168         try
169         {
170             assertValidity(testValue);
171             valid = true;
172         }
173         catch (ValidationException ve)
174         {
175             valid = false;
176         }
177         return valid;
178     }
179
180     /**
181      * Determine whether a testValue meets the criteria specified
182      * in the constraints defined for this validator
183      *
184      * @param testValue a <code>String</code> to be tested
185      * @exception ValidationException containing an error message if the
186      * testValue did not pass the validation tests.
187      */

188     public void assertValidity(String JavaDoc testValue)
189         throws ValidationException
190     {
191         message = null;
192
193         if ( (!required && minLength == 0)
194              && ( testValue == null || testValue.length() == 0) )
195         {
196             return;
197         }
198         else if ( required
199                   && ( testValue == null || testValue.length() == 0))
200         {
201             message = requiredMessage;
202             throw new ValidationException(requiredMessage);
203         }
204
205         // allow subclasses first chance at validation
206
doAssertValidity(testValue);
207
208         if ( mask != null && !mask.match(testValue) )
209         {
210             message = maskMessage;
211             throw new ValidationException(maskMessage);
212         }
213         if ( minLength > 0 && testValue.length() < minLength )
214         {
215             message = minLengthMessage;
216             throw new ValidationException(minLengthMessage);
217         }
218         if ( maxLength > 0 && testValue.length() > maxLength )
219         {
220             message = maxLengthMessage;
221             throw new ValidationException(maxLengthMessage);
222         }
223     }
224
225     /**
226      * Get the last error message resulting from invalid input.
227      *
228      * @return a <code>String</code> message, or the empty String "".
229      */

230     public String JavaDoc getMessage()
231     {
232         if ( message == null )
233         {
234             return "";
235         }
236         return message;
237     }
238
239
240     /**
241      * Method to allow subclasses to add additional validation
242      */

243     protected void doAssertValidity(String JavaDoc testValue)
244         throws ValidationException
245     {
246     }
247
248     // ************************************************************
249
// ** Bean accessor methods **
250
// ************************************************************
251

252     /**
253      * Get the value of required.
254      * @return value of required.
255      */

256     public boolean isRequired()
257     {
258         return required;
259     }
260
261     /**
262      * Set the value of required.
263      * @param v Value to assign to required.
264      */

265     public void setRequired(boolean v)
266     {
267         this.required = v;
268     }
269
270     /**
271      * Get the value of requiredMessage.
272      * @return value of requiredMessage.
273      */

274     public String JavaDoc getRequiredMessage()
275     {
276         return requiredMessage;
277     }
278
279     /**
280      * Set the value of requiredMessage.
281      * @param v Value to assign to requiredMessage.
282      */

283     public void setRequiredMessage(String JavaDoc v)
284     {
285         this.requiredMessage = v;
286     }
287
288     /**
289      * Get the value of mask.
290      * @return value of mask.
291      */

292     public String JavaDoc getMask()
293     {
294         return mask.toString();
295     }
296
297     /**
298      * Set the value of mask.
299      * @param v Value to assign to mask.
300      */

301     public void setMask(String JavaDoc v)
302         throws ServiceException
303     {
304         try
305         {
306             mask = new RE(v);
307         }
308         catch (org.apache.regexp.RESyntaxException e)
309         {
310             throw new ServiceException(e);
311         }
312     }
313
314     /**
315      * Get the value of maskMessage.
316      * @return value of maskMessage.
317      */

318     public String JavaDoc getMaskMessage()
319     {
320         return maskMessage;
321     }
322
323     /**
324      * Set the value of maskMessage.
325      * @param v Value to assign to maskMessage.
326      */

327     public void setMaskMessage(String JavaDoc v)
328     {
329         this.maskMessage = v;
330     }
331
332     /**
333      * Get the value of minLength.
334      * @return value of minLength.
335      */

336     public int getMinLength()
337     {
338         return minLength;
339     }
340
341     /**
342      * Set the value of minLength.
343      * @param v Value to assign to minLength.
344      */

345     public void setMinLength(int v)
346     {
347         this.minLength = v;
348     }
349
350     /**
351      * Get the value of minLengthMessage.
352      * @return value of minLengthMessage.
353      */

354     public String JavaDoc getMinLengthMessage()
355     {
356         return minLengthMessage;
357     }
358
359     /**
360      * Set the value of minLengthMessage.
361      * @param v Value to assign to minLengthMessage.
362      */

363     public void setMinLengthMessage(String JavaDoc v)
364     {
365         this.minLengthMessage = v;
366     }
367
368     /**
369      * Get the value of maxLength.
370      * @return value of maxLength.
371      */

372     public int getMaxLength()
373     {
374         return maxLength;
375     }
376
377     /**
378      * Set the value of maxLength.
379      * @param v Value to assign to maxLength.
380      */

381     public void setMaxLength(int v)
382     {
383         this.maxLength = v;
384     }
385
386     /**
387      * Get the value of maxLengthMessage.
388      * @return value of maxLengthMessage.
389      */

390     public String JavaDoc getMaxLengthMessage()
391     {
392         return maxLengthMessage;
393     }
394
395     /**
396      * Set the value of maxLengthMessage.
397      * @param v Value to assign to maxLengthMessage.
398      */

399     public void setMaxLengthMessage(String JavaDoc v)
400     {
401         this.maxLengthMessage = v;
402     }
403 }
404
Popular Tags