Author: lukaszlenart
Date: Mon Mar 18 08:39:53 2013
New Revision: 1457672
URL: http://svn.apache.org/r1457672
Log:
WW-4004 Improves DoubleRangeFieldValidator annotation to match
DoubleRangeFieldValidator class
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/DoubleRangeFieldValidator.java
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/DoubleRangeFieldValidator.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilder.java
Mon Mar 18 08:39:53 2013
@@ -706,6 +706,20 @@ public class AnnotationValidationConfigu
params.put("maxExclusive", v.maxExclusive());
}
+ if (StringUtils.isNotEmpty(v.minInclusiveExpression())) {
+ params.put("minInclusiveExpression", v.minInclusiveExpression());
+ }
+ if (StringUtils.isNotEmpty(v.maxInclusiveExpression())) {
+ params.put("maxInclusiveExpression", v.maxInclusiveExpression());
+ }
+
+ if (StringUtils.isNotEmpty(v.minExclusiveExpression())) {
+ params.put("minExclusiveExpression", v.minExclusiveExpression());
+ }
+ if (StringUtils.isNotEmpty(v.maxExclusiveExpression())) {
+ params.put("maxExclusiveExpression", v.maxExclusiveExpression());
+ }
+
validatorFactory.lookupRegisteredValidatorType(validatorType);
return new ValidatorConfig.Builder(validatorType)
.addParams(params)
@@ -713,6 +727,7 @@ public class AnnotationValidationConfigu
.shortCircuit(v.shortCircuit())
.defaultMessage(v.message())
.messageKey(v.key())
+ .messageParams(v.messageParams())
.build();
}
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/DoubleRangeFieldValidator.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/DoubleRangeFieldValidator.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/DoubleRangeFieldValidator.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/DoubleRangeFieldValidator.java
Mon Mar 18 08:39:53 2013
@@ -56,6 +56,12 @@ import java.lang.annotation.Target;
* <td class='confluenceTd'>i18n key from language specific properties
file.</td>
* </tr>
* <tr>
+ * <td class='confluenceTd'>messageParams</td>
+ * <td class='confluenceTd'>no</td>
+ * <td class='confluenceTd'> </td>
+ * <td class='confluenceTd'>Additional params to be used to customize message
- will be evaluated against the Value Stack</td>
+ * </tr>
+ * <tr>
* <td class='confluenceTd'>fieldName</td>
* <td class='confluenceTd'>no</td>
* <td class='confluenceTd'> </td>
@@ -125,21 +131,41 @@ public @interface DoubleRangeFieldValida
String minInclusive() default "";
/**
+ * The inclusive minimum the number must be defined as an expression
+ */
+ String minInclusiveExpression() default "";
+
+ /**
* Double property. The inclusive minimum the number must be.
*/
String maxInclusive() default "";
/**
+ * The inclusive minimum the number must be defined as an expression
+ */
+ String maxInclusiveExpression() default "";
+
+ /**
* Double property. The exclusive maximum number can be.
*/
String minExclusive() default "";
/**
+ * The exclusive maximum number can be defined as an expression
+ */
+ String minExclusiveExpression() default "";
+
+ /**
* Double property. The exclusive maximum number can be.
*/
String maxExclusive() default "";
/**
+ * The exclusive maximum number can be defined as an expression
+ */
+ String maxExclusiveExpression() default "";
+
+ /**
* The default error message for this validator.
* NOTE: It is required to set a message, if you are not using the message
key for 18n lookup!
*/
@@ -151,6 +177,11 @@ public @interface DoubleRangeFieldValida
String key() default "";
/**
+ * Additional params to be used to customize message - will be evaluated
against the Value Stack
+ */
+ String[] messageParams() default {};
+
+ /**
* The optional fieldName for SIMPLE validator types.
*/
String fieldName() default "";
Modified:
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/DoubleRangeFieldValidator.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/DoubleRangeFieldValidator.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/DoubleRangeFieldValidator.java
(original)
+++
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/DoubleRangeFieldValidator.java
Mon Mar 18 08:39:53 2013
@@ -17,6 +17,7 @@
package com.opensymphony.xwork2.validator.validators;
import com.opensymphony.xwork2.validator.ValidationException;
+import org.apache.commons.lang3.StringUtils;
/**
* <!-- START SNIPPET: javadoc -->
@@ -93,6 +94,11 @@ public class DoubleRangeFieldValidator e
private Double minExclusive = null;
private Double maxExclusive = null;
+ private String minInclusiveExpression;
+ private String maxInclusiveExpression;
+ private String minExclusiveExpression;
+ private String maxExclusiveExpression;
+
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
Double value;
@@ -106,10 +112,15 @@ public class DoubleRangeFieldValidator e
return;
}
- if ((maxInclusive != null && value.compareTo(maxInclusive) > 0) ||
- (minInclusive != null && value.compareTo(minInclusive) < 0) ||
- (maxExclusive != null && value.compareTo(maxExclusive) >= 0) ||
- (minExclusive != null && value.compareTo(minExclusive) <= 0)) {
+ Double maxInclusiveToUse = getMaxInclusive();
+ Double minInclusiveToUse = getMinInclusive();
+ Double maxExclusiveToUse = getMaxExclusive();
+ Double minExclusiveToUse = getMinExclusive();
+
+ if ((maxInclusiveToUse != null && value.compareTo(maxInclusiveToUse) >
0) ||
+ (minInclusiveToUse != null &&
value.compareTo(minInclusiveToUse) < 0) ||
+ (maxExclusiveToUse != null &&
value.compareTo(maxExclusiveToUse) >= 0) ||
+ (minExclusiveToUse != null &&
value.compareTo(minExclusiveToUse) <= 0)) {
addFieldError(fieldName, object);
}
}
@@ -119,6 +130,11 @@ public class DoubleRangeFieldValidator e
}
public Double getMaxInclusive() {
+ if (maxInclusive != null) {
+ return maxInclusive;
+ } else if (StringUtils.isNotEmpty(maxInclusiveExpression)) {
+ return (Double) parse(maxInclusiveExpression, Double.class);
+ }
return maxInclusive;
}
@@ -127,39 +143,54 @@ public class DoubleRangeFieldValidator e
}
public Double getMinInclusive() {
- return minInclusive;
- }
-
- public Double getMinExclusive() {
- return minExclusive;
+ if (minInclusive != null) {
+ return minInclusive;
+ } else if (StringUtils.isNotEmpty(minInclusiveExpression)) {
+ return (Double) parse(minInclusiveExpression, Double.class);
+ }
+ return null;
}
public void setMinExclusive(Double minExclusive) {
this.minExclusive = minExclusive;
}
- public Double getMaxExclusive() {
- return maxExclusive;
+ public Double getMinExclusive() {
+ if (minExclusive != null) {
+ return minExclusive;
+ } else if (StringUtils.isNotEmpty(minExclusiveExpression)) {
+ return (Double) parse(minExclusiveExpression, Double.class);
+ }
+ return null;
}
public void setMaxExclusive(Double maxExclusive) {
this.maxExclusive = maxExclusive;
}
+ public Double getMaxExclusive() {
+ if (maxExclusive != null) {
+ return maxExclusive;
+ } else if (StringUtils.isNotEmpty(maxExclusiveExpression)) {
+ return (Double) parse(maxExclusiveExpression, Double.class);
+ }
+ return null;
+ }
+
public void setMinInclusiveExpression(String minInclusiveExpression) {
- this.minInclusive = (Double) parse(minInclusiveExpression,
Double.class);
+ this.minInclusiveExpression = minInclusiveExpression;
}
public void setMaxInclusiveExpression(String maxInclusiveExpression) {
- this.maxInclusive = (Double) parse(maxInclusiveExpression,
Double.class);
+ this.maxInclusiveExpression = maxInclusiveExpression;
}
public void setMinExclusiveExpression(String minExclusiveExpression) {
- this.minExclusive = (Double) parse(minExclusiveExpression,
Double.class);
+ this.minExclusiveExpression = minExclusiveExpression;
}
public void setMaxExclusiveExpression(String maxExclusiveExpression) {
- this.maxExclusive = (Double) parse(maxExclusiveExpression,
Double.class);
+ this.maxExclusiveExpression = maxExclusiveExpression;
}
}
Modified:
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
(original)
+++
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
Mon Mar 18 08:39:53 2013
@@ -5,6 +5,7 @@ import com.opensymphony.xwork2.validator
import
com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.DoubleRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
@@ -29,6 +30,9 @@ public class AnnotationValidationAction
)
@DateRangeFieldValidator(fieldName = "foo", key = "date.foo", max =
"2012", min = "2011", dateFormat = "yyyy",
message = "Foo isn't in range!", shortCircuit = true,
messageParams = {"one", "two", "three"})
+ @DoubleRangeFieldValidator(minExclusive = "1.2", maxExclusive = "1.4",
minInclusive = "0", maxInclusive = "0.1",
+ fieldName = "foo", key = "double.key", message = "Foo is out of
range!", shortCircuit = true,
+ messageParams = {"one", "two", "three"})
public String execute() {
return SUCCESS;
}
Modified:
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java
(original)
+++
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationConfigurationBuilderTest.java
Mon Mar 18 08:39:53 2013
@@ -17,6 +17,7 @@ import com.opensymphony.xwork2.util.loca
import
com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator;
import
com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator;
+import com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator;
import com.opensymphony.xwork2.validator.validators.RegexFieldValidator;
import java.text.ParseException;
@@ -39,7 +40,7 @@ public class AnnotationValidationConfigu
List<Validator> validators =
manager.getValidators(AnnotationValidationAction.class, null);
// then
- assertEquals(validators.size(), 5);
+ assertEquals(validators.size(), 6);
for (Validator validator : validators) {
validate(validator);
}
@@ -56,7 +57,7 @@ public class AnnotationValidationConfigu
ValueStack valueStack =
container.getInstance(ValueStackFactory.class).createValueStack();
valueStack.push(new AnnotationValidationExpAction());
- assertEquals(validators.size(), 5);
+ assertEquals(validators.size(), 6);
for (Validator validator : validators) {
validator.setValueStack(valueStack);
validate(validator);
@@ -74,9 +75,23 @@ public class AnnotationValidationConfigu
validateMyValidator((MyValidator) validator);
} else if (validator.getValidatorType().equals("date")) {
validateDateRangeFieldValidator((DateRangeFieldValidator)
validator);
+ } else if (validator.getValidatorType().equals("double")) {
+ validateDoubleRangeFieldValidator((DoubleRangeFieldValidator)
validator);
}
}
+ private void validateDoubleRangeFieldValidator(DoubleRangeFieldValidator
validator) {
+ assertEquals("foo", validator.getFieldName());
+ assertEquals("double.key", validator.getMessageKey());
+ assertEquals("Foo is out of range!", validator.getDefaultMessage());
+ assertTrue(Arrays.equals(new String[]{"one", "two", "three"},
validator.getMessageParameters()));
+ assertEquals(true, validator.isShortCircuit());
+ assertEquals(1.4, validator.getMaxExclusive());
+ assertEquals(1.2, validator.getMinExclusive());
+ assertEquals(0.1, validator.getMaxInclusive());
+ assertEquals(0.0, validator.getMinInclusive());
+ }
+
private void validateDateRangeFieldValidator(DateRangeFieldValidator
validator) throws ParseException {
assertEquals("foo", validator.getFieldName());
assertEquals("Foo isn't in range!", validator.getDefaultMessage());
Modified:
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
URL:
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java?rev=1457672&r1=1457671&r2=1457672&view=diff
==============================================================================
---
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
(original)
+++
struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
Mon Mar 18 08:39:53 2013
@@ -5,6 +5,7 @@ import com.opensymphony.xwork2.validator
import
com.opensymphony.xwork2.validator.annotations.ConversionErrorFieldValidator;
import com.opensymphony.xwork2.validator.annotations.CustomValidator;
import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.DoubleRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
@@ -33,6 +34,10 @@ public class AnnotationValidationExpActi
)
@DateRangeFieldValidator(fieldName = "foo", key = "date.foo",
maxExpression = "${dateMax}", minExpression = "${dateMin}", dateFormat = "yyyy",
message = "Foo isn't in range!", shortCircuit = true,
messageParams = {"one", "two", "three"})
+ @DoubleRangeFieldValidator(minExclusiveExpression =
"${doubleMinExclusiveExpression}", maxExclusiveExpression =
"${doubleMaxExclusiveExpression}",
+ minInclusiveExpression = "${doubleMinInclusiveExpression}",
maxInclusiveExpression = "${doubleMaxInclusiveExpression}",
+ fieldName = "foo", key = "double.key", message = "Foo is out of
range!", shortCircuit = true,
+ messageParams = {"one", "two", "three"})
public String execute() {
return SUCCESS;
}
@@ -57,4 +62,20 @@ public class AnnotationValidationExpActi
return new SimpleDateFormat("yyyy").parse("2012");
}
+ public Double getDoubleMinExclusiveExpression() {
+ return 1.2;
+ }
+
+ public Double getDoubleMaxExclusiveExpression() {
+ return 1.4;
+ }
+
+ public Double getDoubleMinInclusiveExpression() {
+ return 0.0;
+ }
+
+ public Double getDoubleMaxInclusiveExpression() {
+ return 0.1;
+ }
+
}