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:20 UTC

[06/13] struts git commit: WW-4578 Converts length string validator to support collections

WW-4578 Converts length 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/16e8f10f
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/16e8f10f
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/16e8f10f

Branch: refs/heads/master
Commit: 16e8f10f6664f4d5abbc64650a0b7a93cd49290b
Parents: df5583f
Author: Lukasz Lenart <lu...@apache.org>
Authored: Tue Apr 11 09:10:19 2017 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Tue Apr 11 09:10:19 2017 +0200

----------------------------------------------------------------------
 .../validators/StringLengthFieldValidator.java  |  45 +++-
 .../StringLengthFieldValidatorTest.java         | 270 +++++++++++--------
 2 files changed, 192 insertions(+), 123 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/16e8f10f/core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java b/core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java
index 9d28a55..0c4f0fc 100644
--- a/core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java
+++ b/core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java
@@ -17,6 +17,11 @@ package com.opensymphony.xwork2.validator.validators;
 
 import com.opensymphony.xwork2.validator.ValidationException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Collection;
+import java.util.Objects;
 
 /**
  * <!-- START SNIPPET: javadoc -->
@@ -84,6 +89,8 @@ import org.apache.commons.lang3.StringUtils;
  */
 public class StringLengthFieldValidator extends FieldValidatorSupport {
 
+    private static final Logger LOG = LogManager.getLogger(StringLengthFieldValidator.class);
+
     private boolean trim = true;
     private int maxLength = -1;
     private int minLength = -1;
@@ -138,17 +145,37 @@ public class StringLengthFieldValidator extends FieldValidatorSupport {
     }
 
     public void validate(Object object) throws ValidationException {
-        String fieldName = getFieldName();
-        String val = (String) getFieldValue(fieldName, object);
+        Object fieldValue = getFieldValue(fieldName, object);
+
+        if (fieldValue == null) {
+            LOG.debug("Value for field {} is null, use a required validator", getFieldName());
+        } else 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 {
+            validateValue(object, fieldValue);
+        }
+    }
 
-        if (StringUtils.isEmpty(val)) {
-            // use a required validator for these
+    protected void validateValue(Object object, Object value) {
+        String stringValue = Objects.toString(value, "");
+
+        if (StringUtils.isEmpty(stringValue)) {
+            LOG.debug("Value is empty, use a required validator");
             return;
         }
+
         if (isTrim()) {
-            val = val.trim();
-            if (val.length() <= 0) {
-                // use a required validator
+            stringValue = stringValue.trim();
+            if (StringUtils.isEmpty(stringValue)) {
+                LOG.debug("Value is empty, use a required validator");
                 return;
             }
         }
@@ -156,9 +183,9 @@ public class StringLengthFieldValidator extends FieldValidatorSupport {
         int minLengthToUse = getMinLength();
         int maxLengthToUse = getMaxLength();
 
-        if ((minLengthToUse > -1) && (val.length() < minLengthToUse)) {
+        if ((minLengthToUse > -1) && (stringValue.length() < minLengthToUse)) {
             addFieldError(fieldName, object);
-        } else if ((maxLengthToUse > -1) && (val.length() > maxLengthToUse)) {
+        } else if ((maxLengthToUse > -1) && (stringValue.length() > maxLengthToUse)) {
             addFieldError(fieldName, object);
         }
     }

http://git-wip-us.apache.org/repos/asf/struts/blob/16e8f10f/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
index ee6daf7..26e3335 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
@@ -22,106 +22,130 @@ import com.opensymphony.xwork2.XWorkTestCase;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator;
 
+import java.util.Arrays;
+import java.util.Collection;
+
 /**
- * 
  * @author tm_jee
  * @version $Date$ $Id$
  */
 public class StringLengthFieldValidatorTest extends XWorkTestCase {
 
-	protected InternalActionSupport action;
-	protected StringLengthFieldValidator validator;
-	
-	public void testStringLengthEmptyNoTrim1() throws Exception {
-		action.setMyField("");
-		
-		validator.setTrim(false);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "");
-		assertFalse(action.hasFieldErrors());
-	}
-	
-	public void testStringLengthNullNoTrim() throws Exception {
-		action.setMyField(null);
-
-		validator.setTrim(false);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), null);
-		assertFalse(action.hasFieldErrors());
-	}
-	
-	public void testStringLengthEmptyTrim1() throws Exception {
-		action.setMyField("   ");
-		
-		validator.setTrim(true);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "   ");
-		assertFalse(action.hasFieldErrors());
-	}
-	
-	public void testStringLengthEmptyNoTrim2() throws Exception {
-		action.setMyField("          ");
-		
-		validator.setTrim(false);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "          ");
-		assertTrue(action.hasFieldErrors());
-	}
-	
-	
-	public void testStringLengthNullTrim() throws Exception {
-		action.setMyField(null);
-
-		validator.setTrim(true);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), null);
-		assertFalse(action.hasFieldErrors());
-	}
-	
-	public void testInvalidStringLengthNoTrim() throws Exception {
-		action.setMyField("abcdefghijklmn");
-		
-		validator.setTrim(false);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "abcdefghijklmn");
-		assertTrue(action.hasFieldErrors());
-	}
-	
-	public void testInvalidStringLengthTrim() throws Exception {
-		action.setMyField("abcdefghijklmn   ");
-		
-		validator.setTrim(true);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "abcdefghijklmn   ");
-		assertTrue(action.hasFieldErrors());
-	}
-	
-	public void testValidStringLengthNoTrim() throws Exception {
-		action.setMyField("   ");
-		
-		validator.setTrim(false);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "   ");
-		assertFalse(action.hasFieldErrors());
-	}
-	
-	public void testValidStringLengthTrim() throws Exception {
-		action.setMyField("asd          ");
-		
-		validator.setTrim(true);
-		validator.validate(action);
-		
-		assertEquals(action.getMyField(), "asd          ");
-		assertFalse(action.hasFieldErrors());
-	}
+    protected InternalActionSupport action;
+    protected StringLengthFieldValidator validator;
+
+    public void testStringLengthEmptyNoTrim1() throws Exception {
+        action.setMyField("");
+
+        validator.setTrim(false);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "");
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testStringLengthNullNoTrim() throws Exception {
+        action.setMyField(null);
+
+        validator.setTrim(false);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), null);
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testStringLengthEmptyTrim1() throws Exception {
+        action.setMyField("   ");
+
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "   ");
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testStringLengthEmptyNoTrim2() throws Exception {
+        action.setMyField("          ");
+
+        validator.setTrim(false);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "          ");
+        assertTrue(action.hasFieldErrors());
+    }
+
+
+    public void testStringLengthNullTrim() throws Exception {
+        action.setMyField(null);
+
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), null);
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testInvalidStringLengthNoTrim() throws Exception {
+        action.setMyField("abcdefghijklmn");
+
+        validator.setTrim(false);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "abcdefghijklmn");
+        assertTrue(action.hasFieldErrors());
+    }
+
+    public void testInvalidStringLengthTrim() throws Exception {
+        action.setMyField("abcdefghijklmn   ");
+
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "abcdefghijklmn   ");
+        assertTrue(action.hasFieldErrors());
+    }
+
+    public void testValidStringLengthNoTrim() throws Exception {
+        action.setMyField("   ");
+
+        validator.setTrim(false);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "   ");
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testValidStringLengthTrim() throws Exception {
+        action.setMyField("asd          ");
+
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertEquals(action.getMyField(), "asd          ");
+        assertFalse(action.hasFieldErrors());
+    }
+
+    public void testArrayOfStringsLengthTrim() throws Exception {
+        action.setStrings(new String[]{"123456", "    ", null});
+
+        validator.setFieldName("strings");
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertTrue(action.hasFieldErrors());
+        assertEquals(1, action.getFieldErrors().get("strings").size());
+    }
+
+    public void testCollectionOfStringsLengthTrim() throws Exception {
+        action.setStringCollection(Arrays.asList("123456", "    ", null));
+
+        validator.setFieldName("stringCollection");
+        validator.setTrim(true);
+        validator.validate(action);
+
+        assertTrue(action.hasFieldErrors());
+        assertEquals(1, action.getFieldErrors().get("stringCollection").size());
+    }
 
     public void testMinLengthViaExpression() throws Exception {
         assertEquals(2, validator.getMinLength());
@@ -151,41 +175,44 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
     }
 
     @Override
-	protected void setUp() throws Exception {
-		super.setUp();
+    protected void setUp() throws Exception {
+        super.setUp();
 
         action = new InternalActionSupport();
-		container.inject(action);
+        container.inject(action);
 
         ValueStack valueStack = ActionContext.getContext().getValueStack();
         valueStack.push(action);
 
-		validator = new StringLengthFieldValidator();
-		validator.setFieldName("myField");
-		validator.setMessageKey("error");
-		validator.setValidatorContext(new DelegatingValidatorContext(action, container.getInstance(TextProviderFactory.class)));
-		validator.setMaxLength(5);
-		validator.setMinLength(2);
+        validator = new StringLengthFieldValidator();
+        validator.setFieldName("myField");
+        validator.setMessageKey("error");
+        validator.setValidatorContext(new DelegatingValidatorContext(action, container.getInstance(TextProviderFactory.class)));
+        validator.setMaxLength(5);
+        validator.setMinLength(2);
         validator.setValueStack(valueStack);
     }
-	
-	
-	@Override
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		action = null;
-		validator = null;
-	}
-	
-	public static class InternalActionSupport extends ActionSupport {
 
-		private static final long serialVersionUID = 1L;
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        action = null;
+        validator = null;
+    }
+
+    public static class InternalActionSupport extends ActionSupport {
+
+        private static final long serialVersionUID = 1L;
 
         private String myField;
         private boolean trimValue;
         private int minLengthValue;
         private int maxLengthValue;
 
+        private String[] strings;
+        private Collection<String> stringCollection;
+
         public String getMyField() {
             return this.myField;
         }
@@ -218,6 +245,21 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
             this.maxLengthValue = maxLengthValue;
         }
 
+        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;
+        }
     }
 
 }