Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 48382 invoked from network); 6 Jan 2002 06:03:22 -0000 Received: from unknown (HELO nagoya.betaversion.org) (192.18.49.131) by daedalus.apache.org with SMTP; 6 Jan 2002 06:03:22 -0000 Received: (qmail 10147 invoked by uid 97); 6 Jan 2002 06:03:05 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@jakarta.apache.org Received: (qmail 10064 invoked by uid 97); 6 Jan 2002 06:03:03 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 26759 invoked by uid 97); 6 Jan 2002 05:08:55 -0000 Date: 6 Jan 2002 05:08:44 -0000 Message-ID: <20020106050844.965.qmail@icarus.apache.org> From: dwinterfeldt@apache.org To: jakarta-commons-cvs@apache.org Subject: cvs commit: jakarta-commons/validator/src/share/org/apache/commons/validator Arg.java Constant.java DefaultValidatorLog.java Field.java Form.java FormSet.java GenericValidator.java Msg.java Validator.java ValidatorAction.java ValidatorException.java ValidatorLog.java ValidatorResources.java ValidatorResourcesInitializer.java ValidatorUtil.java Var.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N dwinterfeldt 02/01/05 21:08:44 Added: validator/src/share/org/apache/commons/validator Arg.java Constant.java DefaultValidatorLog.java Field.java Form.java FormSet.java GenericValidator.java Msg.java Validator.java ValidatorAction.java ValidatorException.java ValidatorLog.java ValidatorResources.java ValidatorResourcesInitializer.java ValidatorUtil.java Var.java Log: Initial check in for Commons Validator. Need to switch logging to commons logging package. Revision Changes Path 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Arg.java Index: Arg.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; /** *

This class stores the replacement arguments for a message resource.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class Arg implements Cloneable, java.io.Serializable { /** * The name dependency that this argument goes with (optional). */ protected String name = null; /** * The key or value of the argument. */ protected String key = null; /** * Whether or not the key is a message resource (optional). Defaults to true. * If it is 'true', the value will try to be resolved as a message resource. */ protected String resource = "true"; /** * Gets the name of the dependency. */ public String getName() { return name; } /** * Sets the name of the dependency. */ public void setName(String name) { this.name = name; } /** * Gets the key/value. */ public String getKey() { return key; } /** * Sets the key/value. */ public void setKey(String key) { this.key = key; } /** * Gets whether or not the key is a resource. */ public String getResource() { return resource; } /** * Sets whether or not the key is a resource. */ public void setResource(String resource) { this.resource = resource; } public Object clone() { try { Arg arg = (Arg)super.clone(); if (name != null) arg.name = new String(name); if (key != null) arg.key = new String(key); if (resource != null) arg.resource = new String(resource); return arg; } catch (CloneNotSupportedException e) { throw new InternalError(e.toString()); } } public String toString() { StringBuffer results = new StringBuffer(); results.append("Arg: name="); results.append(name); results.append(" key="); results.append(key); results.append(" resource="); results.append(resource); results.append("\n"); return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Constant.java Index: Constant.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; /** *

Used in the Validation framework for creating a constant. A constant can be * used to define a global or locale level constant that can be used to replace * some values in the Field class.
*    ex: <constant name="zip" value="^\d{5}$" />
*          mask="${zip}"

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class Constant implements java.io.Serializable { /** * The name of the constant. */ private String name = null; /** * The name of the constant. */ private String value = null; /** * Gets the name of the constant. */ public String getName() { return name; } /** * Sets the name of the constant. */ public void setName(String name) { this.name = name; } /** * Gets the value of the constant. */ public String getValue() { return value; } /** * Sets the value of the constant. */ public void setValue(String value) { this.value = value; } public String toString() { StringBuffer results = new StringBuffer(); results.append("Constant: name="); results.append(name); results.append(" value="); results.append(value); results.append("\n"); return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/DefaultValidatorLog.java Index: DefaultValidatorLog.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.CharArrayWriter; import java.io.PrintWriter; import java.io.Serializable; /** *

Default logging that writes to System.out.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class DefaultValidatorLog implements ValidatorLog, Serializable { /** * Gets the debugging detail level for this resource. */ protected int debug = 0; /** * Debug Level if off by default. */ public DefaultValidatorLog(){} /** * Set the debug level. */ public DefaultValidatorLog(int debug){ this.debug = debug; } /** * Gets the debugging detail level for this resource. */ public int getDebug() { return debug; } /** * Sets the debugging detail level for this resource. */ public void setDebug(int debug) { this.debug = debug; } /** * Writes the specified message to the log output. */ public void log(String message) { System.out.println(message); } /** * Writes the specified message and stack trace to the log output. */ public void log(String message, Throwable t) { CharArrayWriter buf = new CharArrayWriter(); PrintWriter writer = new PrintWriter(buf); writer.println(message); t.printStackTrace(writer); System.out.println(buf.toString()); } /** * Writes the specified message to the log output if the debug level is * greater than zero. */ public void info(String message) { if (debug > 0) System.out.println(message); } /** * Writes the specified message and stack trace to the log output * if the debug level is greater than zero. */ public void info(String message, Throwable t) { if (debug > 0) { CharArrayWriter buf = new CharArrayWriter(); PrintWriter writer = new PrintWriter(buf); writer.println(message); t.printStackTrace(writer); System.out.println(buf.toString()); } } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Field.java Index: Field.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.StringTokenizer; import org.apache.commons.collections.FastHashMap; /** *

Used in the Validation framework.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt * @see org.apache.commons.validator.Form */ public class Field implements Cloneable, Serializable { /** * This is the value that will be used as a key if the Arg * name field has no value. */ public final static String ARG_DEFAULT = "org.apache.commons.validator.Field.DEFAULT"; public final static String TOKEN_INDEXED = "[]"; protected final static String TOKEN_START = "${"; protected final static String TOKEN_END = "}"; protected final static String TOKEN_VAR = "var:"; protected String property = null; protected String indexedProperty = null; protected String indexedListProperty = null; protected String key = null; protected String depends = null; protected int page = 0; protected int fieldOrder = 0; protected FastHashMap hDependencies = new FastHashMap(); protected FastHashMap hVars = new FastHashMap(); protected FastHashMap hMsgs = new FastHashMap(); protected FastHashMap hArg0 = new FastHashMap(); protected FastHashMap hArg1 = new FastHashMap(); protected FastHashMap hArg2 = new FastHashMap(); protected FastHashMap hArg3 = new FastHashMap(); /** * Gets the page value that the Field is associated with for * validation. */ public int getPage() { return page; } /** * Sets the page value that the Field is associated with for * validation. */ public void setPage(int page) { this.page = page; } /** * Gets the position of the Field in the validation list. */ public int getFieldOrder() { return fieldOrder; } /** * Sets the position of the Field in the validation list. */ public void setFieldOrder(int fieldOrder) { this.fieldOrder = fieldOrder; } /** * Gets the property name of the field. */ public String getProperty() { return property; } /** * Sets the property name of the field. */ public void setProperty(String property) { this.property = property; } /** * Gets the indexed property name of the field. This * is the method name that can take an int as * a parameter for indexed property value retrieval. */ public String getIndexedProperty() { return indexedProperty; } /** * Sets the indexed property name of the field. */ public void setIndexedProperty(String indexedProperty) { this.indexedProperty = indexedProperty; } /** * Gets the indexed property name of the field. This * is the method name that will return an array or a * Collection used to retrieve the * list and then loop through the list performing the specified * validations. */ public String getIndexedListProperty() { return indexedListProperty; } /** * Sets the indexed property name of the field. */ public void setIndexedListProperty(String indexedListProperty) { this.indexedListProperty = indexedListProperty; } /** * Gets the validation rules for this field. */ public String getDepends() { return depends; } /** * Sets the validation rules for this field. */ public void setDepends(String depends) { this.depends = depends; } /** * Add a Msg to the Field. */ public void addMsg(Msg msg) { if (msg != null && msg.getKey() != null && msg.getKey().length() > 0 && msg.getName() != null && msg.getName().length() > 0) hMsgs.put(msg.getName(), msg.getKey()); } /** * Retrieve a message value. */ public String getMsg(String key) { return (String)hMsgs.get(key); } /** * Add a Arg to the arg0 list. */ public void addArg0(Arg arg) { if (arg != null && arg.getKey() != null && arg.getKey().length() > 0) { if (arg.getName() != null && arg.getName().length() > 0) hArg0.put(arg.getName(), arg); else hArg0.put(ARG_DEFAULT, arg); } } /** * Gets the default arg0 Arg object. */ public Arg getArg0() { return (Arg)hArg0.get(ARG_DEFAULT); } /** * Gets the arg0 Arg object based on the key passed in. If the key * finds a null value then the default value will try to be retrieved. */ public Arg getArg0(String key) { Object o = hArg0.get(key); if (o != null) return (Arg)o; else return getArg0(); } /** * Add a Arg to the arg1 list. */ public void addArg1(Arg arg) { if (arg != null && arg.getKey() != null && arg.getKey().length() > 0) { if (arg.getName() != null && arg.getName().length() > 0) hArg1.put(arg.getName(), arg); else hArg1.put(ARG_DEFAULT, arg); } } /** * Gets the default arg1 Arg object. */ public Arg getArg1() { return (Arg)hArg1.get(ARG_DEFAULT); } /** * Gets the arg1 Arg object based on the key passed in. If the key * finds a null value then the default value will try to be retrieved. */ public Arg getArg1(String key) { Object o = hArg1.get(key); if (o != null) return (Arg)o; else return getArg1(); } /** * Add a Arg to the arg2 list. */ public void addArg2(Arg arg) { if (arg != null && arg.getKey() != null && arg.getKey().length() > 0) { if (arg.getName() != null && arg.getName().length() > 0) hArg2.put(arg.getName(), arg); else hArg2.put(ARG_DEFAULT, arg); } } /** * Gets the default arg2 Arg object. */ public Arg getArg2() { return (Arg)hArg2.get(ARG_DEFAULT); } /** * Gets the arg2 Arg object based on the key passed in. If the key * finds a null value then the default value will try to be retrieved. */ public Arg getArg2(String key) { Object o = hArg2.get(key); if (o != null) return (Arg)o; else return getArg2(); } /** * Add a Arg to the arg3 list. */ public void addArg3(Arg arg) { if (arg != null && arg.getKey() != null && arg.getKey().length() > 0) { if (arg.getName() != null && arg.getName().length() > 0) hArg3.put(arg.getName(), arg); else hArg3.put(ARG_DEFAULT, arg); } } /** * Gets the default arg3 Arg object. */ public Arg getArg3() { return (Arg)hArg3.get(ARG_DEFAULT); } /** * Gets the arg3 Arg object based on the key passed in. If the key * finds a null value then the default value will try to be retrieved. */ public Arg getArg3(String key) { Object o = hArg3.get(key); if (o != null) return (Arg)o; else return getArg3(); } /** * Add a Var to the Field. */ public void addVar(Var v) { if (v != null && v.getName() != null && v.getName().length() > 0 && v.getValue() != null) hVars.put(v.getName(), v); } /** * Add a Var, based on the values passed in, to the Field. */ public void addVarParam(String name, String value, String jsType) { if (name != null && name.length() > 0 && value != null) hVars.put(name, new Var(name, value, jsType)); } /** * Retrieve a variable. */ public Var getVar(String mainKey) { return (Var)hVars.get(mainKey); } /** * Retrieve a variable's value. */ public String getVarValue(String mainKey) { String value = null; Object o = hVars.get(mainKey); if (o != null && o instanceof Var) { Var v = (Var)o; value = v.getValue(); } return value; } /** * The Field's variables are returned as an * unmodifiable Map. */ public Map getVars() { return Collections.unmodifiableMap(hVars); } /** * Gets a unique key based on the property and indexedProperty fields. */ public String getKey() { if (key == null) generateKey(); return key; } /** * Sets a unique key for the field. This can be used to change * the key temporarily to have a unique key for an indexed field. */ public void setKey(String key) { this.key = key; } /** * If there is a value specified for the indexedProperty field then * true will be returned. Otherwise it will be false. */ public boolean isIndexed() { if ((indexedProperty != null && indexedProperty.length() > 0) && (indexedListProperty != null && indexedListProperty.length() > 0)) return true; else return false; } /** * Generate correct key value. */ public void generateKey() { if (isIndexed()) key = indexedProperty + TOKEN_INDEXED + "." + property; else key = property; } /** * Replace constants with values in fields and process the depends field * to create the dependency Map. */ public void process(Map globalConstants, Map constants) { hMsgs.setFast(true); hArg0.setFast(true); hArg1.setFast(true); hArg2.setFast(true); hArg3.setFast(true); hVars.setFast(true); generateKey(); // Process FormSet Constants for (Iterator i = constants.keySet().iterator(); i.hasNext(); ) { String key = (String)i.next(); String key2 = TOKEN_START + key + TOKEN_END; String replaceValue = (String)constants.get(key); property = ValidatorUtil.replace(property, key2, replaceValue); processVars(key2, replaceValue); processMessageComponents(key2, replaceValue); } // Process Global Constants for (Iterator i = globalConstants.keySet().iterator(); i.hasNext(); ) { String key = (String)i.next(); String key2 = TOKEN_START + key + TOKEN_END; String replaceValue = (String)globalConstants.get(key); property = ValidatorUtil.replace(property, key2, replaceValue); processVars(key2, replaceValue); processMessageComponents(key2, replaceValue); } // Process Var Constant Replacement for (Iterator i = hVars.keySet().iterator(); i.hasNext(); ) { String key = (String)i.next(); String key2 = TOKEN_START + TOKEN_VAR + key + TOKEN_END; Var var = (Var)hVars.get(key); String replaceValue = var.getValue(); processMessageComponents(key2, replaceValue); } if (getDepends() != null) { StringTokenizer st = new StringTokenizer(getDepends(), ","); String value = ""; while (st.hasMoreTokens()) { String depend = st.nextToken().trim(); if (depend != null && depend.length() > 0) hDependencies.put(depend, value); } hDependencies.setFast(true); } } /** * Replace the vars value with the key/value pairs passed in. */ private void processVars(String key, String replaceValue) { for (Iterator i = hVars.keySet().iterator(); i.hasNext(); ) { String varKey = (String)i.next(); Var var = (Var)hVars.get(varKey); var.setValue(ValidatorUtil.replace(var.getValue(), key, replaceValue)); } } /** * Replace the args key value with the key/value pairs passed in. */ public void processMessageComponents(String key, String replaceValue) { String varKey = TOKEN_START + TOKEN_VAR; // Process Messages if (key != null && !key.startsWith(varKey)) { for (Iterator i = hMsgs.keySet().iterator(); i.hasNext(); ) { String msgKey = (String)i.next(); String value = (String)hMsgs.get(msgKey); hMsgs.put(msgKey, ValidatorUtil.replace(value, key, replaceValue)); } } processArg(hArg0, key, replaceValue); processArg(hArg1, key, replaceValue); processArg(hArg2, key, replaceValue); processArg(hArg3, key, replaceValue); } /** * Replace the arg Collection key value with the key/value pairs passed in. */ private void processArg(Map hArgs, String key, String replaceValue) { for (Iterator i = hArgs.values().iterator(); i.hasNext(); ) { Arg arg = (Arg)i.next(); if (arg != null) arg.setKey(ValidatorUtil.replace(arg.getKey(), key, replaceValue)); } } /** * Checks if the key is listed as a dependency. */ public boolean isDependency(String key) { if (hDependencies != null) return hDependencies.containsKey(key); else return false; } /** * Gets an unmodifiable Set of the dependencies. */ public Collection getDependencies() { return Collections.unmodifiableMap(hDependencies).keySet(); } public Object clone() { try { Field field = (Field)super.clone(); if (key != null) field.setKey(new String(key)); if (property != null) field.setProperty(new String(property)); if (indexedProperty != null) field.setIndexedProperty(new String(indexedProperty)); if (indexedListProperty != null) field.setIndexedListProperty(new String(indexedListProperty)); if (depends != null) field.setDepends(new String(depends)); // page & fieldOrder should be taken care of by clone method field.hDependencies = copyFastHashMap(hDependencies); field.hVars = copyFastHashMap(hVars); field.hMsgs = copyFastHashMap(hMsgs); field.hArg0 = copyFastHashMap(hArg0); field.hArg1 = copyFastHashMap(hArg1); field.hArg2 = copyFastHashMap(hArg2); field.hArg3 = copyFastHashMap(hArg3); return field; } catch (CloneNotSupportedException e) { throw new InternalError(e.toString()); } } /** * Makes a deep copy of a FastHashMap if the values * are String, Msg, Arg, * or Var. Otherwise it is a shallow copy. */ public FastHashMap copyFastHashMap(FastHashMap map) { FastHashMap hResults = new FastHashMap(); for (Iterator i = map.keySet().iterator(); i.hasNext(); ) { String key = (String)i.next(); Object value = map.get(key); if (value instanceof String) { hResults.put(key, new String((String)value)); } else if (value instanceof Msg) { hResults.put(key, ((Msg)value).clone()); } else if (value instanceof Arg) { hResults.put(key, ((Arg)value).clone()); } else if (value instanceof Var) { hResults.put(key, ((Var)value).clone()); } else { hResults.put(key, value); } } hResults.setFast(true); return hResults; } public String toString() { StringBuffer results = new StringBuffer(); results.append("\t\tkey= " + key + "\n"); results.append("\t\tproperty= " + property + "\n"); results.append("\t\tindexedProperty= " + indexedProperty + "\n"); results.append("\t\tindexedListProperty= " + indexedListProperty + "\n"); results.append("\t\tdepends= " + depends + "\n"); results.append("\t\tpage= " + page + "\n"); results.append("\t\tfieldOrder= " + fieldOrder + "\n"); if (hVars != null) { results.append("\t\tVars:\n"); for (Iterator i = hVars.keySet().iterator(); i.hasNext(); ) { Object key = i.next(); results.append("\t\t\t"); results.append(key); results.append("="); results.append(hVars.get(key)); results.append("\n"); } } return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Form.java Index: Form.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.collections.FastHashMap; /** *

Used in the Validation framework.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class Form implements Serializable { /** * The name of the form should match the form name in the action configuration * in the struts-config.xml file. */ protected String name = null; /** * List of Fields. Used to maintain the order they were added in. */ protected List lFields = new ArrayList(); /** * Map of Fields keyed on their property value. */ protected FastHashMap hFields = new FastHashMap(); /** * Gets the name of the form. It should match the form name in * the action configuration in the struts-config.xml file. */ public String getName() { return name; } /** * Sets the name of the form. It should match the form name in * the action configuration in the struts-config.xml file. */ public void setName(String name) { this.name = name; } /** * Add a Field to the Form. */ public void addField(Field f) { if (f != null && f.getProperty() != null && f.getProperty().length() > 0) { lFields.add(f); hFields.put(f.getKey(), f); } } /** * A List of Fields is returned as an * unmodifiable List. */ public List getFields() { return Collections.unmodifiableList(lFields); } /** * A Map of Fields is returned as an * unmodifiable List. */ public Map getFieldMap() { return Collections.unmodifiableMap(hFields); } /** * Processes all of the Form's Fields. */ public void process(Map globalConstants, Map constants) { hFields.setFast(true); for (Iterator i = lFields.iterator(); i.hasNext(); ) { Field f = (Field)i.next(); f.process(globalConstants, constants); } } public String toString() { StringBuffer results = new StringBuffer(); results.append("Form: "); results.append(name); results.append("\n"); for (Iterator i = lFields.iterator(); i.hasNext(); ) { results.append("\tField: \n"); results.append(i.next()); results.append("\n"); } return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/FormSet.java Index: FormSet.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.Collections; import java.util.Iterator; import java.util.Map; import org.apache.commons.collections.FastHashMap; /** *

Used in the Validation framework. It holds a set of Forms * stored associated with a Locale.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class FormSet implements Serializable { /** * Whether or not the this FormSet was processed * for replacing variables in strings with their values. */ private boolean bProcessed = false; /** * Language component of Locale (required). */ private String language = null; /** * Country component of Locale (optional). */ private String country = null; /** * Variant component of Locale (optional). */ private String variant = null; private FastHashMap hForms = new FastHashMap(); /** * Constants */ private FastHashMap hConstants = new FastHashMap(); /** * Whether or not the this FormSet was processed * for replacing variables in strings with their values. */ public boolean isProcessed() { return bProcessed; } /** * Gets the equivalent of the language component of Locale. */ public String getLanguage() { return language; } /** * Sets the equivalent of the language component of Locale. */ public void setLanguage(String language) { this.language = language; } /** * Gets the equivalent of the country component of Locale. */ public String getCountry() { return country; } /** * Sets the equivalent of the country component of Locale. */ public void setCountry(String country) { this.country = country; } /** * Gets the equivalent of the variant component of Locale. */ public String getVariant() { return variant; } /** * Sets the equivalent of the variant component of Locale. */ public void setVariant(String variant) { this.variant = variant; } /** * Add a Constant (locale level). */ public void addConstant(Constant c) { if (c.getName() != null && c.getName().length() > 0 && c.getValue() != null && c.getValue().length() > 0) hConstants.put(c.getName(), c.getValue()); //System.out.println("Add Constant: " + c.getName() + "," + c.getValue()); } /** * Add a Form to the FormSet. */ public void addForm(Form f) { hForms.put(f.getName(), f); //System.out.println("Add Form: " + f.getName()); } /** * Retrieve a Form based on the form name. */ public Form getForm(Object key) { Form f = null; Object o = hForms.get(key); if (o != null) f = (Form)o; return f; } /** * A Map of Forms is returned as an * unmodifiable Map with the key based on the form name. */ public Map getForms() { return Collections.unmodifiableMap(hForms); } /** * Processes all of the Forms, set FastHashMaps * to 'fast' mode. */ public synchronized void process(Map globalConstants) { for (Iterator i = hForms.values().iterator(); i.hasNext(); ) { Form f = (Form)i.next(); f.process(globalConstants, hConstants); } hForms.setFast(true); hConstants.setFast(true); bProcessed = true; } public String toString() { StringBuffer results = new StringBuffer(); results.append("FormSet: language="); results.append(language); results.append(" country="); results.append(country); results.append(" variant="); results.append(variant); results.append("\n"); for (Iterator i = getForms().values().iterator(); i.hasNext(); ) { results.append(" "); results.append(i.next()); results.append("\n"); } return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/GenericValidator.java Index: GenericValidator.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.Date; import java.util.Locale; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.text.ParseException; import org.apache.regexp.RE; import org.apache.regexp.RESyntaxException; /** *

This class performs validations.

* * @author David Winterfeldt */ public class GenericValidator implements Serializable { /** *

Checks if the field isn't null and length of the field is greater than zero not * including whitespace.

* * @param value The value validation is being performed on. */ public static boolean isBlankOrNull(String value) { if (value == null || value.trim().length() == 0) return true; else return false; } /** *

Checks if the value matches the regular expression.

* * @param value The value validation is being performed on. * @param regexp The regular expression. */ public static boolean matchRegexp(String value, String regexp) throws RESyntaxException { if (regexp != null && regexp.length() > 0) { RE r = new RE(regexp); boolean match = r.match(value); return match; } else { return false; } } /** *

Checks if the value can safely be converted to a byte primitive.

* * @param value The value validation is being performed on. */ public static boolean isByte(String value) { try { Byte.parseByte(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the value can safely be converted to a short primitive.

* * @param value The value validation is being performed on. */ public static boolean isShort(String value) { try { Short.parseShort(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the value can safely be converted to a int primitive.

* * @param value The value validation is being performed on. */ public static boolean isInt(String value) { try { Integer.parseInt(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the value can safely be converted to a long primitive.

* * @param value The value validation is being performed on. */ public static boolean isLong(String value) { try { Long.parseLong(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the value can safely be converted to a float primitive.

* * @param value The value validation is being performed on. */ public static boolean isFloat(String value) { try { Float.parseFloat(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the value can safely be converted to a double primitive.

* * @param value The value validation is being performed on. */ public static boolean isDouble(String value) { try { Double.parseDouble(value); } catch (Exception e) { return false; } return true; } /** *

Checks if the field is a valid date. The Locale is * used with java.text.DateFormat. The setLenient method * is set to false for all.

* * @param value The value validation is being performed on. * @param datePattern The pattern passed to SimpleDateFormat. */ public static boolean isDate(String value, Locale locale) { boolean bValid = true; if (value != null) { try { DateFormat formatter = null; if (locale != null) formatter = DateFormat.getDateInstance(DateFormat.SHORT, locale); else formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()); formatter.setLenient(false); Date date = formatter.parse(value); } catch (ParseException e) { bValid = false; } } else { bValid = false; } return bValid; } /** *

Checks if the field is a valid date. The pattern is used with * java.text.SimpleDateFormat. If strict is true, then the * length will be checked so '2/12/1999' will not pass validation with * the format 'MM/dd/yyyy' because the month isn't two digits. * The setLenient method is set to false for all.

* * @param value The value validation is being performed on. * @param datePattern The pattern passed to SimpleDateFormat. * @param strict Whether or not to have an exact match of the datePattern. */ public static boolean isDate(String value, String datePattern, boolean strict) { boolean bValid = true; if (value != null && datePattern != null && datePattern.length() > 0) { try { SimpleDateFormat formatter = new SimpleDateFormat(datePattern); formatter.setLenient(false); Date date = formatter.parse(value); if (strict) { if (datePattern.length() != value.length()) bValid = false; } } catch (ParseException e) { bValid = false; } } else { bValid = false; } return bValid; } /** *

Checks if a value is within a range (min & max specified * in the vars attribute).

* * @param value The value validation is being performed on. * @param min The minimum value of the range. * @param max The maximum value of the range. */ public static boolean isInRange(int value, int min, int max) { if (!(value >= min && value <= max)) return false; else return true; } /** *

Checks if the field is a valid credit card number.

*

Translated to Java by Ted Husted (husted@apache.org).
*     Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

* * @param value The value validation is being performed on. */ public static boolean isCreditCard(String value) { if (!(validateCreditCardLuhnCheck(value) && validateCreditCardPrefixCheck(value))) return false; else return true; } /** *

Checks for a valid credit card number.

*

Translated to Java by Ted Husted (husted@apache.org).
*     Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

* * @param cardNumber Credit Card Number */ protected static boolean validateCreditCardLuhnCheck(String cardNumber) { // number must be validated as 0..9 numeric first!! int no_digit = cardNumber.length(); int oddoeven = no_digit & 1; long sum = 0; for (int count = 0; count < no_digit; count++) { int digit = 0; try { digit = Integer.parseInt(String.valueOf(cardNumber.charAt(count))); } catch (NumberFormatException e) { return false; } if (((count & 1) ^ oddoeven) == 0) { // not digit *= 2; if (digit > 9) digit -= 9; } sum += digit; } if (sum == 0) return false; if (sum % 10 == 0) return true; return false; } /** *

Checks for a valid credit card number.

*

Translated to Java by Ted Husted (husted@apache.org).
*     Reference Sean M. Burke's script at http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl

* * @param cardNumber Credit Card Number */ protected static boolean validateCreditCardPrefixCheck(String cardNumber) { final String AX_PREFIX = "34,37,"; final String VS_PREFIX = "4"; final String MC_PREFIX = "51,52,53,54,55,"; final String DS_PREFIX = "6011"; int length = cardNumber.length(); if (length < 13) return false; boolean valid = false; int cardType = 0; String prefix2 = cardNumber.substring(0,2) + ","; if (AX_PREFIX.indexOf(prefix2) != -1) cardType = 3; if (cardNumber.substring(0,1).equals(VS_PREFIX)) cardType = 4; if (MC_PREFIX.indexOf(prefix2) != -1) cardType = 5; if (cardNumber.substring(0,4).equals(DS_PREFIX)) cardType = 6; if ((cardType==3) && (length==15)) valid = true; if ((cardType==4) && ((length==13) || (length==16))) valid = true; if ((cardType==5) && (length==16)) valid = true; if ((cardType==6) && (length==16)) valid = true; return valid; } /** *

Checks if a field has a valid e-mail address.

*

Based on a script by Sandeep V. Tamhankar (stamhankar@hotmail.com), * http://javascript.internet.com

* * @param value The value validation is being performed on. */ public static boolean isEmail(String value) { boolean bValid = true; try { RE emailPat = new RE("^(.+)@(.+)$"); String specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"; // ??? '/' character was removed before '[' and ']' // I'm not sure if that was the right thing to do. String validChars = "[^\\s" + specialChars + "]"; String quotedUser = "(\"[^\"]*\")"; //RE ipDomainPat = new RE("^\\[(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\]$"); RE ipDomainPat = new RE("^(\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})[.](\\d{1,3})$"); String atom = validChars + '+'; String word = "(" + atom + "|" + quotedUser + ")"; RE userPat = new RE("^" + word + "(\\." + word + ")*$"); RE domainPat = new RE("^" + atom + "(\\." + atom +")*$"); boolean matchEmailPat = emailPat.match(value); if (!matchEmailPat) bValid = false; if (bValid) { if (matchEmailPat) { String user = emailPat.getParen(1); // See if "user" is valid if (!userPat.match(user)) bValid = false; } else { bValid = false; } } String domain = emailPat.getParen(2); if (bValid) { if (ipDomainPat.match(domain)) { // this is an IP address for (int i = 1; i <= 4; i++) { String ipSegment = ipDomainPat.getParen(i); if (ipSegment != null && ipSegment.length() > 0) { int iIpSegment = 0; try { iIpSegment = Integer.parseInt(ipSegment); } catch (Exception e) { bValid = false; } if (iIpSegment > 255) bValid = false; } else { bValid = false; } } } else { if (bValid) { // Domain is symbolic name if (!domainPat.match(domain)) bValid = false; } if (bValid) { RE atomPat = new RE("(" + atom + ")"); boolean match = true; int pos = 0; int i = 0; String[] domainSegment = new String[10]; while (match) { match = atomPat.match(domain, pos); if (match) { domainSegment[i] = atomPat.getParen(1); pos += domainSegment[i].length() + 1; i++; } else { } } int len = i; if (domainSegment[len - 1].length() < 2 || domainSegment[len - 1].length() > 3) bValid = false; // Make sure there's a host name preceding the domain. if (len < 2) bValid = false; } } } } catch (RESyntaxException e) { bValid = false; } catch (Exception e) { bValid = false; } return bValid; } /** *

Checks if the value's length is less than or equal to the max.

* * @param value The value validation is being performed on. * @param max The maximum length. */ public static boolean maxLength(String value, int max) { if (value.length() <= max) return true; else return false; } /** *

Checks if the value's length is greater than or equal to the min.

* * @param value The value validation is being performed on. * @param min The minimum length. */ public static boolean minLength(String value, int min) { if (value.length() >= min) return true; else return false; } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Msg.java Index: Msg.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; /** *

This class can be used to supply an alternative message for a pluggable validator.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class Msg implements Cloneable, java.io.Serializable { /** * The name dependency that this argument goes with (optional). */ protected String name = null; /** * The key or value of the argument. */ protected String key = null; /** * Gets the name of the dependency. */ public String getName() { return name; } /** * Sets the name of the dependency. */ public void setName(String name) { this.name = name; } /** * Gets the key/value. */ public String getKey() { return key; } /** * Sets the key/value. */ public void setKey(String key) { this.key = key; } public Object clone() { try { Msg msg = (Msg)super.clone(); if (key != null) msg.name = new String(name); if (key != null) msg.key = new String(key); return msg; } catch (CloneNotSupportedException e) { throw new InternalError(e.toString()); } } public String toString() { StringBuffer results = new StringBuffer(); results.append("Msg: name="); results.append(name); results.append(" key="); results.append(key); results.append("\n"); return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Validator.java Index: Validator.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import org.apache.commons.beanutils.PropertyUtils; /** *

This class performs validations. The methods are can be configured to be * used in the framework in the validation.xml file. (See example webapp)

* * @author David Winterfeldt */ public class Validator implements Serializable { public static String SERVLET_CONTEXT_KEY = "javax.servlet.ServletContext"; public static String HTTP_SERVLET_REQUEST_KEY = "javax.servlet.http.HttpServletRequest"; public static String MESSAGE_RESOURCES_KEY = "org.apache.struts.util.MessageResources"; public static String LOCALE_KEY = "java.util.Locale"; public static String BEAN_KEY = "java.lang.Object"; public static String ACTION_ERRORS_KEY = "org.apache.struts.action.ActionErrors"; public static String VALIDATOR_ACTION_KEY = "org.apache.commons.validator.ValidatorAction"; public static String FIELD_KEY = "org.apache.commons.validator.Field"; protected ValidatorResources resources = null; protected ValidatorLog logger = null; protected String formName = null; protected HashMap hResources = new HashMap(); protected int page = 0; public Validator(ValidatorResources resources, String formName) { this.resources = resources; this.logger = resources.getLogger(); this.formName = formName; } public void addResource(String key, Object value) { hResources.put(key, value); } public void setPage(int page) { this.page = page; } public int getPage() { return page; } public void validate() throws ValidatorException { Locale locale = null; if (hResources.containsKey(LOCALE_KEY)) locale = (Locale)hResources.get(LOCALE_KEY); if (locale == null) locale = Locale.getDefault(); Form form = null; if ((form = resources.get(locale, formName)) != null) { Map hActions = resources.getValidatorActions(); List lActions = new ArrayList(); Map hActionsRun = new HashMap(); boolean bMoreActions = true; boolean bErrors = false; for (Iterator actions = hActions.values().iterator(); actions.hasNext(); ) lActions.add(actions.next()); while (bMoreActions) { ValidatorAction va = null; int iErrorCount = 0; // FIX ME - These sorts will not work for all variations. // Sort by number dependencies Collections.sort(lActions, new DependencyComparator()); // Sort by number of dependencies successfully run Collections.sort(lActions, new DependencySuccessComparator(hActionsRun)); if (lActions.size() > 0) va = (ValidatorAction)lActions.get(0); if (va != null && va.getDepends() != null && va.getDepends().length() > 0) { StringTokenizer st = new StringTokenizer(va.getDepends(), ","); while (st.hasMoreTokens()) { String depend = st.nextToken().trim(); Object o = hActionsRun.get(depend); //if (logger.getDebug() > 10) // logger.info("***### Validator main - " + va.getName() + " - " + va.getDepends()); if (o == null) { //if (logger.getDebug() > 10) // logger.info("***### Validator o==null - " + va.getName() + " - " + va.getDepends()); lActions.clear(); va = null; bMoreActions = false; break; } else { boolean bContinue = ((Boolean)o).booleanValue(); //if (logger.getDebug() > 10) // logger.info("***### Validator - " + va.getName() + " depend=" + depend + " bContinue=" + bContinue); if (!bContinue) { lActions.clear(); va = null; bMoreActions = false; break; } } } } // For debug /**if (logger.getDebug() > 10) { logger.info("***Order ******************************"); for (Iterator actions = lActions.iterator(); actions.hasNext(); ) { ValidatorAction tmp = (ValidatorAction)actions.next(); logger.info("***Order - " + tmp.getName() + " " + tmp.getDepends()); } logger.info("***Order End ******************************"); }*/ if (va != null) { for (Iterator i = form.getFields().iterator(); i.hasNext(); ) { Field field = (Field)i.next(); if (field.getPage() <= page && (field.getDepends() != null && field.isDependency(va.getName()))) { try { // Add these two Objects to the resources since they reference // the current validator action and field hResources.put(VALIDATOR_ACTION_KEY, va); hResources.put(FIELD_KEY, field); Class c = Class.forName(va.getClassname(), true, this.getClass().getClassLoader()); List lParams = va.getMethodParamsList(); int size = lParams.size(); int beanIndexPos = -1; int fieldIndexPos = -1; Class[] paramClass = new Class[size]; Object[] paramValue = new Object[size]; for (int x = 0; x < size; x++) { String paramKey = (String)lParams.get(x); if (BEAN_KEY.equals(paramKey)) beanIndexPos = x; if (FIELD_KEY.equals(paramKey)) fieldIndexPos = x; // There were problems calling getClass on paramValue[] paramClass[x] = Class.forName(paramKey, true, this.getClass().getClassLoader()); paramValue[x] = hResources.get(paramKey); } Method m = c.getMethod(va.getMethod(), paramClass); // If the method is static we don't need an instance of the class // to call the method. If it isn't, we do. if (!Modifier.isStatic(m.getModifiers())) { try { if (va.getClassnameInstance() == null) { va.setClassnameInstance(c.newInstance()); } } catch (Exception ex) { logger.log("Validator::validate - Couldn't load instance " + "of class " + va.getClassname() + ". " + ex.getMessage()); } } Object result = null; if (field.isIndexed()) { Object oIndexed = PropertyUtils.getProperty(hResources.get(BEAN_KEY), field.getIndexedListProperty()); Object indexedList[] = new Object[0]; if (oIndexed instanceof Collection) indexedList = ((Collection)oIndexed).toArray(); else if(oIndexed.getClass().isArray()) indexedList = (Object[])oIndexed; for (int pos = 0; pos < indexedList.length; pos++) { // Set current iteration object to the parameter array paramValue[beanIndexPos] = indexedList[pos]; // Set field clone with the key modified to represent // the current field Field indexedField = (Field)field.clone(); indexedField.setKey(ValidatorUtil.replace(indexedField.getKey(), Field.TOKEN_INDEXED, "[" + pos + "]")); paramValue[fieldIndexPos] = indexedField; result = m.invoke(va.getClassnameInstance(), paramValue); if (result instanceof Boolean) { Boolean valid = (Boolean)result; if (!valid.booleanValue()) iErrorCount++; } } } else { result = m.invoke(va.getClassnameInstance(), paramValue); if (result instanceof Boolean) { Boolean valid = (Boolean)result; if (!valid.booleanValue()) iErrorCount++; } } } catch (Exception e) { bErrors = true; logger.log("Validator::validate() reflection - " + e.getMessage()); if (e instanceof ValidatorException) throw ((ValidatorException)e); } } } if (iErrorCount == 0) { hActionsRun.put(va.getName(), new Boolean(true)); } else { hActionsRun.put(va.getName(), new Boolean(false)); } if (logger.getDebug() > 10) logger.info("*** Validator - " + va.getName() + " size=" + lActions.size()); if (lActions.size() > 0) lActions.remove(0); if (logger.getDebug() > 10) logger.info("*** Validator - after remove - " + va.getName() + " size=" + lActions.size()); } if (lActions.size() == 0) bMoreActions = false; } } } /** * Sort by number dependencies. */ protected class DependencyComparator implements Comparator { public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction)o1; ValidatorAction va2 = (ValidatorAction)o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ((va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { return va1.getDependencies().size() - va2.getDependencies().size(); } } } /** * Sort by number of dependencies successfully run. */ protected class DependencySuccessComparator implements Comparator { Map hActionsRun = null; public DependencySuccessComparator(Map hActionsRun) { this.hActionsRun = hActionsRun; } public int compare(Object o1, Object o2) { ValidatorAction va1 = (ValidatorAction)o1; ValidatorAction va2 = (ValidatorAction)o2; if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 0; } else if ((va1.getDepends() != null && va1.getDepends().length() > 0) && (va2.getDepends() == null || va2.getDepends().length() == 0)) { return 1; } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && (va2.getDepends() != null && va2.getDepends().length() > 0)) { return -1; } else { int iVA1 = 0; int iVA2 = 0; for (Iterator i = va1.getDependencies().iterator(); i.hasNext(); ) { String depend = ((String)i.next()).trim(); Object o = hActionsRun.get(depend); if (o != null) { if (((Boolean)o).booleanValue()) iVA1++; } } for (Iterator i = va2.getDependencies().iterator(); i.hasNext(); ) { String depend = ((String)i.next()).trim(); Object o = hActionsRun.get(depend); if (o != null) { if (((Boolean)o).booleanValue()) iVA2++; } } return iVA1 - iVA2; } } } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorAction.java Index: ValidatorAction.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.apache.commons.collections.FastHashMap; /** *

Used in the Validation framework. Reference to the class and method to perform * a validation. Used to dynamically instantiate and run a validation method defined * in the validation.xml file.
*     Note: The validation method is assumed to be thread safe.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class ValidatorAction implements Serializable { /** * The name of the validation. */ private String name = null; private String classname = null; private String method = null; // Default for Struts private String methodParams = Validator.BEAN_KEY + "," + Validator.VALIDATOR_ACTION_KEY + "," + Validator.FIELD_KEY + "," + Validator.ACTION_ERRORS_KEY + "," + Validator.HTTP_SERVLET_REQUEST_KEY + "," + Validator.SERVLET_CONTEXT_KEY; private String depends = null; private String msg = null; private String jsFunctionName = null; private String javascript = null; private Object instance = null; private FastHashMap hDependencies = new FastHashMap(); private List lMethodParams = new ArrayList(); /** * Gets the name of the validator action. */ public String getName() { return name; } /** * Sets the name of the validator action. */ public void setName(String name) { this.name = name; } /** * Gets the class of the validator action. */ public String getClassname() { return classname; } /** * Sets the class of the validator action. */ public void setClassname(String classname) { this.classname = classname; } /** * Gets the name of method being called for the validator action. */ public String getMethod() { return method; } /** * Sets the name of method being called for the validator action. */ public void setMethod(String method) { this.method = method; } /** * Gets the method parameters for the method. */ public String getMethodParams() { return methodParams; } /** * Sets the method parameters for the method. */ public void setMethodParams(String methodParams) { this.methodParams = methodParams; } /** * Gets the method parameters for the method. */ public List getMethodParamsList() { return Collections.unmodifiableList(lMethodParams); } /** * Gets the dependencies of the validator action. */ public String getDepends() { return depends; } /** * Sets the dependencies of the validator action. */ public void setDepends(String depends) { this.depends = depends; } /** * Gets the resource message associated with the validator action. */ public String getMsg() { return msg; } /** * Sets the resource message associated with the validator action. */ public void setMsg(String msg) { this.msg = msg; } /** * Gets the Javascript function name. This is optional and will * be used instead of validator action name for the name of the * Javascript function/object. */ public String getJsFunctionName() { return jsFunctionName; } /** * Sets the Javascript function name. This is optional and will * be used instead of validator action name for the name of the * Javascript function/object. */ public void setJsFunctionName(String jsFunctionName) { this.jsFunctionName = jsFunctionName; } /** * Gets the Javascript equivalent of the java class and method * associated with this action. */ public String getJavascript() { return javascript; } /** * Sets the Javascript equivalent of the java class and method * associated with this action. */ public void setJavascript(String javascript) { this.javascript = javascript; } /** * Gets an instance based on the validator action's classname. */ public Object getClassnameInstance() { return instance; } /** * Sets an instance based on the validator action's classname. */ public void setClassnameInstance(Object instance) { this.instance = instance; } /** * Creates a FastHashMap for the isDependency method * based on depends. */ public synchronized void process(Map globalConstants) { // Create FastHashMap for isDependency method if (getDepends() != null) { if (hDependencies == null) hDependencies = new FastHashMap(); StringTokenizer st = new StringTokenizer(getDepends(), ","); String value = ""; while (st.hasMoreTokens()) { String depend = st.nextToken().trim(); if (depend != null && depend.length() > 0) hDependencies.put(depend, value); } hDependencies.setFast(true); } // Create List for methodParams if (getMethodParams() != null) { if (lMethodParams == null) lMethodParams = new ArrayList(); StringTokenizer st = new StringTokenizer(getMethodParams(), ","); while (st.hasMoreTokens()) { String value = st.nextToken().trim(); if (value != null && value.length() > 0) lMethodParams.add(value); } } } /** * Checks whether or not the value passed in is in the depends field. */ public boolean isDependency(String key) { if (hDependencies != null) return hDependencies.containsKey(key); else return false; } /** * Gets the dependencies as a Collection. */ public Collection getDependencies() { return Collections.unmodifiableMap(hDependencies).keySet(); } public String toString() { StringBuffer results = new StringBuffer(); results.append("ValidatorAction: "); results.append(name); results.append("\n"); return results.toString(); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorException.java Index: ValidatorException.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; /** *

Exception for the Validator Framework.

* * @author David Winterfeldt */ public class ValidatorException extends Exception implements Serializable{ public ValidatorException() {} public ValidatorException(String message) { super(message); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorLog.java Index: ValidatorLog.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; /** *

Generic interface for logging.

* * @author David Winterfeldt */ public interface ValidatorLog { /** * Gets the debugging detail level for this resource. */ public int getDebug(); /** * Sets the debugging detail level for this resource. */ public void setDebug(int debug); /** * Writes the specified message to the log output. */ public void log(String message); /** * Writes the specified message and stack trace to the log output. */ public void log(String message, Throwable t); /** * Writes the specified message to the log output if the debug level is * greater than zero. */ public void info(String message); /** * Writes the specified message and stack trace to the log output * if the debug level is greater than zero. */ public void info(String message, Throwable t); } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorResources.java Index: ValidatorResources.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.Serializable; import java.util.Collections; import java.util.Iterator; import java.util.Locale; import java.util.Map; import org.apache.commons.collections.FastHashMap; /** *

General purpose class for storing FormSet objects based * on their associated Locale.

* *

IMPLEMENTATION NOTE - Classes that extend this class * must be Serializable so that instances may be used in distributable * application server environments.

* * @author David Winterfeldt */ public class ValidatorResources implements Serializable { /** * Logging interface. */ protected ValidatorLog logger = null; /** * FastHashMap of FormSets stored under * a Locale key. */ protected FastHashMap hFormSets = new FastHashMap(); /** * FastHashMap of global constant values with * the name of the constant as the key. */ protected FastHashMap hConstants = new FastHashMap(); /** * FastHashMap of ValidatorActions with * the name of the ValidatorAction as the key. */ protected FastHashMap hActions = new FastHashMap(); /** * The default locale on our server. */ protected static Locale defaultLocale = Locale.getDefault(); public ValidatorResources(ValidatorLog logger) { this.logger = logger; } /** * Gets the logger. */ public ValidatorLog getLogger() { return logger; } /** * Sets the logger. */ public void setLogger(ValidatorLog logger) { this.logger = logger; } /** * Add a FormSet to this ValidatorResources * object. It will be associated with the Locale of the * FormSet. */ public void put(FormSet fs) { if (fs != null) { hFormSets.put(buildKey(fs), fs); //if (!fs.isProcessed()) // fs.process(hConstants); logger.info(fs.toString()); } } /** * Add a global constant to the resource. */ public void addConstant(Constant c) { if (c != null && c.getName() != null && c.getName().length() > 0 && c.getValue() != null && c.getValue().length() > 0) hConstants.put(c.getName(), c.getValue()); logger.info("Add Global Constant: " + c.getName() + "," + c.getValue()); } /** *

Add a ValidatorAction to the resource. It also creates an instance * of the class based on the ValidatorActions classname and retrieves * the Method instance and sets them in the ValidatorAction.

*/ public void addValidatorAction(ValidatorAction va) { if (va != null && va.getName() != null && va.getName().length() > 0 && va.getClassname() != null && va.getClassname().length() > 0 && va.getMethod() != null && va.getMethod().length() > 0) { va.process(hConstants); hActions.put(va.getName(), va); logger.info("Add ValidatorAction: " + va.getName() + "," + va.getClassname()); } } /** * Get a ValidatorAction based on it's name. */ public ValidatorAction getValidatorAction(String key) { return (ValidatorAction)hActions.get(key); } /** * Get an unmodifiable Map of the ValidatorActions. */ public Map getValidatorActions() { return Collections.unmodifiableMap(hActions); } /** * Builds a key to store the FormSet under based on it's language, country, * and variant values. */ protected String buildKey(FormSet fs) { String key = ((fs.getLanguage() != null && fs.getLanguage().length() > 0) ? fs.getLanguage() : "") + ((fs.getCountry() != null && fs.getCountry().length() > 0) ? "_" + fs.getCountry() : "") + ((fs.getVariant() != null && fs.getVariant().length() > 0) ? "_" + fs.getVariant() : ""); if (key.length() == 0) key = defaultLocale.toString(); return key; } /** *

Gets a Form based on the name of the form and the Locale that * most closely matches the Locale passed in. The order of Locale * matching is:

*
    *
  1. language + country + variant
  2. *
  3. language + country
  4. *
  5. language
  6. *
  7. default locale
  8. *
*/ public Form get(Locale locale, Object formKey) { return get(locale.getLanguage(), locale.getCountry(), locale.getVariant(), formKey); } /** *

Gets a Form based on the name of the form and the Locale that * most closely matches the Locale passed in. The order of Locale * matching is:

*
    *
  1. language + country + variant
  2. *
  3. language + country
  4. *
  5. language
  6. *
  7. default locale
  8. *
*/ public Form get(String language, String country, String variant, Object formKey) { FormSet fs = null; Form f = null; String key = null; Object o = null; key = ((language != null && language.length() > 0) ? language : "") + ((country != null && country.length() > 0) ? "_" + country : "") + ((variant != null && variant.length() > 0) ? "_" + variant : ""); //System.out.println("ValidatorResources::get #1 - locale=" + locale.toString() + " key=" + key); o = hFormSets.get(key); if (o != null) { fs = (FormSet)o; if (fs != null) f = fs.getForm(formKey); } if (f == null) { key = ((language != null && language.length() > 0) ? language : "") + ((country != null && country.length() > 0) ? "_" + country : ""); //System.out.println("ValidatorResources::get #2 - locale=" + locale.toString() + " key=" + key); o = hFormSets.get(key); if (o != null) { fs = (FormSet)o; if (fs != null) f = fs.getForm(formKey); } } if (f == null) { key = ((language != null && language.length() > 0) ? language : ""); //System.out.println("ValidatorResources::get #3 - locale=" + locale.toString() + " key=" + key); o = hFormSets.get(key); if (o != null) { fs = (FormSet)o; if (fs != null) f = fs.getForm(formKey); } } if (f == null) { key = Locale.getDefault().toString(); //System.out.println("ValidatorResources::get #4 - locale=" + locale.toString() + " key=" + key); o = hFormSets.get(key); if (o != null) { fs = (FormSet)o; if (fs != null) f = fs.getForm(formKey); } } return f; } /** * Gets the debugging detail level for this resource. */ public int getDebug() { return logger.getDebug(); } /** * Sets the debugging detail level for this resource. */ public void setDebug(int debug) { logger.setDebug(debug); } // Commented out for now because it should really try all the different locale combinations // like the get method does. //public boolean containsKey(Locale locale, Object key) { // FormSet fs = null; // Object o = hFormSets.get(locale.toString()); // if (o != null) // fs = (FormSet)o; // // if (fs != null && fs.getForm(key) != null) // return true; // // return false; //} /** *

Process the ValidatorResources object.

* *

Currently sets the FastHashMaps to the 'fast' mode.

*/ public void process() { hFormSets.setFast(true); hConstants.setFast(true); hActions.setFast(true); processForms(); } /** *

Process the Form objects. This clones the Fields * that don't exist in a FormSet compared to the default * FormSet.

*/ public void processForms() { //hFormSets.put(buildKey(fs), fs); String defaultKey = defaultLocale.toString(); // Loop through FormSets for (Iterator i = hFormSets.keySet().iterator(); i.hasNext(); ) { String key = (String)i.next(); FormSet fs = (FormSet)hFormSets.get(key); // Skip default FormSet if (key.equals(defaultKey)) continue; // Loop through Forms and copy/clone fields from default locale for (Iterator x = fs.getForms().keySet().iterator(); x.hasNext(); ) { String formKey = (String)x.next(); Form form = (Form)fs.getForms().get(formKey); // Create a new Form object so the order from the default is // maintained (very noticable in the JavaScript). Form newForm = new Form(); newForm.setName(form.getName()); // Loop through the default locale form's fields // If they don't exist in the current locale's form, then clone them. Form defaultForm = get(defaultLocale, formKey); for (Iterator defaultFields = defaultForm.getFields().iterator(); defaultFields.hasNext(); ) { Field defaultField = (Field)defaultFields.next(); String fieldKey = defaultField.getKey(); if (form.getFieldMap().containsKey(fieldKey)) { newForm.addField((Field)form.getFieldMap().get(fieldKey)); } else { Field field = getClosestLocaleField(fs, formKey, fieldKey); newForm.addField((Field)field.clone()); } } fs.addForm(newForm); } } // Process Fully Constructed FormSets for (Iterator i = hFormSets.values().iterator(); i.hasNext(); ) { FormSet fs = (FormSet)i.next(); if (!fs.isProcessed()) fs.process(hConstants); } } protected Field getClosestLocaleField(FormSet fs, String formKey, String fieldKey) { Field field = null; String language = fs.getLanguage(); String country = fs.getCountry(); String variant = fs.getVariant(); if (!GenericValidator.isBlankOrNull(language) && !GenericValidator.isBlankOrNull(country) && !GenericValidator.isBlankOrNull(variant)) { Form form = get(language, country, null, formKey); if (form.getFieldMap().containsKey(fieldKey)) field = (Field)form.getFieldMap().get(fieldKey); } if (field == null) { if (!GenericValidator.isBlankOrNull(language) && !GenericValidator.isBlankOrNull(country)) { Form form = get(language, null, null, formKey); if (form.getFieldMap().containsKey(fieldKey)) field = (Field)form.getFieldMap().get(fieldKey); } } if (field == null) { Form form = get(defaultLocale, formKey); if (form.getFieldMap().containsKey(fieldKey)) field = (Field)form.getFieldMap().get(fieldKey); } return field; } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorResourcesInitializer.java Index: ValidatorResourcesInitializer.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.digester.Digester; import org.xml.sax.SAXException; /** *

Maps an xml file to ValidatorResources.

* * @author David Winterfeldt */ public class ValidatorResourcesInitializer { /** * Initializes a ValidatorResources based on a * file path. * * @param fileName The file path for the xml resource. */ public static ValidatorResources initialize(String fileName) throws IOException { return initialize(fileName, 0); } /** * Initializes a ValidatorResources based on an * InputStream. * * @param in InputStream for the xml resource. */ public static ValidatorResources initialize(InputStream in) throws IOException { return initialize(in, 0); } /** * Initializes a ValidatorResources based on a * file path and the debug level. * * @param fileName The file path for the xml resource. * @param debug The debug level */ public static ValidatorResources initialize(String fileName, int debug) throws IOException { BufferedInputStream in = new BufferedInputStream(new FileInputStream(fileName)); return initialize(new DefaultValidatorLog(), in, debug); } /** * Initializes a ValidatorResources based on an * InputStream and the debug level. * * @param in InputStream for the xml resource. * @param debug The debug level */ public static ValidatorResources initialize(InputStream in, int debug) throws IOException { return initialize(new DefaultValidatorLog(), in, debug); } /** * Initializes a ValidatorResources based on an * ValidatorLog, InputStream, and the debug level. * * @param logger Used for logging. * @param in InputStream for the xml resource. * @param debug The debug level */ public static ValidatorResources initialize(ValidatorLog logger, InputStream in, int debug) throws IOException { logger.setDebug(debug); ValidatorResources resources = new ValidatorResources(logger); Digester digester = new Digester(); digester.push(resources); digester.setDebug(debug); digester.setNamespaceAware(true); digester.setValidating(false); // Create Global Constant objects digester.addObjectCreate("form-validation/global/constant", "org.apache.commons.validator.Constant", "className"); digester.addSetProperties("form-validation/global/constant"); digester.addSetNext("form-validation/global/constant", "addConstant", "org.apache.commons.validator.Constant"); // Create Global ValidatorAction objects digester.addObjectCreate("form-validation/global/validator", "org.apache.commons.validator.ValidatorAction", "className"); digester.addSetProperties("form-validation/global/validator"); digester.addSetNext("form-validation/global/validator", "addValidatorAction", "org.apache.commons.validator.ValidatorAction"); // Add the body of a javascript element to the Validatoraction digester.addCallMethod("form-validation/global/validator", "setJavascript", 1); digester.addCallParam("form-validation/global/validator/javascript", 0); // Create FormSet objects digester.addObjectCreate("form-validation/formset", "org.apache.commons.validator.FormSet", "className"); digester.addSetProperties("form-validation/formset"); digester.addSetNext("form-validation/formset", "put", "org.apache.commons.validator.FormSet"); // Create Constant objects digester.addObjectCreate("form-validation/formset/constant", "org.apache.commons.validator.Constant", "className"); digester.addSetProperties("form-validation/formset/constant"); digester.addSetNext("form-validation/formset/constant", "addConstant", "org.apache.commons.validator.Constant"); // Create Form objects digester.addObjectCreate("form-validation/formset/form", "org.apache.commons.validator.Form", "className"); digester.addSetProperties("form-validation/formset/form"); digester.addSetNext("form-validation/formset/form", "addForm", "org.apache.commons.validator.Form"); // Create Field objects digester.addObjectCreate("form-validation/formset/form/field", "org.apache.commons.validator.Field", "className"); digester.addSetProperties("form-validation/formset/form/field"); digester.addSetNext("form-validation/formset/form/field", "addField", "org.apache.commons.validator.Field"); // Create Var objects digester.addCallMethod("form-validation/formset/form/field/var", "addVarParam", 3); digester.addCallParam("form-validation/formset/form/field/var/var-name", 0); digester.addCallParam("form-validation/formset/form/field/var/var-value", 1); digester.addCallParam("form-validation/formset/form/field/var/var-jstype", 2); // Create Msg object digester.addObjectCreate("form-validation/formset/form/field/msg", "org.apache.commons.validator.Msg", "className"); digester.addSetProperties("form-validation/formset/form/field/msg"); digester.addSetNext("form-validation/formset/form/field/msg", "addMsg", "org.apache.commons.validator.Msg"); // Create Arg objects // Arg0 digester.addObjectCreate("form-validation/formset/form/field/arg0", "org.apache.commons.validator.Arg", "className"); digester.addSetProperties("form-validation/formset/form/field/arg0"); digester.addSetNext("form-validation/formset/form/field/arg0", "addArg0", "org.apache.commons.validator.Arg"); // Arg1 digester.addObjectCreate("form-validation/formset/form/field/arg1", "org.apache.commons.validator.Arg", "className"); digester.addSetProperties("form-validation/formset/form/field/arg1"); digester.addSetNext("form-validation/formset/form/field/arg1", "addArg1", "org.apache.commons.validator.Arg"); // Arg2 digester.addObjectCreate("form-validation/formset/form/field/arg2", "org.apache.commons.validator.Arg", "className"); digester.addSetProperties("form-validation/formset/form/field/arg2"); digester.addSetNext("form-validation/formset/form/field/arg2", "addArg2", "org.apache.commons.validator.Arg"); // Arg3 digester.addObjectCreate("form-validation/formset/form/field/arg3", "org.apache.commons.validator.Arg", "className"); digester.addSetProperties("form-validation/formset/form/field/arg3"); digester.addSetNext("form-validation/formset/form/field/arg3", "addArg3", "org.apache.commons.validator.Arg"); try { // Parse the input stream to initialize our database digester.parse(in); in.close(); } catch (SAXException e) { logger.log("ValidatorResourcesInitializer::initialize - SAXException: " + e.getMessage(), e); } finally { if (in != null) try {in.close(); } catch (Exception e) {} } resources.process(); return resources; } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/ValidatorUtil.java Index: ValidatorUtil.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; import org.apache.commons.beanutils.PropertyUtils; /** *

This class helps provides some useful methods for retrieving objects * from different scopes of the application.

* * @author David Winterfeldt */ public class ValidatorUtil { /** *

Replace part of a String with another value.

* * @param value String to perform the replacement on. * @param key The name of the constant. * @param replaceValue The value of the constant. */ public static String replace(String value, String key, String replaceValue) { if (value != null && key != null && replaceValue != null) { int pos = value.indexOf(key); if (pos >= 0) { int length = value.length(); int start = pos; int end = pos + key.length(); if (length == key.length()) { value = replaceValue; } else if (end == length) { value = value.substring(0, start) + replaceValue; //+ value.substring(end); } else { value = value.substring(0, start) + replaceValue + replace(value.substring(end), key, replaceValue); } } } return value; } /** * Convenience method for getting a value from a bean property as a String. */ public static String getValueAsString(Object bean, String property) { Object value = null; try { value = PropertyUtils.getProperty(bean, property); } catch (Exception e) { //log("ValidatorUtil::getValueAsString() - " + e.getMessage(), e); } return (value != null ? value.toString() : null); } } 1.1 jakarta-commons/validator/src/share/org/apache/commons/validator/Var.java Index: Var.java =================================================================== /* * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . * */ package org.apache.commons.validator; /** *

Used in the Validation framework for creating a variable. A variable * can be used to pass in values on a field level for a validation method.

* *
  • See /WEB-INF/validation.xml for validation rules.
* * @author David Winterfeldt */ public class Var implements Cloneable, java.io.Serializable { /** * Int Constant for JavaScript type. This is used when generating the JavaScript objects * for use in client side validation. */ public final static String JSTYPE_INT = "int"; /** * String Constant for JavaScript type. This is used when generating the JavaScript objects * for use in client side validation. */ public final static String JSTYPE_STRING = "string"; /** * Regular Expression Constant for JavaScript type. This is used when generating the JavaScript objects * for use in client side validation. */ public final static String JSTYPE_REGEXP = "regexp"; /** * The name of the variable. */ private String name = null; /** * The name of the value. */ private String value = null; /** * The JavaScript type of the variable. */ private String jsType = null; public Var() {} public Var(String name, String value, String jsType) { this.name = name; this.value = value; this.jsType = jsType; } /** * Gets the name of the variable. */ public String getName() { return name; } /** * Sets the name of the variable. */ public void setName(String name) { this.name = name; } /** * Gets the value of the variable. */ public String getValue() { return value; } /** * Sets the value of the variable. */ public void setValue(String value) { this.value = value; } /** * Gets the JavaScript type of the variable. */ public String getJsType() { return jsType; } /** * Sets the JavaScript type of the variable. */ public void setJsType(String jsType) { this.jsType = jsType; } public Object clone() { try { Var var = (Var)super.clone(); if (name != null) var.name = new String(name); if (value != null) var.value = new String(value); if (jsType != null) var.jsType = new String(jsType); return var; } catch (CloneNotSupportedException e) { throw new InternalError(e.toString()); } } public String toString() { StringBuffer results = new StringBuffer(); results.append("Var: name="); results.append(name); results.append(" value="); results.append(value); results.append(" jsType="); results.append(jsType); results.append("\n"); return results.toString(); } } -- To unsubscribe, e-mail: For additional commands, e-mail: