dgraham 2003/03/11 21:58:58 Modified: validator/src/share/org/apache/commons/validator Validator.java Log: Formatting changes only. Revision Changes Path 1.12 +518 -483 jakarta-commons/validator/src/share/org/apache/commons/validator/Validator.java Index: Validator.java =================================================================== RCS file: /home/cvs/jakarta-commons/validator/src/share/org/apache/commons/validator/Validator.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Validator.java 15 Dec 2002 21:46:41 -0000 1.11 +++ Validator.java 12 Mar 2003 05:58:57 -0000 1.12 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2002 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,27 +59,23 @@ * */ - package org.apache.commons.validator; import java.io.Serializable; -import java.util.ArrayList; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; 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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - /** * <p>Validations are processed by the validate method. * An instance of <code>ValidatorResources</code> is @@ -87,367 +83,389 @@ * and the validation rules for a JavaBean.</p> * * @author David Winterfeldt - * @author James Turner + * @author James Turner * @version $Revision$ $Date$ -*/ + */ public class Validator implements Serializable { - /** - * Logger - */ - protected static Log log = LogFactory.getLog(Validator.class); - - /** - * Resources key the JavaBean is stored to perform validation on. - */ - public static String BEAN_KEY = "java.lang.Object"; - - /** - * Resources key the <code>ValidatorAction</code> is stored under. - * This will be automatically passed into a validation method - * with the current <code>ValidatorAction</code> if it is - * specified in the method signature. - */ - public static String VALIDATOR_ACTION_KEY = "org.apache.commons.validator.ValidatorAction"; - - /** - * Resources key the <code>Field</code> is stored under. - * This will be automatically passed into a validation method - * with the current <code>Field</code> if it is - * specified in the method signature. - */ - public static String FIELD_KEY = "org.apache.commons.validator.Field"; - - /** - * Resources key the <code>Validator</code> is stored under. - * This will be automatically passed into a validation method - * with the current <code>Validator</code> if it is - * specified in the method signature. - */ - public static String VALIDATOR_KEY = "org.apache.commons.validator.Validator"; - /** - * Resources key the <code>Locale</code> is stored. - * This will be used to retrieve the appropriate - * <code>FormSet</code> and <code>Form</code> to be - * processed. - */ - public static String LOCALE_KEY = "java.util.Locale"; - - protected ValidatorResources resources = null; - protected String formName = null; - protected HashMap hResources = new HashMap(); - protected int page = 0; - - /** - * The class loader to use for instantiating application objects. - * If not specified, the context class loader, or the class loader - * used to load Digester itself, is used, based on the value of the - * <code>useContextClassLoader</code> variable. - */ - protected ClassLoader classLoader = null; - - /** - * Whether or not to use the Context ClassLoader when loading classes - * for instantiating new objects. Default is <code>false</code>. - */ - protected boolean useContextClassLoader = false; - - /** - * Construct a <code>Validator</code> that will - * use the <code>ValidatorResources</code> - * passed in to retrieve pluggable validators - * the different sets of validation rules. - * - * @param resources <code>ValidatorResources</code> - * to use during validation. - */ - public Validator(ValidatorResources resources) { - this.resources = resources; - } - - /** - * Construct a <code>Validator</code> that will - * use the <code>ValidatorResources</code> - * passed in to retrieve pluggable validators - * the different sets of validation rules. - * - * @param resources <code>ValidatorResources</code> - * to use during validation. - * @param formName Key used for retrieving the set of - * validation rules. - */ - public Validator(ValidatorResources resources, String formName) { - this.resources = resources; - this.formName = formName; - } - - /** - * Add a resource to be used during the processing - * of validations. - * - * @param key The full class name of the parameter - * of the validation method that - * corresponds to the value/instance - * passed in with it. - * @param value The instance that will be passed - * into the validation method. - */ - public void addResource(String key, Object value) { - hResources.put(key, value); - } - - /** - * Get a resource to be used during the processing - * of validations. - * - * @param key The full class name of the parameter - * of the validation method that - * corresponds to the value/instance - * passed in with it. - */ - - public Object getResource(String key) { - return hResources.get(key); - } - - /** - * Gets the form name which is the key - * to a set of validation rules. - */ - public String getFormName() { - return formName; - } - - /** - * Sets the form name which is the key - * to a set of validation rules. - */ - public void setFormName(String formName) { - this.formName = formName; - } - - /** - * Gets the page. This in conjunction with - * the page property of a <code>Field<code> - * can control the processing of fields. - * If the field's page is less than or equal - * to this page value, it will be processed. - */ - public int getPage() { - return page; - } - - /** - * Sets the page. This in conjunction with - * the page property of a <code>Field<code> - * can control the processing of fields. - * If the field's page is less than or equal - * to this page value, it will be processed. - */ - public void setPage(int page) { - this.page = page; - } - - /** - * Clears the form name, resources that were added, - * and the page that was set (if any). This can - * be called to reinitialize the Validator instance - * so it can be reused. The form name (key to - * set of validation rules) and any resources needed, - * like the JavaBean being validated, will need to - * set and/or added to this instance again. The - * <code>ValidatorResources</code> will not be removed - * since it can be used again and is thread safe. - */ - public void clear() { - formName = null; - hResources = new HashMap(); - page = 0; - } - - /** - * Return the boolean as to whether the context classloader should be used. - */ - public boolean getUseContextClassLoader() { - - return useContextClassLoader; - - } - - /** - * Determine whether to use the Context ClassLoader (the one found by - * calling <code>Thread.currentThread().getContextClassLoader()</code>) - * to resolve/load classes that are defined in various rules. If not - * using Context ClassLoader, then the class-loading defaults to - * using the calling-class' ClassLoader. - * - * @param boolean determines whether to use Context ClassLoader. - */ - public void setUseContextClassLoader(boolean use) { - - useContextClassLoader = use; - - } - - /** - * Return the class loader to be used for instantiating application objects - * when required. This is determined based upon the following rules: - * <ul> - * <li>The class loader set by <code>setClassLoader()</code>, if any</li> - * <li>The thread context class loader, if it exists and the - * <code>useContextClassLoader</code> property is set to true</li> - * <li>The class loader used to load the Digester class itself. - * </ul> - */ - public ClassLoader getClassLoader() { - if (this.classLoader != null) { - return (this.classLoader); - } - - if (this.useContextClassLoader) { - ClassLoader classLoader = - Thread.currentThread().getContextClassLoader(); - if (classLoader != null) { - return (classLoader); - } - } - - return (this.getClass().getClassLoader()); - } - - /** - * Set the class loader to be used for instantiating application objects - * when required. - * - * @param classLoader The new class loader to use, or <code>null</code> - * to revert to the standard rules - */ - public void setClassLoader(ClassLoader classLoader) { - - this.classLoader = classLoader; - - } - - - private boolean validateFieldForRule(Field field, - ValidatorAction va, - ValidatorResults results, - Map hActions, - int pos) throws ValidatorException { - if (results.getValidatorResult(field.getKey()) != null) { + /** + * Logger + */ + protected static Log log = LogFactory.getLog(Validator.class); + + /** + * Resources key the JavaBean is stored to perform validation on. + */ + public static String BEAN_KEY = "java.lang.Object"; + + /** + * Resources key the <code>ValidatorAction</code> is stored under. + * This will be automatically passed into a validation method + * with the current <code>ValidatorAction</code> if it is + * specified in the method signature. + */ + public static String VALIDATOR_ACTION_KEY = + "org.apache.commons.validator.ValidatorAction"; + + /** + * Resources key the <code>Field</code> is stored under. + * This will be automatically passed into a validation method + * with the current <code>Field</code> if it is + * specified in the method signature. + */ + public static String FIELD_KEY = "org.apache.commons.validator.Field"; + + /** + * Resources key the <code>Validator</code> is stored under. + * This will be automatically passed into a validation method + * with the current <code>Validator</code> if it is + * specified in the method signature. + */ + public static String VALIDATOR_KEY = "org.apache.commons.validator.Validator"; + + /** + * Resources key the <code>Locale</code> is stored. + * This will be used to retrieve the appropriate + * <code>FormSet</code> and <code>Form</code> to be + * processed. + */ + public static String LOCALE_KEY = "java.util.Locale"; + + protected ValidatorResources resources = null; + protected String formName = null; + protected HashMap hResources = new HashMap(); + protected int page = 0; + + /** + * The class loader to use for instantiating application objects. + * If not specified, the context class loader, or the class loader + * used to load Digester itself, is used, based on the value of the + * <code>useContextClassLoader</code> variable. + */ + protected ClassLoader classLoader = null; + + /** + * Whether or not to use the Context ClassLoader when loading classes + * for instantiating new objects. Default is <code>false</code>. + */ + protected boolean useContextClassLoader = false; + + /** + * Construct a <code>Validator</code> that will + * use the <code>ValidatorResources</code> + * passed in to retrieve pluggable validators + * the different sets of validation rules. + * + * @param resources <code>ValidatorResources</code> + * to use during validation. + */ + public Validator(ValidatorResources resources) { + this.resources = resources; + } + + /** + * Construct a <code>Validator</code> that will + * use the <code>ValidatorResources</code> + * passed in to retrieve pluggable validators + * the different sets of validation rules. + * + * @param resources <code>ValidatorResources</code> + * to use during validation. + * @param formName Key used for retrieving the set of + * validation rules. + */ + public Validator(ValidatorResources resources, String formName) { + this.resources = resources; + this.formName = formName; + } + + /** + * Add a resource to be used during the processing + * of validations. + * + * @param key The full class name of the parameter + * of the validation method that + * corresponds to the value/instance + * passed in with it. + * @param value The instance that will be passed + * into the validation method. + */ + public void addResource(String key, Object value) { + hResources.put(key, value); + } + + /** + * Get a resource to be used during the processing + * of validations. + * + * @param key The full class name of the parameter + * of the validation method that + * corresponds to the value/instance + * passed in with it. + */ + public Object getResource(String key) { + return hResources.get(key); + } + + /** + * Gets the form name which is the key + * to a set of validation rules. + */ + public String getFormName() { + return formName; + } + + /** + * Sets the form name which is the key + * to a set of validation rules. + */ + public void setFormName(String formName) { + this.formName = formName; + } + + /** + * Gets the page. This in conjunction with + * the page property of a <code>Field<code> + * can control the processing of fields. + * If the field's page is less than or equal + * to this page value, it will be processed. + */ + public int getPage() { + return page; + } + + /** + * Sets the page. This in conjunction with + * the page property of a <code>Field<code> + * can control the processing of fields. + * If the field's page is less than or equal + * to this page value, it will be processed. + */ + public void setPage(int page) { + this.page = page; + } + + /** + * Clears the form name, resources that were added, + * and the page that was set (if any). This can + * be called to reinitialize the Validator instance + * so it can be reused. The form name (key to + * set of validation rules) and any resources needed, + * like the JavaBean being validated, will need to + * set and/or added to this instance again. The + * <code>ValidatorResources</code> will not be removed + * since it can be used again and is thread safe. + */ + public void clear() { + formName = null; + hResources = new HashMap(); + page = 0; + } + + /** + * Return the boolean as to whether the context classloader should be used. + */ + public boolean getUseContextClassLoader() { + + return useContextClassLoader; + + } + + /** + * Determine whether to use the Context ClassLoader (the one found by + * calling <code>Thread.currentThread().getContextClassLoader()</code>) + * to resolve/load classes that are defined in various rules. If not + * using Context ClassLoader, then the class-loading defaults to + * using the calling-class' ClassLoader. + * + * @param boolean determines whether to use Context ClassLoader. + */ + public void setUseContextClassLoader(boolean use) { + + useContextClassLoader = use; + + } + + /** + * Return the class loader to be used for instantiating application objects + * when required. This is determined based upon the following rules: + * <ul> + * <li>The class loader set by <code>setClassLoader()</code>, if any</li> + * <li>The thread context class loader, if it exists and the + * <code>useContextClassLoader</code> property is set to true</li> + * <li>The class loader used to load the Digester class itself. + * </ul> + */ + public ClassLoader getClassLoader() { + if (this.classLoader != null) { + return (this.classLoader); + } + + if (this.useContextClassLoader) { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (classLoader != null) { + return (classLoader); + } + } + + return (this.getClass().getClassLoader()); + } + + /** + * Set the class loader to be used for instantiating application objects + * when required. + * + * @param classLoader The new class loader to use, or <code>null</code> + * to revert to the standard rules + */ + public void setClassLoader(ClassLoader classLoader) { + + this.classLoader = classLoader; + + } + + private boolean validateFieldForRule( + Field field, + ValidatorAction va, + ValidatorResults results, + Map hActions, + int pos) + throws ValidatorException { + + if (results.getValidatorResult(field.getKey()) != null) { ValidatorResult result = results.getValidatorResult(field.getKey()); - if (result.containsAction(va.getName())) - return result.isValid(va.getName()); + if (result.containsAction(va.getName())) { + return result.isValid(va.getName()); + } } - if (va.getDepends() != null) { - StringTokenizer st = new StringTokenizer(va.getDepends(), ","); - while (st.hasMoreTokens()) { - String depend = st.nextToken().trim(); - - ValidatorAction depAction = (ValidatorAction)hActions.get(depend); - if (depAction == null) { - log.error("No ValidatorAction called " + depend + - " found for field " + field.getProperty()); - return false; - } - if (!validateFieldForRule(field, depAction, - results, hActions, pos)) { - return false; - } - } - } - - 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 = getClassLoader().loadClass(va.getClassname()); - - 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] = getClassLoader().loadClass(paramKey); - - 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) { - log.error("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; - } - - // 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); - results.add(field, va.getName(), isValid(result), result); - if (!isValid(result)) { - return false; - } - } else { - result = m.invoke(va.getClassnameInstance(), paramValue); - results.add(field, va.getName(), isValid(result), result); - if (!isValid(result)) - return false; - } - } catch (Exception e) { - log.error("reflection: " + e.getMessage(), e); - - results.add(field, va.getName(), false); - - if (e instanceof ValidatorException) { - throw ((ValidatorException)e); - } - return false; - } - return true; + if (va.getDepends() != null) { + StringTokenizer st = new StringTokenizer(va.getDepends(), ","); + while (st.hasMoreTokens()) { + String depend = st.nextToken().trim(); + + ValidatorAction depAction = (ValidatorAction) hActions.get(depend); + if (depAction == null) { + log.error( + "No ValidatorAction called " + + depend + + " found for field " + + field.getProperty()); + return false; + } + + if (!validateFieldForRule(field, + depAction, + results, + hActions, + pos)) { + return false; + } + } + } + + 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 = getClassLoader().loadClass(va.getClassname()); + + 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] = getClassLoader().loadClass(paramKey); + + 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) { + log.error( + "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; + } + + // 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); + results.add(field, va.getName(), isValid(result), result); + if (!isValid(result)) { + return false; + } + } else { + result = m.invoke(va.getClassnameInstance(), paramValue); + results.add(field, va.getName(), isValid(result), result); + if (!isValid(result)) { + return false; + } + } + } catch (Exception e) { + log.error("reflection: " + e.getMessage(), e); + + results.add(field, va.getName(), false); + + if (e instanceof ValidatorException) { + throw ((ValidatorException) e); + } + return false; + } + return true; } /** @@ -456,123 +474,140 @@ * field is an indexed one, run all the validations in the depends * clause over each item in turn, returning when the first one fails. * If it's non-indexed, just run it on the field. - **/ + */ + private void validateField(Field field, ValidatorResults allResults) + throws ValidatorException { + + Map hActions = resources.getValidatorActions(); + if (field.isIndexed()) { + Object oIndexed; + try { + oIndexed = + PropertyUtils.getProperty( + hResources.get(BEAN_KEY), + field.getIndexedListProperty()); + } catch (Exception e) { + log.error("in validateField", e); + return; + } + + 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++) { + ValidatorResults results = new ValidatorResults(); + StringTokenizer st = new StringTokenizer(field.getDepends(), ","); + while (st.hasMoreTokens()) { + String depend = st.nextToken().trim(); + + ValidatorAction depAction = + (ValidatorAction) hActions.get(depend); + if (depAction == null) { + log.error( + "No ValidatorAction called " + + depend + + " found for field " + + field.getProperty()); + return; + } + + boolean good = + validateFieldForRule( + field, + depAction, + results, + hActions, + pos); + allResults.merge(results); + if (!good) { + return; + } + } + } + } else { + ValidatorResults results = new ValidatorResults(); + StringTokenizer st = new StringTokenizer(field.getDepends(), ","); + while (st.hasMoreTokens()) { + String depend = st.nextToken().trim(); + + ValidatorAction depAction = (ValidatorAction) hActions.get(depend); + if (depAction == null) { + log.error( + "No ValidatorAction called " + + depend + + " found for field " + + field.getProperty()); + return; + } + boolean good = + validateFieldForRule(field, depAction, results, hActions, 0); + allResults.merge(results); + + if (!good) { + return; + } + } + } + } + + /** + * Performs validations based on the configured resources. + * + * @return The <code>Map</code> returned uses the property + * of the <code>Field</code> for the key and the value + * is the number of error the field had. + */ + public ValidatorResults validate() throws ValidatorException { + ValidatorResults results = new ValidatorResults(); + Locale locale = null; - private void validateField (Field field, ValidatorResults allResults) - throws ValidatorException { + if (hResources.containsKey(LOCALE_KEY)) { + locale = (Locale) hResources.get(LOCALE_KEY); + } + hResources.put(VALIDATOR_KEY, this); - Map hActions = resources.getValidatorActions(); - if (field.isIndexed()) { - Object oIndexed; - try { - oIndexed = PropertyUtils.getProperty(hResources.get(BEAN_KEY), field.getIndexedListProperty()); - } catch (Exception e) { - log.error("in validateField", e); - return; - } - - 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++) { - ValidatorResults results = new ValidatorResults(); - StringTokenizer st = new StringTokenizer(field.getDepends(), ","); - while (st.hasMoreTokens()) { - String depend = st.nextToken().trim(); - - ValidatorAction depAction = (ValidatorAction)hActions.get(depend); - if (depAction == null) { - log.error("No ValidatorAction called " + depend + - " found for field " + field.getProperty()); - return; - } - boolean good =validateFieldForRule(field, depAction, - results, hActions, pos); - allResults.merge(results); - if (!good) return; - } - } - } else { - ValidatorResults results = new ValidatorResults(); - StringTokenizer st = new StringTokenizer(field.getDepends(), ","); - while (st.hasMoreTokens()) { - String depend = st.nextToken().trim(); - - ValidatorAction depAction = (ValidatorAction)hActions.get(depend); - if (depAction == null) { - log.error("No ValidatorAction called " + depend + - " found for field " + field.getProperty()); - return; - } - boolean good = validateFieldForRule(field, depAction, - results, hActions, 0); - allResults.merge(results); - - if (good == false) { - return; - } - } - } - } - - /** - * Performs validations based on the configured resources. - * - * @return The <code>Map</code> returned uses the property - * of the <code>Field</code> for the key and the value - * is the number of error the field had. - */ - public ValidatorResults validate() throws ValidatorException { - ValidatorResults results = new ValidatorResults(); - Locale locale = null; - - if (hResources.containsKey(LOCALE_KEY)) { - locale = (Locale)hResources.get(LOCALE_KEY); - } - hResources.put(VALIDATOR_KEY, this); - - if (locale == null) { - locale = Locale.getDefault(); - } - - Form form = null; - if (resources == null) { - throw new ValidatorException("Resources not defined for Validator"); - } - if ((form = resources.get(locale, formName)) != null) { - for (Iterator i = form.getFields().iterator(); i.hasNext(); ) { - Field field = (Field)i.next(); - if (field.getPage() <= page) { - validateField(field, results); - } - } - } - return results; - } - - /** - * Returns if the result if valid. If the - * result object is <code>Boolean</code>, then it will - * the value. If the result object isn't <code>Boolean</code>, - * then it will return <code>false</code> if the result - * object is <code>null</code> and <code>true</code> if it - * isn't. - */ - private boolean isValid(Object result) { - boolean bValid = false; - - if (result instanceof Boolean) { - Boolean valid = (Boolean)result; - bValid = valid.booleanValue(); - } else { - bValid = (result != null); - } + if (locale == null) { + locale = Locale.getDefault(); + } - return bValid; - } + Form form = null; + if (resources == null) { + throw new ValidatorException("Resources not defined for Validator"); + } + if ((form = resources.get(locale, formName)) != null) { + for (Iterator i = form.getFields().iterator(); i.hasNext();) { + Field field = (Field) i.next(); + if (field.getPage() <= page) { + validateField(field, results); + } + } + } + return results; + } + + /** + * Returns if the result if valid. If the + * result object is <code>Boolean</code>, then it will + * the value. If the result object isn't <code>Boolean</code>, + * then it will return <code>false</code> if the result + * object is <code>null</code> and <code>true</code> if it + * isn't. + */ + private boolean isValid(Object result) { + boolean isValid = false; + + if (result instanceof Boolean) { + Boolean valid = (Boolean) result; + isValid = valid.booleanValue(); + } else { + isValid = (result != null); + } + + return isValid; + } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]