You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2017/04/19 07:42:19 UTC
[05/13] struts git commit: WW-4578 Converts required string validator
to support collections
WW-4578 Converts required string validator to support collections
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/df5583f1
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/df5583f1
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/df5583f1
Branch: refs/heads/master
Commit: df5583f11789fe2f5084d7fec780f99fa8d22b23
Parents: 01a56ca
Author: Lukasz Lenart <lu...@apache.org>
Authored: Tue Apr 11 08:46:24 2017 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Tue Apr 11 08:46:24 2017 +0200
----------------------------------------------------------------------
.../validators/FieldValidatorSupport.java | 6 +--
.../validators/RequiredStringValidator.java | 42 +++++++++++++----
.../validators/RequiredStringValidatorTest.java | 48 ++++++++++++++++++++
.../validator/validators/ValidationAction.java | 20 ++++++++
4 files changed, 105 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/df5583f1/core/src/main/java/com/opensymphony/xwork2/validator/validators/FieldValidatorSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/FieldValidatorSupport.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/FieldValidatorSupport.java
index ec75e13..07938c9 100644
--- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/FieldValidatorSupport.java
+++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/FieldValidatorSupport.java
@@ -25,9 +25,9 @@ import com.opensymphony.xwork2.validator.FieldValidator;
*/
public abstract class FieldValidatorSupport extends ValidatorSupport implements FieldValidator {
- private String fieldName;
- private String type;
- private Object currentValue;
+ protected String fieldName;
+ protected String type;
+ protected Object currentValue;
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
http://git-wip-us.apache.org/repos/asf/struts/blob/df5583f1/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidator.java
index af2d807..433fd60 100644
--- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidator.java
+++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidator.java
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.validator.validators;
import com.opensymphony.xwork2.validator.ValidationException;
+import java.util.Collection;
/**
* <!-- START SNIPPET: javadoc -->
@@ -85,21 +86,46 @@ public class RequiredStringValidator extends FieldValidatorSupport {
}
public void validate(Object object) throws ValidationException {
- String fieldName = getFieldName();
- Object value = this.getFieldValue(fieldName, object);
+ Object fieldValue = this.getFieldValue(getFieldName(), object);
- if (!(value instanceof String)) {
- addFieldError(fieldName, object);
+ if (fieldValue == null) {
+ addFieldError(getFieldName(), object);
+ return;
+ }
+
+ if (fieldValue.getClass().isArray()) {
+ Object[] values = (Object[]) fieldValue;
+ for (Object value : values) {
+ validateValue(object, value);
+ }
+ } else if (Collection.class.isAssignableFrom(fieldValue.getClass())) {
+ Collection values = (Collection) fieldValue;
+ for (Object value : values) {
+ validateValue(object, value);
+ }
} else {
- String s = (String) value;
+ validateValue(object, fieldValue);
+ }
+ }
+
+ protected void validateValue(Object object, Object fieldValue) {
+ if (fieldValue == null) {
+ addFieldError(getFieldName(), object);
+ return;
+ }
+
+ if (fieldValue instanceof String) {
+ String stingValue = (String) fieldValue;
if (trim) {
- s = s.trim();
+ stingValue = stingValue.trim();
}
- if (s.length() == 0) {
- addFieldError(fieldName, object);
+ if (stingValue.length() == 0) {
+ addFieldError(getFieldName(), object);
}
+ } else {
+ addFieldError(getFieldName(), object);
}
}
http://git-wip-us.apache.org/repos/asf/struts/blob/df5583f1/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java
index 8d4d919..9781bc1 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredStringValidatorTest.java
@@ -8,6 +8,8 @@ import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.validator.DummyValidatorContext;
import com.opensymphony.xwork2.validator.ValidatorContext;
+import java.util.Arrays;
+
public class RequiredStringValidatorTest extends XWorkTestCase {
private TextProviderFactory tpf;
@@ -38,6 +40,52 @@ public class RequiredStringValidatorTest extends XWorkTestCase {
assertTrue(context.getFieldErrors().size() == 0);
}
+ public void testRequiredArrayOfStringsPass() throws Exception {
+ // given
+ ValueStack valueStack = ActionContext.getContext().getValueStack();
+
+ ValidationAction action = new ValidationAction();
+ action.setStrings(new String[]{"", "12334", null});
+ valueStack.push(action);
+
+ ValidatorContext context = new DummyValidatorContext(action, tpf);
+ RequiredStringValidator validator = new RequiredStringValidator();
+ validator.setValidatorContext(context);
+ validator.setFieldName("strings");
+ validator.setValueStack(valueStack);
+
+ // when
+ validator.validate(action);
+
+ // then
+ assertTrue(context.hasFieldErrors());
+ assertEquals(1, context.getFieldErrors().size());
+ assertEquals(2, context.getFieldErrors().get("strings").size());
+ }
+
+ public void testRequiredCollectionOfStringsPass() throws Exception {
+ // given
+ ValueStack valueStack = ActionContext.getContext().getValueStack();
+
+ ValidationAction action = new ValidationAction();
+ action.setStringCollection(Arrays.asList("", "123456", null));
+ valueStack.push(action);
+
+ ValidatorContext context = new DummyValidatorContext(action, tpf);
+ RequiredStringValidator validator = new RequiredStringValidator();
+ validator.setValidatorContext(context);
+ validator.setFieldName("stringCollection");
+ validator.setValueStack(valueStack);
+
+ // when
+ validator.validate(action);
+
+ // then
+ assertTrue(context.hasFieldErrors());
+ assertEquals(1, context.getFieldErrors().size());
+ assertEquals(2, context.getFieldErrors().get("stringCollection").size());
+ }
+
public void testRequiredStringFails() throws Exception {
// given
ValueStack valueStack = ActionContext.getContext().getValueStack();
http://git-wip-us.apache.org/repos/asf/struts/blob/df5583f1/core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
index a97cea6..ac7f56c 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/validators/ValidationAction.java
@@ -1,5 +1,6 @@
package com.opensymphony.xwork2.validator.validators;
+import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -22,8 +23,11 @@ public class ValidationAction {
private Date dateRange;
private Date dateMinValue;
private Date dateMaxValue;
+
private String dateFormat;
private String stringValue;
+ private String[] strings;
+ private Collection<String> stringCollection;
public Integer getIntRange() {
return intRange;
@@ -152,4 +156,20 @@ public class ValidationAction {
public void setShorts(List<Short> shorts) {
this.shorts = shorts;
}
+
+ public String[] getStrings() {
+ return strings;
+ }
+
+ public void setStrings(String[] strings) {
+ this.strings = strings;
+ }
+
+ public Collection<String> getStringCollection() {
+ return stringCollection;
+ }
+
+ public void setStringCollection(Collection<String> stringCollection) {
+ this.stringCollection = stringCollection;
+ }
}