Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@www.apache.org Received: (qmail 94954 invoked from network); 19 Jul 2006 13:44:30 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 19 Jul 2006 13:44:30 -0000 Received: (qmail 27643 invoked by uid 500); 19 Jul 2006 13:44:26 -0000 Delivered-To: apmail-jakarta-commons-dev-archive@jakarta.apache.org Received: (qmail 27568 invoked by uid 500); 19 Jul 2006 13:44:26 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: 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 27551 invoked by uid 99); 19 Jul 2006 13:44:26 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 19 Jul 2006 06:44:26 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [209.237.227.198] (HELO brutus.apache.org) (209.237.227.198) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 19 Jul 2006 06:44:24 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id C13CF714204 for ; Wed, 19 Jul 2006 13:42:14 +0000 (GMT) Message-ID: <21341876.1153316534789.JavaMail.jira@brutus> Date: Wed, 19 Jul 2006 06:42:14 -0700 (PDT) From: "Niall Pemberton (JIRA)" To: commons-dev@jakarta.apache.org Subject: [jira] Resolved: (VALIDATOR-177) Indexed field validation patch MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/VALIDATOR-177?page=all ] Niall Pemberton resolved VALIDATOR-177. --------------------------------------- Resolution: Invalid Re-openned and the set to "Resolved Invalid" again to correct "resolution" which was lost in Bugzilla --> JIRA conversion > Indexed field validation patch > ------------------------------ > > Key: VALIDATOR-177 > URL: http://issues.apache.org/jira/browse/VALIDATOR-177 > Project: Commons Validator > Issue Type: Improvement > Affects Versions: Nightly Builds > Environment: Operating System: All > Platform: All > Reporter: Jose Quinteiro > Priority: Minor > > I need indexed field validation for my application. I've started to work on it > and realized it's quite a large project. This is what I've got so far. I still > need to change validation-rules.xml to work with these changes, but this code > generates field names for indexed properties. > Comments? Suggestions? Am I even on the right path? > ? validator/validator.patch > ? validator/src/share/validator.patch > Index: validator/src/share/org/apache/commons/validator/Field.java > =================================================================== > RCS file: > /home/cvspublic/jakarta-commons/validator/src/share/org/apache/commons/validator/Field.java,v > retrieving revision 1.5 > diff -u -3 -p -r1.5 Field.java > --- validator/src/share/org/apache/commons/validator/Field.java 30 Mar 2002 04:33:17 -0000 1.5 > +++ validator/src/share/org/apache/commons/validator/Field.java 3 May 2002 16:56:26 -0000 > @@ -68,11 +68,11 @@ import java.util.Collections; > import java.util.Iterator; > import java.util.Map; > import java.util.StringTokenizer; > -import org.apache.commons.collections.FastHashMap; > +import org.apache.commons.collections.FastHashMap; > > > /** > - *

This contains the list of pluggable validators to > + *

This contains the list of pluggable validators to > * run on a field and any message information and variables > * to perform the validations and generate error messages.

> * > @@ -83,7 +83,7 @@ import org.apache.commons.collections.Fa > public class Field implements Cloneable, Serializable { > > /** > - * This is the value that will be used as a key if the Arg > + * 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"; > @@ -100,6 +100,7 @@ public class Field implements Cloneable, > protected String property = null; > protected String indexedProperty = null; > protected String indexedListProperty = null; > + > protected String iteratorName = null; > protected String key = null; > protected String depends = null; > protected int page = 0; > @@ -115,26 +116,26 @@ public class Field implements Cloneable, > > > /** > - * Gets the page value that the Field is associated with for > + * Gets the page value that the Field is associated with for > * validation. > */ > public int getPage() { > - return page; > + return page; > } > > /** > - * Sets the page value that the Field is associated with for > + * Sets the page value that the Field is associated with for > * validation. > */ > public void setPage(int page) { > - this.page = page; > + this.page = page; > } > > /** > * Gets the position of the Field in the validation list. > */ > public int getFieldOrder() { > - return fieldOrder; > + return fieldOrder; > } > > > @@ -142,7 +143,7 @@ public class Field implements Cloneable, > * Sets the position of the Field in the validation list. > */ > public void setFieldOrder(int fieldOrder) { > - this.fieldOrder = fieldOrder; > + this.fieldOrder = fieldOrder; > } > > > @@ -150,7 +151,7 @@ public class Field implements Cloneable, > * Gets the property name of the field. > */ > public String getProperty() { > - return property; > + return property; > } > > > @@ -158,16 +159,16 @@ public class Field implements Cloneable, > * Sets the property name of the field. > */ > public void setProperty(String property) { > - this.property = property; > + this.property = property; > } > > /** > - * Gets the indexed property name of the field. This > - * is the method name that can take an int as > + * 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; > + return indexedProperty; > } > > > @@ -175,18 +176,18 @@ public class Field implements Cloneable, > * Sets the indexed property name of the field. > */ > public void setIndexedProperty(String indexedProperty) { > - this.indexedProperty = 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 > + * 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; > + return indexedListProperty; > } > > > @@ -194,21 +195,39 @@ public class Field implements Cloneable, > * Sets the indexed property name of the field. > */ > public void setIndexedListProperty(String indexedListProperty) { > - this.indexedListProperty = indexedListProperty; > + this.indexedListProperty = indexedListProperty; > } > > + > /** > + * For indexed properties, the name of the JSP bean containing the > + > * Collection that was iterated (if indexedListProperty is not > + > * specified), or the JSP bean whose property getter returns the collection > + > * that was iterated (if indexedListProperty is specified). > + */ > + public String getIteratorName() { > + return iteratorName; > + } > + > + > + /** > + * For indexed properties, sets the name of the JSP bean containing the > + > * Collection that was iterated. > + */ > + public void setIteratorName(String iteratorName) { > + this.iteratorName = iteratorName; > + } > /** > * Gets the validation rules for this field. > */ > public String getDepends() { > - return depends; > + return depends; > } > > /** > * Sets the validation rules for this field. > */ > public void setDepends(String depends) { > - this.depends = depends; > + this.depends = depends; > } > > /** > @@ -245,11 +264,11 @@ public class Field implements Cloneable, > * Gets the default arg0 Arg object. > */ > public Arg getArg0() { > - return (Arg)hArg0.get(ARG_DEFAULT); > + return (Arg)hArg0.get(ARG_DEFAULT); > } > > /** > - * Gets the arg0 Arg object based on the key passed in. If > the key > + * 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) { > @@ -275,11 +294,11 @@ public class Field implements Cloneable, > * Gets the default arg1 Arg object. > */ > public Arg getArg1() { > - return (Arg)hArg1.get(ARG_DEFAULT); > + return (Arg)hArg1.get(ARG_DEFAULT); > } > > /** > - * Gets the arg1 Arg object based on the key passed in. If > the key > + * 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) { > @@ -305,11 +324,11 @@ public class Field implements Cloneable, > * Gets the default arg2 Arg object. > */ > public Arg getArg2() { > - return (Arg)hArg2.get(ARG_DEFAULT); > + return (Arg)hArg2.get(ARG_DEFAULT); > } > > /** > - * Gets the arg2 Arg object based on the key passed in. If > the key > + * 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) { > @@ -335,11 +354,11 @@ public class Field implements Cloneable, > * Gets the default arg3 Arg object. > */ > public Arg getArg3() { > - return (Arg)hArg3.get(ARG_DEFAULT); > + return (Arg)hArg3.get(ARG_DEFAULT); > } > > /** > - * Gets the arg3 Arg object based on the key passed in. If > the key > + * 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) { > @@ -389,7 +408,7 @@ public class Field implements Cloneable, > } > > /** > - * The Field's variables are returned as an > + * The Field's variables are returned as an > * unmodifiable Map. > */ > public Map getVars() { > @@ -401,14 +420,13 @@ public class Field implements Cloneable, > */ > public String getKey() { > if (key == null) { > - generateKey(); > + key = property; > } > - > return key; > } > > /** > - * Sets a unique key for the field. This can be used to change > + * 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) { > @@ -416,26 +434,22 @@ public class Field implements Cloneable, > } > > /** > - * If there is a value specified for the indexedProperty field then > - * true will be returned. Otherwise it will be > false. > + * If there is a value specified for the indexedProperty field and either > + > * iteratorName or indexedListProperty then true will be > + > * returned. Otherwise it will be false. > */ > public boolean isIndexed() { > - return ((indexedListProperty != null && indexedListProperty.length() > 0)); > - } > - > - /** > - * Generate correct key value. > - */ > - public void generateKey() { > - if (isIndexed()) { > - key = indexedListProperty + TOKEN_INDEXED + "." + property; > - } else { > - key = property; > - } > + return ( > + > (indexedProperty != null && indexedProperty.length() > 0) && > + > ( > + > (iteratorName != null && iteratorName.length() > 0) || > + > (indexedListProperty != null && indexedListProperty.length() > 0) > + > ) > + > ); > } > > /** > - * Replace constants with values in fields and process the depends field > + * Replace constants with values in fields and process the depends field > * to create the dependency Map. > */ > public void process(Map globalConstants, Map constants) { > @@ -446,7 +460,7 @@ public class Field implements Cloneable, > hArg3.setFast(true); > hVars.setFast(true); > > - generateKey(); > + getKey(); > > // Process FormSet Constants > for (Iterator i = constants.keySet().iterator(); i.hasNext(); ) { > @@ -556,7 +570,7 @@ public class Field implements Cloneable, > */ > public boolean isDependency(String key) { > if (hDependencies != null) { > - return hDependencies.containsKey(key); > + return hDependencies.containsKey(key); > } else { > return false; > } > @@ -610,11 +624,11 @@ public class Field implements Cloneable, > } catch (CloneNotSupportedException e) { > throw new InternalError(e.toString()); > } > - } > + } > > /** > * Returns a string representation of the object. > - */ > + */ > public String toString() { > StringBuffer results = new StringBuffer(); > > @@ -642,3 +656,4 @@ public class Field implements Cloneable, > } > > } > + > Index: validator/src/share/org/apache/commons/validator/Validator.java > =================================================================== > RCS file: > /home/cvspublic/jakarta-commons/validator/src/share/org/apache/commons/validator/Validator.java,v > retrieving revision 1.7 > diff -u -3 -p -r1.7 Validator.java > --- validator/src/share/org/apache/commons/validator/Validator.java 30 Mar 2002 04:28:35 -0000 1.7 > +++ validator/src/share/org/apache/commons/validator/Validator.java 3 May 2002 16:56:26 -0000 > @@ -67,12 +67,14 @@ import java.util.ArrayList; > import java.util.Collection; > import java.util.Collections; > import java.util.Comparator; > +import java.util.Enumeration; > 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.Array; > import java.lang.reflect.Method; > import java.lang.reflect.Modifier; > import org.apache.commons.beanutils.PropertyUtils; > @@ -81,9 +83,9 @@ import org.apache.commons.logging.LogSou > > > /** > - *

Validations are processed by the validate method. > - * An instance of ValidatorResources is > - * used to define the validators (validation methods) > + *

Validations are processed by the validate method. > + * An instance of ValidatorResources is > + * used to define the validators (validation methods) > * and the validation rules for a JavaBean.

> * > * @author David Winterfeldt > @@ -102,25 +104,25 @@ public class Validator implements Serial > public static String BEAN_KEY = "java.lang.Object"; > > /** > - * Resources key the ValidatorAction is stored under. > - * This will be automatically passed into a validation method > - * with the current ValidatorAction if it is > + * Resources key the ValidatorAction is stored under. > + * This will be automatically passed into a validation method > + * with the current ValidatorAction if it is > * specified in the method signature. > */ > public static String VALIDATOR_ACTION_KEY = > "org.apache.commons.validator.ValidatorAction"; > > /** > - * Resources key the Field is stored under. > - * This will be automatically passed into a validation method > - * with the current Field if it is > + * Resources key the Field is stored under. > + * This will be automatically passed into a validation method > + * with the current Field if it is > * specified in the method signature. > */ > public static String FIELD_KEY = "org.apache.commons.validator.Field"; > > /** > * Resources key the Locale is stored. > - * This will be used to retrieve the appropriate > - * FormSet and Form to be > + * This will be used to retrieve the appropriate > + * FormSet and Form to be > * processed. > */ > public static String LOCALE_KEY = "java.util.Locale"; > @@ -128,7 +130,7 @@ public class Validator implements Serial > protected ValidatorResources resources = null; > protected String formName = null; > protected HashMap hResources = new HashMap(); > - protected int page = 0; > + protected int page = 0; > > /** > * The class loader to use for instantiating application objects. > @@ -145,12 +147,12 @@ public class Validator implements Serial > protected boolean useContextClassLoader = false; > > /** > - * Construct a Validator that will > - * use the ValidatorResources > - * passed in to retrieve pluggable validators > + * Construct a Validator that will > + * use the ValidatorResources > + * passed in to retrieve pluggable validators > * the different sets of validation rules. > * > - * @param resources ValidatorResources > + * @param resources ValidatorResources > * to use during validation. > */ > public Validator(ValidatorResources resources) { > @@ -158,14 +160,14 @@ public class Validator implements Serial > } > > /** > - * Construct a Validator that will > - * use the ValidatorResources > - * passed in to retrieve pluggable validators > + * Construct a Validator that will > + * use the ValidatorResources > + * passed in to retrieve pluggable validators > * the different sets of validation rules. > * > - * @param resources ValidatorResources > + * @param resources ValidatorResources > * to use during validation. > - * @param formName Key used for retrieving the set of > + * @param formName Key used for retrieving the set of > * validation rules. > */ > public Validator(ValidatorResources resources, String formName) { > @@ -174,14 +176,14 @@ public class Validator implements Serial > } > > /** > - * Add a resource to be used during the processing > + * 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 > + * @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 > + * @param value The instance that will be passed > * into the validation method. > */ > public void addResource(String key, Object value) { > @@ -189,58 +191,58 @@ public class Validator implements Serial > } > > /** > - * Gets the form name which is the key > + * Gets the form name which is the key > * to a set of validation rules. > */ > public String getFormName() { > - return formName; > + return formName; > } > > /** > - * Sets the form name which is the key > + * Sets the form name which is the key > * to a set of validation rules. > */ > public void setFormName(String formName) { > - this.formName = formName; > + this.formName = formName; > } > > /** > - * Gets the page. This in conjunction with > - * the page property of a Field > - * can control the processing of fields. > - * If the field's page is less than or equal > + * Gets the page. This in conjunction with > + * the page property of a Field > + * 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; > + return page; > } > > /** > - * Sets the page. This in conjunction with > - * the page property of a Field > - * can control the processing of fields. > - * If the field's page is less than or equal > + * Sets the page. This in conjunction with > + * the page property of a Field > + * 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; > + 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 > - * ValidatorResources will not be removed > + * 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 > + * ValidatorResources will not be removed > * since it can be used again and is thread safe. > */ > public void clear() { > formName = null; > hResources = new HashMap(); > - page = 0; > + page = 0; > } > > /** > @@ -307,12 +309,12 @@ public class Validator implements Serial > } > > /** > - * Performs validations based on the configured resources. > - * > - * @return The Map returned uses the property > - * of the Field for the key and the value > + * Performs validations based on the configured resources. > + * > + * @return The Map returned uses the property > + * of the Field 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; > @@ -326,7 +328,7 @@ public class Validator implements Serial > } > > Form form = null; > - if ((form = resources.get(locale, formName)) != null) { > + if ((form = resources.get(locale, formName)) != null) { > Map hActions = resources.getValidatorActions(); > List lActions = new ArrayList(); > Map hActionsRun = new HashMap(); > @@ -382,7 +384,7 @@ public class Validator implements Serial > } > } > > - // For debug > + // For debug > > if (log.isDebugEnabled()) { > StringBuffer sbLog = new StringBuffer(); > @@ -398,11 +400,11 @@ public class Validator implements Serial > > if (va != null) { > for (Iterator i = form.getFields().iterator(); i.hasNext(); ) { > - Field field = (Field)i.next(); > + 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 > + // 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); > @@ -435,7 +437,7 @@ public class Validator implements Serial > > Method m = c.getMethod(va.getMethod(), paramClass); > > - // If the method is static we don't need an instance of the class > + // 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 { > @@ -451,20 +453,33 @@ public class Validator implements Serial > Object result = null; > > if (field.isIndexed()) { > - Object oIndexed = > PropertyUtils.getProperty(hResources.get(BEAN_KEY), field.getIndexedListProperty()); > - Object indexedList[] = new Object[0]; > + Object oIndexed; > + Iterator iterator = null; > + > > + > if( field.getIndexedListProperty() == null ) > + > oIndexed = hResources.get(BEAN_KEY); > + > else > + > oIndexed = PropertyUtils.getProperty(hResources.get(BEAN_KEY), > field.getIndexedListProperty()); > > - if (oIndexed instanceof Collection) { > - indexedList = ((Collection)oIndexed).toArray(); > - } else if(oIndexed.getClass().isArray()) { > - indexedList = (Object[])oIndexed; > - } > + if (oIndexed.getClass().isArray()) { > + > int length = Array.getLength(oIndexed); > + > ArrayList cList = new ArrayList(length); > + > for (int pos = 0; pos < length; pos++) { > + > cList.add(Array.get(oIndexed, pos)); > + > } > + > iterator = cList.iterator(); > + > } else if (oIndexed instanceof Collection) > + > iterator = ((Collection) oIndexed).iterator(); > + > else if (oIndexed instanceof Iterator) > + > iterator = (Iterator) oIndexed; > + > else if (oIndexed instanceof Map) > + > iterator = ((Map) oIndexed).entrySet().iterator(); > > - for (int pos = 0; pos < indexedList.length; pos++) { > + for (int pos = 0; (iterator != null) && > iterator.hasNext(); pos++) { > // Set current iteration object to the parameter > array > - paramValue[beanIndexPos] = indexedList[pos]; > + paramValue[beanIndexPos] = iterator.next(); > > - // Set field clone with the key modified to > represent > + // 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 + "]")); > @@ -524,11 +539,11 @@ public class Validator implements Serial > } > > /** > - * Returns if the result if valid. If the > - * result object is Boolean, then it will > - * the value. If the result object isn't Boolean, > - * then it will return false if the result > - * object is null and true if it > + * Returns if the result if valid. If the > + * result object is Boolean, then it will > + * the value. If the result object isn't Boolean, > + * then it will return false if the result > + * object is null and true if it > * isn't. > */ > private boolean isValid(Object result) { > @@ -553,13 +568,13 @@ public class Validator implements Serial > ValidatorAction va1 = (ValidatorAction)o1; > ValidatorAction va2 = (ValidatorAction)o2; > > - if ((va1.getDepends() == null || va1.getDepends().length() == 0) && > + 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) && > + } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && > (va2.getDepends() != null && va2.getDepends().length() > 0)) { > return -1; > } else { > @@ -583,13 +598,13 @@ public class Validator implements Serial > ValidatorAction va1 = (ValidatorAction)o1; > ValidatorAction va2 = (ValidatorAction)o2; > > - if ((va1.getDepends() == null || va1.getDepends().length() == 0) && > + 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) && > + } else if ((va1.getDepends() == null || va1.getDepends().length() == 0) && > (va2.getDepends() != null && va2.getDepends().length() > 0)) { > return -1; > } else { > @@ -613,7 +628,7 @@ public class Validator implements Serial > if (o != null) { > if (((Boolean)o).booleanValue()) > iVA2++; > - } > + } > } > > return iVA1 - iVA2; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org