You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ni...@apache.org on 2005/02/14 00:50:13 UTC

svn commit: r153680 - in jakarta/commons/proper/validator/trunk/src: share/org/apache/commons/validator/Field.java test/org/apache/commons/validator/FieldTest.java

Author: niallp
Date: Sun Feb 13 15:50:12 2005
New Revision: 153680

URL: http://svn.apache.org/viewcvs?view=rev&rev=153680
Log:
Re-apply New Patch for Bug 31194 Remove the need to specify an Arg's position

Modified:
    jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java
    jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/FieldTest.java

Modified: jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java?view=diff&r1=153679&r2=153680
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java (original)
+++ jakarta/commons/proper/validator/trunk/src/share/org/apache/commons/validator/Field.java Sun Feb 13 15:50:12 2005
@@ -1,7 +1,7 @@
 /*
  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//validator/src/share/org/apache/commons/validator/Field.java,v 1.37 2004/12/07 00:00:15 niallp Exp $
  * $Revision: 1.37 $
- * $Date: 2004/12/07 00:00:15 $
+ * $Date$
  *
  * ====================================================================
  * Copyright 2001-2004 The Apache Software Foundation
@@ -245,6 +245,8 @@
             return;
         }
 
+        determineArgPosition(arg);
+
         this.ensureArgsCapacity(arg);
 
         Map argMap = this.args[arg.getPosition()];
@@ -258,6 +260,47 @@
         } else {
             argMap.put(arg.getName(), arg);
         }
+
+    }
+
+    /**
+     * Calculate the position of the Arg
+     */
+    private void determineArgPosition(Arg arg) {
+        
+        int position = arg.getPosition();
+
+        // position has been explicity set
+        if (position >= 0) {
+            return;
+        }
+
+        // first arg to be added
+        if (args == null || args.length == 0) {
+            arg.setPosition(0);
+            return;
+        }
+
+        // determine the position of the last argument with
+        // the same name or the last default argument
+        String key = arg.getName() == null ? DEFAULT_ARG : arg.getName();
+        int lastPosition = -1;
+        int lastDefault  = -1;
+        for (int i = 0; i < args.length; i++) {
+            if (args[i] != null && args[i].containsKey(key)) {
+                lastPosition = i;
+            }
+            if (args[i] != null && args[i].containsKey(DEFAULT_ARG)) {
+                lastDefault = i;
+            }
+        }
+
+        if (lastPosition < 0) { 
+            lastPosition = lastDefault;
+        }
+
+        // allocate the next position
+        arg.setPosition(++lastPosition);
 
     }
 

Modified: jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/FieldTest.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/FieldTest.java?view=diff&r1=153679&r2=153680
==============================================================================
--- jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/FieldTest.java (original)
+++ jakarta/commons/proper/validator/trunk/src/test/org/apache/commons/validator/FieldTest.java Sun Feb 13 15:50:12 2005
@@ -1,7 +1,7 @@
 /*
  * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//validator/src/test/org/apache/commons/validator/FieldTest.java,v 1.4 2004/11/12 16:02:52 niallp Exp $
  * $Revision: 1.4 $
- * $Date: 2004/11/12 16:02:52 $
+ * $Date$
  *
  * ====================================================================
  * Copyright 2001-2004 The Apache Software Foundation
@@ -66,23 +66,72 @@
     public void testEmptyArgs() {
 
         assertEquals("Empty Args(1) ", 0, field.getArgs("required").length);
-        assertEquals("Empty Args(2) ", 0, field.getArgs("required").length);
+
+    }
+    /**
+     * test Field with only 'default' arguments, no positions specified.
+     */
+    public void testDefaultPositionImplied() {
+
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-1"));
+        field.addArg(createArg("default-position-2"));
+
+        assertEquals("testDefaultPositionImplied(1) ", 3, field.getArgs("required").length);
+        assertEquals("testDefaultPositionImplied(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertEquals("testDefaultPositionImplied(3) ", "default-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testDefaultPositionImplied(4) ", "default-position-2", field.getArg("required", 2).getKey());
 
     }
 
     /**
-     * test Field with only 'default' arguments
+     * test Field with only 'default' arguments, positions specified.
      */
-    public void testDefaultArgs() {
+    public void testDefaultUsingPositions() {
 
-        field.addArg(defaultArg("position-0"));
-        field.addArg(defaultArg("position-1"));
-        field.addArg(defaultArg("position-2"));
+        field.addArg(createArg("default-position-1", 1));
+        field.addArg(createArg("default-position-0", 0));
+        field.addArg(createArg("default-position-2", 2));
 
-        assertEquals("testDefaultArgs(1) ", 3, field.getArgs("required").length);
-        assertEquals("testDefaultArgs(2) ", "position-0", field.getArg("required", 0).getKey());
-        assertEquals("testDefaultArgs(3) ", "position-1", field.getArg("required", 1).getKey());
-        assertEquals("testDefaultArgs(4) ", "position-2", field.getArg("required", 2).getKey());
+        assertEquals("testDefaultUsingPositions(1) ", 3, field.getArgs("required").length);
+        assertEquals("testDefaultUsingPositions(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertEquals("testDefaultUsingPositions(3) ", "default-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testDefaultUsingPositions(4) ", "default-position-2", field.getArg("required", 2).getKey());
+
+    }
+
+    /**
+     * test Field with only 'default' arguments, position specified for one argument
+     */
+    public void testDefaultOnePosition() {
+
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-2", 2));
+        field.addArg(createArg("default-position-3"));
+
+        assertEquals("testDefaultOnePosition(1) ", 4, field.getArgs("required").length);
+        assertEquals("testDefaultOnePosition(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertNull("testDefaultOnePosition(3) ", field.getArg("required", 1));
+        assertEquals("testDefaultOnePosition(4) ", "default-position-2", field.getArg("required", 2).getKey());
+        assertEquals("testDefaultOnePosition(5) ", "default-position-3", field.getArg("required", 3).getKey());
+
+    }
+
+    /**
+     * test Field with only 'default' arguments, some position specified.
+     */
+    public void testDefaultSomePositions() {
+
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-2", 2));
+        field.addArg(createArg("default-position-3"));
+        field.addArg(createArg("default-position-1", 1));
+
+        assertEquals("testDefaultSomePositions(1) ", 4, field.getArgs("required").length);
+        assertEquals("testDefaultSomePositions(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertEquals("testDefaultSomePositions(3) ", "default-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testDefaultSomePositions(4) ", "default-position-2", field.getArg("required", 2).getKey());
+        assertEquals("testDefaultSomePositions(5) ", "default-position-3", field.getArg("required", 3).getKey());
 
     }
 
@@ -91,21 +140,21 @@
      */
     public void testOverrideUsingPositionA() {
 
-        field.addArg(defaultArg("position-0"));
-        field.addArg(defaultArg("position-1"));
-        field.addArg(defaultArg("position-2"));
-        field.addArg(overrideArg("override-position-1", "required", 1));
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-1"));
+        field.addArg(createArg("default-position-2"));
+        field.addArg(createArg("required-position-1", "required", 1));
 
         // use 'required' as name
         assertEquals("testOverrideUsingPositionA(1) ", 3, field.getArgs("required").length);
-        assertEquals("testOverrideUsingPositionA(2) ", "override-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverrideUsingPositionA(2) ", "required-position-1", field.getArg("required", 1).getKey());
 
         // use 'mask' as name
         assertEquals("testOverrideUsingPositionA(3) ", 3, field.getArgs("mask").length);
-        assertEquals("testOverrideUsingPositionA(4) ", "position-1", field.getArg("mask", 1).getKey());
+        assertEquals("testOverrideUsingPositionA(4) ", "default-position-1", field.getArg("mask", 1).getKey());
 
         // Get Default
-        assertEquals("testOverrideUsingPositionA(5) ", "position-1", field.getArg(1).getKey());
+        assertEquals("testOverrideUsingPositionA(5) ", "default-position-1", field.getArg(1).getKey());
 
     }
 
@@ -114,72 +163,123 @@
      */
     public void testOverrideUsingPositionB() {
 
-        field.addArg(overrideArg("override-position-1", "required", 1));
-        field.addArg(defaultArg("position-0"));
-        field.addArg(defaultArg("position-1"));
-        field.addArg(defaultArg("position-2"));
+        field.addArg(createArg("required-position-3", "required", 3));
+        field.addArg(createArg("required-position-1", "required", 1));
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-1"));
+        field.addArg(createArg("default-position-2"));
 
         // use 'required' as name
-        assertEquals("testOverrideUsingPositionB(1) ", 3, field.getArgs("required").length);
-        assertEquals("testOverrideUsingPositionB(2) ", "override-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverrideUsingPositionB(1) ", 4, field.getArgs("required").length);
+        assertEquals("testOverrideUsingPositionB(2) ", "default-position-0",  field.getArg("required", 0).getKey());
+        assertEquals("testOverrideUsingPositionB(3) ", "required-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverrideUsingPositionB(4) ", "default-position-2",  field.getArg("required", 2).getKey());
+        assertEquals("testOverrideUsingPositionB(5) ", "required-position-3", field.getArg("required", 3).getKey());
 
         // use 'mask' as name
-        assertEquals("testOverrideUsingPositionB(3) ", 3, field.getArgs("mask").length);
-        assertEquals("testOverrideUsingPositionB(4) ", "position-1", field.getArg("mask", 1).getKey());
-
-        // Get Default
-        assertEquals("testOverrideUsingPositionB(5) ", "position-1", field.getArg(1).getKey());
+        assertEquals("testOverrideUsingPositionB(6) ", 4, field.getArgs("mask").length);
+        assertEquals("testOverrideUsingPositionB(6) ", "default-position-0", field.getArg("mask", 0).getKey());
+        assertEquals("testOverrideUsingPositionB(7) ", "default-position-1", field.getArg("mask", 1).getKey());
+        assertEquals("testOverrideUsingPositionB(8) ", "default-position-2", field.getArg("mask", 2).getKey());
+        assertNull("testOverrideUsingPositionB(9) ", field.getArg("mask", 3));
 
     }
 
     /**
-     * test Field with a 'default' argument overriden by adding immediately
-     * after the default argument is added.
+     * test Field with a 'default' argument overriden without positions specified.
      */
     public void testOverridePositionImplied() {
 
-        field.addArg(defaultArg("position-0"));
-        field.addArg(defaultArg("position-1"));
-        field.addArg(overrideArg("override-position-1", "required"));
-        field.addArg(defaultArg("position-2"));
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("required-position-1", "required"));
+        field.addArg(createArg("required-position-2", "required"));
+        field.addArg(createArg("mask-position-1", "mask"));
 
         // use 'required' as name
         assertEquals("testOverridePositionImplied(1) ", 3, field.getArgs("required").length);
-        assertEquals("testOverridePositionImplied(2) ", "override-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverridePositionImplied(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertEquals("testOverridePositionImplied(3) ", "required-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverridePositionImplied(4) ", "required-position-2", field.getArg("required", 2).getKey());
 
         // use 'mask' as name
-        assertEquals("testOverridePositionImplied(3) ", 3, field.getArgs("mask").length);
-        assertEquals("testOverridePositionImplied(4) ", "position-1", field.getArg("mask", 1).getKey());
+        assertEquals("testOverridePositionImplied(5) ", 3, field.getArgs("mask").length);
+        assertEquals("testOverridePositionImplied(6) ", "default-position-0", field.getArg("mask", 0).getKey());
+        assertEquals("testOverridePositionImplied(7) ", "mask-position-1", field.getArg("mask", 1).getKey());
+        assertNull("testOverridePositionImplied(8) ", field.getArg("mask", 2));
 
-        // Get Default
-        assertEquals("testOverridePositionImplied(5) ", "position-1", field.getArg(1).getKey());
+        // Get Defaults
+        assertEquals("testOverridePositionImplied(9) ",  "default-position-0", field.getArg(0).getKey());
+        assertNull("testOverridePositionImplied(10) ", field.getArg(1));
+        assertNull("testOverridePositionImplied(11) ", field.getArg(2));
+
+    }
+
+    /**
+     * test Field with a 'default' argument overriden with some positions specified
+     */
+    public void testOverrideSomePosition() {
+
+        field.addArg(createArg("default-position-0"));
+        field.addArg(createArg("default-position-1"));
+        field.addArg(createArg("default-position-2"));
+        field.addArg(createArg("required-position-1", "required", 1));
+        field.addArg(createArg("required-position-2", "required"));
+        field.addArg(createArg("mask-position-3", "mask"));
+
+        // use 'required' as name
+        assertEquals("testOverrideSomePosition(1) ", 4, field.getArgs("required").length);
+        assertEquals("testOverrideSomePosition(2) ", "default-position-0", field.getArg("required", 0).getKey());
+        assertEquals("testOverrideSomePosition(3) ", "required-position-1", field.getArg("required", 1).getKey());
+        assertEquals("testOverrideSomePosition(4) ", "required-position-2", field.getArg("required", 2).getKey());
+        assertNull("testOverrideSomePosition(5) ", field.getArg("required", 3));
+
+        // use 'mask' as name
+        assertEquals("testOverrideSomePosition(6) ", 4, field.getArgs("mask").length);
+        assertEquals("testOverrideSomePosition(7) ", "default-position-0", field.getArg("mask", 0).getKey());
+        assertEquals("testOverrideSomePosition(8) ", "default-position-1", field.getArg("mask", 1).getKey());
+        assertEquals("testOverrideSomePosition(9) ", "default-position-2", field.getArg("mask", 2).getKey());
+        assertEquals("testOverrideSomePosition(10) ", "mask-position-3", field.getArg("mask", 3).getKey());
+
+        // Get Defaults
+        assertEquals("testOverrideSomePosition(11) ",  "default-position-0", field.getArg(0).getKey());
+        assertEquals("testOverrideSomePosition(12) ", "default-position-1", field.getArg(1).getKey());
+        assertEquals("testOverrideSomePosition(13) ", "default-position-2", field.getArg(2).getKey());
+        assertNull("testOverrideSomePosition(14) ", field.getArg(3));
 
     }
 
     /**
-     * Convenience Method - create 'default' argument (i.e. no name)
+     * Convenience Method - create argument (no name or position specified)
      */
-    private Arg defaultArg(String key) {
+    private Arg createArg(String key) {
         Arg arg = new Arg();
         arg.setKey(key);
         return arg; 
     }
 
     /**
-     * Convenience Method - create 'overriden' argument (name specified, no position)
+     * Convenience Method - create argument (no name, position specified)
      */
-    private Arg overrideArg(String key, String name) {
-        Arg arg = new Arg();
-        arg.setKey(key);
+    private Arg createArg(String key, int position) {
+        Arg arg = createArg(key);
+        arg.setPosition(position);
+        return arg; 
+    }
+
+    /**
+     * Convenience Method - create argument (name specified, no position)
+     */
+    private Arg createArg(String key, String name) {
+        Arg arg = createArg(key);
         arg.setName(name);
         return arg; 
     }
 
     /**
-     * Convenience Method - create 'overriden' argument (name & position specified)
+     * Convenience Method - create argument (name & position specified)
      */
-    private Arg overrideArg(String key, String name, int position) {
-        Arg arg = overrideArg(key, name);
+    private Arg createArg(String key, String name, int position) {
+        Arg arg = createArg(key, name);
         arg.setPosition(position);
         return arg; 
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org