WW-4578 Makes required 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/e66fd538
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/e66fd538
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/e66fd538

Branch: refs/heads/master
Commit: e66fd538b519b1a156d76e4bbe4e994a35e3c464
Parents: 158eda9
Author: Lukasz Lenart <lukaszlen...@apache.org>
Authored: Mon Apr 10 09:13:14 2017 +0200
Committer: Lukasz Lenart <lukaszlen...@apache.org>
Committed: Mon Apr 10 09:13:14 2017 +0200

----------------------------------------------------------------------
 .../validators/RequiredFieldValidator.java      |  7 ++
 .../validators/RequiredFieldValidatorTest.java  | 78 ++++++++++++++++++++
 .../validator/validators/ValidationAction.java  | 10 +++
 3 files changed, 95 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/e66fd538/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidator.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidator.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidator.java
index dffd37a..44fd92f 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidator.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidator.java
@@ -17,6 +17,9 @@ package com.opensymphony.xwork2.validator.validators;
 
 import com.opensymphony.xwork2.validator.ValidationException;
 
+import java.lang.reflect.Array;
+import java.util.Collection;
+
 
 /**
  * <!-- START SNIPPET: javadoc -->
@@ -63,6 +66,10 @@ public class RequiredFieldValidator extends 
FieldValidatorSupport {
 
         if (value == null) {
             addFieldError(fieldName, object);
+        } else if (value.getClass().isArray() && Array.getLength(value) == 0) {
+            addFieldError(fieldName, object);
+        } else if (Collection.class.isAssignableFrom(value.getClass()) && 
((Collection) value).size() == 0) {
+            addFieldError(fieldName, object);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/e66fd538/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidatorTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidatorTest.java
new file mode 100644
index 0000000..4fc02e1
--- /dev/null
+++ 
b/core/src/test/java/com/opensymphony/xwork2/validator/validators/RequiredFieldValidatorTest.java
@@ -0,0 +1,78 @@
+package com.opensymphony.xwork2.validator.validators;
+
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.TextProviderFactory;
+import com.opensymphony.xwork2.validator.DummyValidatorContext;
+import org.apache.struts2.StrutsInternalTestCase;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+public class RequiredFieldValidatorTest extends StrutsInternalTestCase {
+
+    @Test
+    public void testNullObject() throws Exception {
+        // given
+        RequiredFieldValidator rfv = 
container.inject(RequiredFieldValidator.class);
+        rfv.setValueStack(ActionContext.getContext().getValueStack());
+        rfv.setFieldName("stringValue");
+        rfv.setDefaultMessage("${fieldName} field is required!");
+        ValidationAction action = new ValidationAction();
+        DummyValidatorContext context = new DummyValidatorContext(action, 
container.getInstance(TextProviderFactory.class));
+        rfv.setValidatorContext(context);
+
+        // when
+        rfv.validate(action);
+
+        // then
+        assertTrue(context.hasFieldErrors());
+        assertEquals(1, context.getFieldErrors().size());
+        assertNotNull(context.getFieldErrors().get("stringValue"));
+        assertEquals("stringValue field is required!", 
context.getFieldErrors().get("stringValue").get(0));
+    }
+
+    @Test
+    public void testArrayObject() throws Exception {
+        // given
+        RequiredFieldValidator rfv = 
container.inject(RequiredFieldValidator.class);
+        rfv.setValueStack(ActionContext.getContext().getValueStack());
+        rfv.setFieldName("ints");
+        rfv.setDefaultMessage("${fieldName} field is required!");
+        ValidationAction action = new ValidationAction();
+        action.setInts(new Integer[]{});
+        DummyValidatorContext context = new DummyValidatorContext(action, 
container.getInstance(TextProviderFactory.class));
+        rfv.setValidatorContext(context);
+
+        // when
+        rfv.validate(action);
+
+        // then
+        assertTrue(context.hasFieldErrors());
+        assertEquals(1, context.getFieldErrors().size());
+        assertNotNull(context.getFieldErrors().get("ints"));
+        assertEquals("ints field is required!", 
context.getFieldErrors().get("ints").get(0));
+    }
+    
+    @Test
+    public void testCollectionObject() throws Exception {
+        // given
+        RequiredFieldValidator rfv = 
container.inject(RequiredFieldValidator.class);
+        rfv.setValueStack(ActionContext.getContext().getValueStack());
+        rfv.setFieldName("shorts");
+        rfv.setDefaultMessage("${fieldName} field is required!");
+        ValidationAction action = new ValidationAction();
+        action.setShorts(new ArrayList<Short>());
+        DummyValidatorContext context = new DummyValidatorContext(action, 
container.getInstance(TextProviderFactory.class));
+        rfv.setValidatorContext(context);
+
+        // when
+        rfv.validate(action);
+
+        // then
+        assertTrue(context.hasFieldErrors());
+        assertEquals(1, context.getFieldErrors().size());
+        assertNotNull(context.getFieldErrors().get("shorts"));
+        assertEquals("shorts field is required!", 
context.getFieldErrors().get("shorts").get(0));
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/struts/blob/e66fd538/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 a9fc40f..a97cea6 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,6 +1,7 @@
 package com.opensymphony.xwork2.validator.validators;
 
 import java.util.Date;
+import java.util.List;
 
 public class ValidationAction {
 
@@ -12,6 +13,7 @@ public class ValidationAction {
     private Short shortRange;
     private Short shortMinValue;
     private Short shortMaxValue;
+    private List<Short> shorts;
 
     private Long longRange;
     private Long longMinValue;
@@ -142,4 +144,12 @@ public class ValidationAction {
     public void setInts(Integer[] ints) {
         this.ints = ints;
     }
+
+    public List<Short> getShorts() {
+        return shorts;
+    }
+
+    public void setShorts(List<Short> shorts) {
+        this.shorts = shorts;
+    }
 }

Reply via email to