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 2013/03/18 13:48:15 UTC

svn commit: r1457742 - in /struts/struts2/trunk/xwork-core/src: main/java/com/opensymphony/xwork2/validator/ main/java/com/opensymphony/xwork2/validator/annotations/ main/java/com/opensymphony/xwork2/validator/validators/ test/java/com/opensymphony/xwo...

Author: lukaszlenart
Date: Mon Mar 18 12:48:14 2013
New Revision: 1457742

URL: http://svn.apache.org/r1457742
Log:
WW-4012 Improves StringLengthFieldValidator annotation to match StringLengthFieldValidator 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/StringLengthFieldValidator.java
    struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.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=1457742&r1=1457741&r2=1457742&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 12:48:14 2013
@@ -545,18 +545,27 @@ public class AnnotationValidationConfigu
 
         if (fieldName != null) {
             params.put("fieldName", fieldName);
-        } else if (v.fieldName() != null && v.fieldName().length() > 0) {
+        } else if (StringUtils.isNotEmpty(v.fieldName())) {
             params.put("fieldName", v.fieldName());
         }
 
-        if (v.maxLength() != null && v.maxLength().length() > 0) {
+        if (StringUtils.isNotEmpty(v.maxLength())) {
             params.put("maxLength", v.maxLength());
         }
-        if (v.minLength() != null && v.minLength().length() > 0) {
+        if (StringUtils.isNotEmpty(v.minLength())) {
             params.put("minLength", v.minLength());
         }
-        params.put("trim", String.valueOf(v.trim()));
-
+        if (StringUtils.isNotEmpty(v.maxLengthExpression())) {
+            params.put("maxLengthExpression", v.maxLengthExpression());
+        }
+        if (StringUtils.isNotEmpty(v.minLengthExpression())) {
+            params.put("minLengthExpression", v.minLengthExpression());
+        }
+        if (StringUtils.isNotEmpty(v.trimExpression())){
+            params.put("trimExpression", v.trimExpression());
+        } else {
+            params.put("trim", String.valueOf(v.trim()));
+        }
         validatorFactory.lookupRegisteredValidatorType(validatorType);
         return new ValidatorConfig.Builder(validatorType)
                 .addParams(params)
@@ -564,6 +573,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/StringLengthFieldValidator.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/StringLengthFieldValidator.java?rev=1457742&r1=1457741&r2=1457742&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/StringLengthFieldValidator.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/StringLengthFieldValidator.java Mon Mar 18 12:48:14 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'>&nbsp;</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'>&nbsp;</td>
@@ -118,16 +124,31 @@ public @interface StringLengthFieldValid
     boolean trim() default true;
 
     /**
+     * Determines whether the String is trimmed before performing the length check but defined as an expression
+     */
+    String trimExpression() default "";
+
+    /**
      *  Integer property. The minimum length the String must be.
      */
     String minLength() default "";
 
     /**
+     * The minimum length the String must be defined as an expression
+     */
+    String minLengthExpression() default "";
+
+    /**
      *  Integer property. The maximum length the String can be.
      */
     String maxLength() default "";
 
     /**
+     * The maximum length the String can be defined as an expression
+     */
+    String maxLengthExpression() 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!
      */
@@ -139,6 +160,11 @@ public @interface StringLengthFieldValid
     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/StringLengthFieldValidator.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java?rev=1457742&r1=1457741&r2=1457742&view=diff
==============================================================================
--- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java (original)
+++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/validators/StringLengthFieldValidator.java Mon Mar 18 12:48:14 2013
@@ -16,6 +16,7 @@
 package com.opensymphony.xwork2.validator.validators;
 
 import com.opensymphony.xwork2.validator.ValidationException;
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * <!-- START SNIPPET: javadoc -->
@@ -26,24 +27,24 @@ import com.opensymphony.xwork2.validator
  * String before performing the length check.  If unspecified, the String will be trimmed.
  * <!-- END SNIPPET: javadoc -->
  * <p/>
- * 
- * 
+ * <p/>
+ * <p/>
  * <!-- START SNIPPET: parameters -->
  * <ul>
- *    <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li>
- *    <li>maxLength - Integer. The max length of the field value. Default ignore.</li>
- *    <li>minLength - Integer. The min length of the field value. Default ignore.</li>
- *    <li>trim - (Optional) Boolean, default true. Trim the field value before evaluating its min/max length. Default true.</li>
- *    <li>maxLengthExpression - (Optional) String. Defines the max length param as an OGNL expression</li>
- *    <li>minLengthExpression - (Optional) String. Defines the min length param as an OGNL expression</li>
- *    <li>trimExpression - (Optional) String. Defines th trim param as an OGNL expression</li>
+ * <li>fieldName - The field name this validator is validating. Required if using Plain-Validator Syntax otherwise not required</li>
+ * <li>maxLength - Integer. The max length of the field value. Default ignore.</li>
+ * <li>minLength - Integer. The min length of the field value. Default ignore.</li>
+ * <li>trim - (Optional) Boolean, default true. Trim the field value before evaluating its min/max length. Default true.</li>
+ * <li>maxLengthExpression - (Optional) String. Defines the max length param as an OGNL expression</li>
+ * <li>minLengthExpression - (Optional) String. Defines the min length param as an OGNL expression</li>
+ * <li>trimExpression - (Optional) String. Defines th trim param as an OGNL expression</li>
  * </ul>
  * <!-- END SNIPPET: parameters -->
- * 
+ * <p/>
  * <!-- START SNIPPET: parameters-warning -->
  * Do not use ${minLengthExpression}, ${maxLengthExpression} and ${trimExpression} as an expression as this will turn into infinitive loop!
  * <!-- END SNIPPET: parameters-warning -->
- *
+ * <p/>
  * <pre>
  * <!--START SNIPPET: example -->
  * &lt;validators&gt;
@@ -78,7 +79,6 @@ import com.opensymphony.xwork2.validator
  * &lt;/validators&gt;
  * <!-- END SNIPPET: example -->
  * </pre>
- * 
  *
  * @author Jason Carreira
  * @author Mark Woon
@@ -91,16 +91,25 @@ public class StringLengthFieldValidator 
     private int maxLength = -1;
     private int minLength = -1;
 
+    private String maxLengthExpression;
+    private String minLengthExpression;
+    private String trimExpression;
+
     public void setMaxLength(int maxLength) {
         this.maxLength = maxLength;
     }
 
     public void setMaxLengthExpression(String maxLengthExpression) {
-        this.maxLength = (Integer) parse(maxLengthExpression, Integer.class);
+        this.maxLengthExpression = maxLengthExpression;
     }
 
     public int getMaxLength() {
-        return maxLength;
+        if (maxLength > -1) {
+            return maxLength;
+        } else if (StringUtils.isNotEmpty(maxLengthExpression)) {
+            return (Integer) parse(maxLengthExpression, Integer.class);
+        }
+        return -1;
     }
 
     public void setMinLength(int minLength) {
@@ -108,11 +117,16 @@ public class StringLengthFieldValidator 
     }
 
     public void setMinLengthExpression(String minLengthExpression) {
-        this.minLength = (Integer) parse(minLengthExpression, Integer.class);
+        this.minLengthExpression = minLengthExpression;
     }
 
     public int getMinLength() {
-        return minLength;
+        if (minLength > -1) {
+            return minLength;
+        } else if (StringUtils.isNotEmpty(minLengthExpression)) {
+            return (Integer) parse(minLengthExpression, Integer.class);
+        }
+        return -1;
     }
 
     public void setTrim(boolean trim) {
@@ -120,10 +134,13 @@ public class StringLengthFieldValidator 
     }
 
     public void setTrimExpression(String trimExpression) {
-        this.trim = (Boolean) parse(trimExpression, Boolean.class);
+        this.trimExpression = trimExpression;
     }
 
     public boolean isTrim() {
+        if (StringUtils.isNotEmpty(trimExpression)) {
+            return (Boolean) parse(trimExpression, Boolean.class);
+        }
         return trim;
     }
 
@@ -135,7 +152,7 @@ public class StringLengthFieldValidator 
             // use a required validator for these
             return;
         }
-        if (trim) {
+        if (isTrim()) {
             val = val.trim();
             if (val.length() <= 0) {
                 // use a required validator
@@ -143,9 +160,12 @@ public class StringLengthFieldValidator 
             }
         }
 
-        if ((minLength > -1) && (val.length() < minLength)) {
+        int minLengthToUse = getMinLength();
+        int maxLengthToUse = getMaxLength();
+
+        if ((minLengthToUse > -1) && (val.length() < minLengthToUse)) {
             addFieldError(fieldName, object);
-        } else if ((maxLength > -1) && (val.length() > maxLength)) {
+        } else if ((maxLengthToUse > -1) && (val.length() > maxLengthToUse)) {
             addFieldError(fieldName, object);
         }
     }

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=1457742&r1=1457741&r2=1457742&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 12:48:14 2013
@@ -14,6 +14,7 @@ import com.opensymphony.xwork2.validator
 import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
 import com.opensymphony.xwork2.validator.annotations.ShortRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
 
 /**
@@ -54,6 +55,8 @@ public class AnnotationValidationAction 
             messageParams = {"one", "two", "three"}, shortCircuit = true, trim = false)
     @ShortRangeFieldValidator(fieldName = "foo", key = "short.key", message = "Foo is out of range!", min = "1", max = "10",
             messageParams = {"one", "two", "three"}, shortCircuit = true)
+    @StringLengthFieldValidator(fieldName = "foo", key = "stringlength.key", message = "Foo is too long!",
+            maxLength = "10", minLength = "1", shortCircuit = true, trim = false, 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=1457742&r1=1457741&r2=1457742&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 12:48:14 2013
@@ -26,6 +26,7 @@ import com.opensymphony.xwork2.validator
 import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator;
 import com.opensymphony.xwork2.validator.validators.RequiredStringValidator;
 import com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator;
+import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -47,7 +48,7 @@ public class AnnotationValidationConfigu
         List<Validator> validators = manager.getValidators(AnnotationValidationAction.class, null);
 
         // then
-        assertEquals(validators.size(), 13);
+        assertEquals(validators.size(), 14);
         for (Validator validator : validators) {
             validate(validator);
         }
@@ -64,7 +65,7 @@ public class AnnotationValidationConfigu
         ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack();
         valueStack.push(new AnnotationValidationExpAction());
 
-        assertEquals(validators.size(), 13);
+        assertEquals(validators.size(), 14);
         for (Validator validator : validators) {
             validator.setValueStack(valueStack);
             validate(validator);
@@ -96,11 +97,24 @@ public class AnnotationValidationConfigu
             validateRequiredFieldValidator((RequiredFieldValidator) validator);
         } else if (validator.getValidatorType().equals("requiredstring")) {
             validateRequiredStringValidator((RequiredStringValidator) validator);
-        }else if (validator.getValidatorType().equals("short")) {
+        } else if (validator.getValidatorType().equals("short")) {
             validateShortRangeFieldValidator((ShortRangeFieldValidator) validator);
+        } else if (validator.getValidatorType().equals("stringlength")) {
+            validateStringLengthFieldValidator((StringLengthFieldValidator) validator);
         }
     }
 
+    private void validateStringLengthFieldValidator(StringLengthFieldValidator validator) {
+        assertEquals("foo", validator.getFieldName());
+        assertEquals("stringlength.key", validator.getMessageKey());
+        assertEquals("Foo is too long!", validator.getDefaultMessage());
+        assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, validator.getMessageParameters()));
+        assertEquals(1, validator.getMinLength());
+        assertEquals(10, validator.getMaxLength());
+        assertEquals(true, validator.isShortCircuit());
+        assertEquals(false, validator.isTrim());
+    }
+
     private void validateShortRangeFieldValidator(ShortRangeFieldValidator validator) {
         assertEquals("foo", validator.getFieldName());
         assertEquals("Foo is out of 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=1457742&r1=1457741&r2=1457742&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 12:48:14 2013
@@ -14,6 +14,7 @@ import com.opensymphony.xwork2.validator
 import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
 import com.opensymphony.xwork2.validator.annotations.ShortRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.ValidationParameter;
 
 import java.text.ParseException;
@@ -61,6 +62,9 @@ public class AnnotationValidationExpActi
     @ShortRangeFieldValidator(fieldName = "foo", key = "short.key", message = "Foo is out of range!",
             minExpression = "${shortMin}", maxExpression = "${shortMax}",
             messageParams = {"one", "two", "three"}, shortCircuit = true)
+    @StringLengthFieldValidator(fieldName = "foo", key = "stringlength.key", message = "Foo is too long!",
+            maxLengthExpression = "${maxLength}", minLengthExpression = "${minLength}", shortCircuit = true, trimExpression = "${false}",
+            messageParams = {"one", "two", "three"})
     public String execute() {
         return SUCCESS;
     }
@@ -117,4 +121,13 @@ public class AnnotationValidationExpActi
         return 10;
     }
 
+    public int getMaxLength() {
+        return 10;
+    }
+
+    public int getMinLength() {
+        return 1;
+    }
+
+
 }