Author: lukaszlenart Date: Thu Dec 20 19:47:02 2012 New Revision: 1424652 URL: http://svn.apache.org/viewvc?rev=1424652&view=rev Log: WW-3890 adds support for expression in specifying min and max constraints
Added: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java - copied, changed from r1424643, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java?rev=1424652&r1=1424651&r2=1424652&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidator.java Thu Dec 20 19:47:02 2012 @@ -68,8 +68,6 @@ package com.opensymphony.xwork2.validato * <!-- END SNIPPET: examples --> * </pre> * - * - * * @author Jason Carreira * @version $Date$ $Id$ */ Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java?rev=1424652&r1=1424651&r2=1424652&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidator.java Thu Dec 20 19:47:02 2012 @@ -15,7 +15,6 @@ */ package com.opensymphony.xwork2.validator.validators; - /** * <!-- START SNIPPET: javadoc --> * Field Validator that checks if the long specified is within a certain range. @@ -24,69 +23,90 @@ package com.opensymphony.xwork2.validato * * <!-- START SNIPPET: parameters --> * <ul> - * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li> - * <li>min - the minimum value (if none is specified, it will not be checked) </li> - * <li>max - the maximum value (if none is specified, it will not be checked) </li> + * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li> + * <li>min - the minimum value (if none is specified, it will not be checked) </li> + * <li>max - the maximum value (if none is specified, it will not be checked) </li> * </ul> + * + * The min / max value can be specified as an expression, but then you must also enable parsing it by specifying <strong>parse</strong> param + * as in the example below. + * WARNING! Do not use ${min} and ${max} as an expression as this will turn into infinitive loop! + * * <!-- END SNIPPET: parameters --> * * * <pre> * <!-- START SNIPPET: examples --> - * <validators> - * <!-- Plain Validator Syntax --> - * <validator type="long"> - * <param name="fieldName">age</param> - * <param name="min">20</param> - * <param name="max">50</param> - * <message>Age needs to be between ${min} and ${max}</message> - * </validator> - * - * <!-- Field Validator Syntax --> - * <field name="age"> - * <field-validator type="long"> - * <param name="min">20</param> - * <param name="max">50</param> - * <message>Age needs to be between ${min} and ${max}</message> - * </field-validator> - * </field> - * </validators> + * <validators> + * <!-- Plain Validator Syntax --> + * <validator type="long"> + * <param name="fieldName">age</param> + * <param name="min">20</param> + * <param name="max">50</param> + * <message>Age needs to be between ${min} and ${max}</message> + * </validator> + * + * <!-- Field Validator Syntax --> + * <field name="age"> + * <field-validator type="long"> + * <param name="min">20</param> + * <param name="max">50</param> + * <message>Age needs to be between ${min} and ${max}</message> + * </field-validator> + * </field> + * + * <!-- Field Validator Syntax with expression --> + * <field name="age"> + * <field-validator type="long"> + * <param name="parse">true</param> + * <param name="${minValue}">20</param> <!-- will be evaluated as: Long getMinValue() --> + * <param name="${maxValue}">50</param> <!-- will be evaluated as: Long getMaxValue() --> + * <message>Age needs to be between ${min} and ${max}</message> + * </field-validator> + * </field> + * </validators> * <!-- END SNIPPET: examples --> * </pre> - * - * - * + * * @version $Date$ */ -public class LongRangeFieldValidator extends AbstractRangeValidator { +public class LongRangeFieldValidator extends AbstractRangeValidator<Long> { - Long max = null; - Long min = null; + String max = null; + String min = null; - - public void setMax(Long max) { + public void setMax(String max) { this.max = max; } - public Long getMax() { - return max; + public String getMax() { + return safeConditionalParse(max); } @Override - public Comparable getMaxComparatorValue() { - return max; + public Long getMaxComparatorValue() { + return parseLong(getMax()); } - public void setMin(Long min) { + public void setMin(String min) { this.min = min; } - public Long getMin() { - return min; + public String getMin() { + return safeConditionalParse(min); } @Override - public Comparable getMinComparatorValue() { - return min; + public Long getMinComparatorValue() { + return parseLong(getMin()); + } + + private Long parseLong(String value) { + if (value != null) { + return Long.parseLong(value); + } else { + return null; + } } + } Copied: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java (from r1424643, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java) URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java?p2=struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java&p1=struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java&r1=1424643&r2=1424652&rev=1424652&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/IntRangeFieldValidatorTest.java (original) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/LongRangeFieldValidatorTest.java Thu Dec 20 19:47:02 2012 @@ -6,13 +6,13 @@ import com.opensymphony.xwork2.util.Valu import com.opensymphony.xwork2.validator.GenericValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; -public class IntRangeFieldValidatorTest extends XWorkTestCase { +public class LongRangeFieldValidatorTest extends XWorkTestCase { public void testPassValidation() throws Exception { // given ValidationAction action = prepareAction(100); ValidatorContext context = new GenericValidatorContext(action); - IntRangeFieldValidator validator = prepareValidator(action, context); + LongRangeFieldValidator validator = prepareValidator(action, context); // when validator.validate(action); @@ -25,49 +25,49 @@ public class IntRangeFieldValidatorTest // given ValidationAction action = prepareAction(98); ValidatorContext context = new GenericValidatorContext(action); - IntRangeFieldValidator validator = prepareValidator(action, context); + LongRangeFieldValidator validator = prepareValidator(action, context); // when validator.validate(action); // then assertTrue(context.getFieldErrors().size() == 1); - assertEquals("Max is 101, min is 99 but value is 98", context.getFieldErrors().get("intRange").get(0)); + assertEquals("Max is 101, min is 99 but value is 98", context.getFieldErrors().get("longRange").get(0)); } public void testMaxValidation() throws Exception { // given ValidationAction action = prepareAction(102); ValidatorContext context = new GenericValidatorContext(action); - IntRangeFieldValidator validator = prepareValidator(action, context); + LongRangeFieldValidator validator = prepareValidator(action, context); // when validator.validate(action); // then assertTrue(context.getFieldErrors().size() == 1); - assertEquals("Max is 101, min is 99 but value is 102", context.getFieldErrors().get("intRange").get(0)); + assertEquals("Max is 101, min is 99 but value is 102", context.getFieldErrors().get("longRange").get(0)); } - private ValidationAction prepareAction(int intRange) { + private ValidationAction prepareAction(long longRange) { ValidationAction action = new ValidationAction(); - action.setIntMaxValue(101); - action.setIntMinValue(99); - action.setIntRange(intRange); + action.setLongMaxValue(101L); + action.setLongMinValue(99L); + action.setLongRange(longRange); return action; } - private IntRangeFieldValidator prepareValidator(ValidationAction action, ValidatorContext context) { - IntRangeFieldValidator validator = new IntRangeFieldValidator(); - validator.setMax("${intMaxValue}"); - validator.setMin("${intMinValue}"); + private LongRangeFieldValidator prepareValidator(ValidationAction action, ValidatorContext context) { + LongRangeFieldValidator validator = new LongRangeFieldValidator(); + validator.setMax("${longMaxValue}"); + validator.setMin("${longMinValue}"); ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack(); valueStack.push(action); validator.setValueStack(valueStack); validator.setValidatorContext(context); - validator.setFieldName("intRange"); + validator.setFieldName("longRange"); validator.setParse(true); - validator.setDefaultMessage("Max is ${intMaxValue}, min is ${intMinValue} but value is ${intRange}"); + validator.setDefaultMessage("Max is ${longMaxValue}, min is ${longMinValue} but value is ${longRange}"); return validator; } Modified: struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java?rev=1424652&r1=1424651&r2=1424652&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java (original) +++ struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java Thu Dec 20 19:47:02 2012 @@ -10,6 +10,10 @@ public class ValidationAction { private Short shortMinValue; private Short shortMaxValue; + private Long longRange; + private Long longMinValue; + private Long longMaxValue; + public Integer getIntRange() { return intRange; } @@ -57,4 +61,29 @@ public class ValidationAction { public void setShortMaxValue(Short shortMaxValue) { this.shortMaxValue = shortMaxValue; } + + public Long getLongRange() { + return longRange; + } + + public void setLongRange(Long longRange) { + this.longRange = longRange; + } + + public Long getLongMinValue() { + return longMinValue; + } + + public void setLongMinValue(Long longMinValue) { + this.longMinValue = longMinValue; + } + + public Long getLongMaxValue() { + return longMaxValue; + } + + public void setLongMaxValue(Long longMaxValue) { + this.longMaxValue = longMaxValue; + } + }