You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by bu...@apache.org on 2002/05/03 19:59:36 UTC

DO NOT REPLY [Bug 8787] New: - Indexed field validation patch

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8787>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=8787

Indexed field validation patch

           Summary: Indexed field validation patch
           Product: Commons
           Version: Nightly Builds
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Enhancement
          Priority: Other
         Component: Validator
        AssignedTo: commons-dev@jakarta.apache.org
        ReportedBy: struts@quinteiro.com


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;
 
 
 /**
- * <p>This contains the list of pluggable validators to 
+ * <p>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.</p>
  *
@@ -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 <code>Arg</code> 
+     * This is the value that will be used as a key if the <code>Arg</code>
      * 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 <code>Field</code> 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 <code>Field</code> 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 <code>int</code> as 
+     * Gets the indexed property name of the field.  This
+     * is the method name that can take an <code>int</code> 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 
-     * <code>Collection</code> 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
+     * <code>Collection</code> 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
+
 * <code>Collection</code> 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
+
 * <code>Collection</code> 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 <code>Arg</code> object.
     */
     public Arg getArg0() {
-       return (Arg)hArg0.get(ARG_DEFAULT);	
+       return (Arg)hArg0.get(ARG_DEFAULT);
     }
 
     /**
-     * Gets the arg0 <code>Arg</code> object based on the key passed in.  If
the key 
+     * Gets the arg0 <code>Arg</code> object based on the key passed in.  If
the key
      * finds a <code>null</code> 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 <code>Arg</code> object.
     */
     public Arg getArg1() {
-       return (Arg)hArg1.get(ARG_DEFAULT);	
+       return (Arg)hArg1.get(ARG_DEFAULT);
     }
 
     /**
-     * Gets the arg1 <code>Arg</code> object based on the key passed in.  If
the key 
+     * Gets the arg1 <code>Arg</code> object based on the key passed in.  If
the key
      * finds a <code>null</code> 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 <code>Arg</code> object.
     */
     public Arg getArg2() {
-       return (Arg)hArg2.get(ARG_DEFAULT);	
+       return (Arg)hArg2.get(ARG_DEFAULT);
     }
 
     /**
-     * Gets the arg2 <code>Arg</code> object based on the key passed in.  If
the key 
+     * Gets the arg2 <code>Arg</code> object based on the key passed in.  If
the key
      * finds a <code>null</code> 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 <code>Arg</code> object.
     */
     public Arg getArg3() {
-       return (Arg)hArg3.get(ARG_DEFAULT);	
+       return (Arg)hArg3.get(ARG_DEFAULT);
     }
 
     /**
-     * Gets the arg3 <code>Arg</code> object based on the key passed in.  If
the key 
+     * Gets the arg3 <code>Arg</code> object based on the key passed in.  If
the key
      * finds a <code>null</code> 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 <code>Field</code>'s variables are returned as an 
+     * The <code>Field</code>'s variables are returned as an
      * unmodifiable <code>Map</code>.
     */
     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 
-     * <code>true</code> will be returned.  Otherwise it will be
<code>false</code>.
+     * If there is a value specified for the indexedProperty field and either
+
 * iteratorName or indexedListProperty then <code>true</code> will be
+
 * returned.  Otherwise it will be <code>false</code>.
     */
     public boolean isIndexed() {
-       return ((indexedListProperty != null && indexedListProperty.length() > 0));
-    }
-
-    /**
-     * Generate correct <code>key</code> 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 <code>Map</code>.
     */
     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
 
 
 /**
- * <p>Validations are processed by the validate method.  
- * An instance of <code>ValidatorResources</code> is 
- * used to define the validators (validation methods) 
+ * <p>Validations are processed by the validate method.
+ * An instance of <code>ValidatorResources</code> is
+ * used to define the validators (validation methods)
  * and the validation rules for a JavaBean.</p>
  *
  * @author David Winterfeldt
@@ -102,25 +104,25 @@ public class Validator implements Serial
    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 
+    * 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 
+    * 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>Locale</code> is stored.
-    * This will be used to retrieve the appropriate 
-    * <code>FormSet</code> and <code>Form</code> to be 
+    * 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";
@@ -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 <code>Validator</code> that will 
-    * use the <code>ValidatorResources</code> 
-    * passed in to retrieve pluggable validators 
+    * 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> 
+    * @param	resources	<code>ValidatorResources</code>
     *				to use during validation.
    */
    public Validator(ValidatorResources resources) {
@@ -158,14 +160,14 @@ public class Validator implements Serial
    }
 
    /**
-    * Construct a <code>Validator</code> that will 
-    * use the <code>ValidatorResources</code> 
-    * passed in to retrieve pluggable validators 
+    * 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> 
+    * @param	resources	<code>ValidatorResources</code>
     *				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 <code>Field<code> 
-    * 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 <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;	
+      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 
+    * 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;	
+      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 
+    * 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;   
+      page = 0;
    }
 
    /**
@@ -307,12 +309,12 @@ public class Validator implements Serial
    }
       
    /**
-    * 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 
+    * 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;
@@ -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 <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 
+    * 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) {
@@ -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;

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>