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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]