Author: lukaszlenart
Date: Sat Mar 16 15:14:04 2013
New Revision: 1457262

URL: http://svn.apache.org/r1457262
Log:
WW-4000 Improves ConditionalVisitorFieldValidator annotation to match validator 
class ConditionalVisitorFieldValidator

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/ConditionalVisitorFieldValidator.java
    
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RegexFieldValidator.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=1457262&r1=1457261&r2=1457262&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
 Sat Mar 16 15:14:04 2013
@@ -451,6 +451,7 @@ public class AnnotationValidationConfigu
             .shortCircuit(v.shortCircuit())
             .defaultMessage(v.message())
             .messageKey(v.key())
+            .messageParams(v.messageParams())
             .build();
     }
 
@@ -476,6 +477,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/ConditionalVisitorFieldValidator.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/ConditionalVisitorFieldValidator.java?rev=1457262&r1=1457261&r2=1457262&view=diff
==============================================================================
--- 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/ConditionalVisitorFieldValidator.java
 (original)
+++ 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/ConditionalVisitorFieldValidator.java
 Sat Mar 16 15:14:04 2013
@@ -52,6 +52,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>
@@ -67,7 +73,7 @@ import java.lang.annotation.Target;
  * <td class='confluenceTd'> context </td>
  * <td class='confluenceTd'> no </td>
  * <td class='confluenceTd'> action alias </td>
- * <td class='confluenceTd'> Determines the context to use for validating the 
Object property. If not defined, the context of the Action validation is 
propogated to the Object property validation.  In the case of Action 
validation, this context is the Action alias.  </td>
+ * <td class='confluenceTd'> Determines the context to use for validating the 
Object property. If not defined, the context of the Action validation is 
propagated to the Object property validation.  In the case of Action 
validation, this context is the Action alias.  </td>
  * </tr>
  * <tr>
  * <td class='confluenceTd'> appendPrefix </td>
@@ -130,6 +136,11 @@ public @interface ConditionalVisitorFiel
     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/annotations/RegexFieldValidator.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RegexFieldValidator.java?rev=1457262&r1=1457261&r2=1457262&view=diff
==============================================================================
--- 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RegexFieldValidator.java
 (original)
+++ 
struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/annotations/RegexFieldValidator.java
 Sat Mar 16 15:14:04 2013
@@ -55,6 +55,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>
@@ -103,6 +109,11 @@ public @interface RegexFieldValidator {
     String message() default "";
 
     /**
+     * Additional params to be used to customize message - will be evaluated 
against the Value Stack
+     */
+    String[] messageParams() default {};
+
+    /**
      * The message key to lookup for i18n.
      */
     String key() default "";
@@ -112,17 +123,47 @@ public @interface RegexFieldValidator {
      */
     String fieldName() default "";
 
-
+    /**
+     * Regex used to evaluate field against it
+     *
+     * @return String regular expression
+     */
     String regex() default "";
 
+    /**
+     * Defines regex as an expression which first will be evaluated against 
the Value Stack to get proper regex.
+     * Thus allow to dynamically change regex base on user actions.
+     *
+     * @return String an expression which starts with '$' or '%'
+     */
     String regexExpression() default "";
 
+    /**
+     * To trim or not the value, default true - trim
+     *
+     * @return boolean trim or not the value before validation
+     */
     boolean trim() default true;
 
+    /**
+     * Allows specify trim as an expression which will be evaluated during 
validation
+     *
+     * @return String an expression which starts with '$' or '%'
+     */
     String trimExpression() default "";
 
+    /**
+     * Match the value in case sensitive manner, default true
+     *
+     * @return boolean use case sensitive match or not
+     */
     boolean caseSensitive() default true;
 
+    /**
+     * Allows specify caseSensitive as an expression which will be evaluated 
during validation
+     *
+     * @return boolean use case sensitive match or not
+     */
     String caseSensitiveExpression() default "";
 
     /**
@@ -137,4 +178,5 @@ public @interface RegexFieldValidator {
      * The validation type for this field/method.
      */
     ValidatorType type() default ValidatorType.FIELD;
+
 }

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=1457262&r1=1457261&r2=1457262&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
 Sat Mar 16 15:14:04 2013
@@ -1,20 +1,20 @@
 package com.opensymphony.xwork2.validator;
 
 import com.opensymphony.xwork2.ActionSupport;
+import 
com.opensymphony.xwork2.validator.annotations.ConditionalVisitorFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
-import com.opensymphony.xwork2.validator.annotations.Validations;
 
 /**
  * Sets up all available validation annotations
  */
 public class AnnotationValidationAction extends ActionSupport {
 
-    @Validations(
-            regexFields = {
-                    @RegexFieldValidator(regex = "foo", message = "Foo doesn't 
match!", key = "regex.key",
-                            fieldName = "bar", shortCircuit = true, trim = 
false, caseSensitive = false),
-            }
-    )
+    @RegexFieldValidator(regex = "foo", message = "Foo doesn't match!", key = 
"regex.key",
+            fieldName = "bar", shortCircuit = true, trim = false, 
caseSensitive = false,
+            messageParams = {"one", "two", "three"})
+    @ConditionalVisitorFieldValidator(expression = "foo+bar", context = 
"some", appendPrefix = false, fieldName = "bar",
+            key = "conditional.key", message = "Foo doesn't match!", 
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=1457262&r1=1457261&r2=1457262&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
 Sat Mar 16 15:14:04 2013
@@ -14,8 +14,10 @@ import com.opensymphony.xwork2.inject.Co
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.util.ValueStackFactory;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
+import 
com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator;
 import com.opensymphony.xwork2.validator.validators.RegexFieldValidator;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -23,7 +25,7 @@ import java.util.Map;
 /**
  * Simple test to check if validation Annotations match given validator class
  */
-public class AnnotationValidationConfigurationBuilderTest extends 
XWorkTestCase{
+public class AnnotationValidationConfigurationBuilderTest extends 
XWorkTestCase {
 
     public void testValidationAnnotation() throws Exception {
         // given
@@ -33,11 +35,9 @@ public class AnnotationValidationConfigu
         List<Validator> validators = 
manager.getValidators(AnnotationValidationAction.class, null);
 
         // then
-        assertEquals(validators.size(), 1);
+        assertEquals(validators.size(), 2);
         for (Validator validator : validators) {
-            if (validator.getValidatorType().equals("regex")) {
-                validateRegexValidator((RegexFieldValidator) validator);
-            }
+            validate(validator);
         }
     }
 
@@ -52,15 +52,30 @@ public class AnnotationValidationConfigu
         ValueStack valueStack = 
container.getInstance(ValueStackFactory.class).createValueStack();
         valueStack.push(new AnnotationValidationExpAction());
 
-        assertEquals(validators.size(), 1);
+        assertEquals(validators.size(), 2);
         for (Validator validator : validators) {
-            if (validator.getValidatorType().equals("regex")) {
-                validator.setValueStack(valueStack);
-                validateRegexValidator((RegexFieldValidator) validator);
-            }
+            validator.setValueStack(valueStack);
+            validate(validator);
+        }
+    }
+
+    private void validate(Validator validator) {
+        if (validator.getValidatorType().equals("regex")) {
+            validateRegexValidator((RegexFieldValidator) validator);
+        } else if (validator.getValidatorType().equals("conditionalvisitor")) {
+            
validateConditionalFieldVisitorValidator((ConditionalVisitorFieldValidator) 
validator);
         }
     }
 
+    private void 
validateConditionalFieldVisitorValidator(ConditionalVisitorFieldValidator 
validator) {
+        assertEquals("foo+bar", validator.getExpression());
+        assertEquals("some", validator.getContext());
+        assertEquals("Foo doesn't match!", validator.getDefaultMessage());
+        assertEquals("bar", validator.getFieldName());
+        assertEquals("conditional.key", validator.getMessageKey());
+        assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, 
validator.getMessageParameters()));
+    }
+
     private void validateRegexValidator(RegexFieldValidator validator) {
         assertEquals("foo", validator.getRegex());
         assertEquals("Foo doesn't match!", validator.getDefaultMessage());
@@ -69,6 +84,7 @@ public class AnnotationValidationConfigu
         assertEquals(true, validator.isShortCircuit());
         assertEquals(false, validator.isTrimed());
         assertEquals(false, validator.isCaseSensitive());
+        assertTrue(Arrays.equals(new String[]{"one", "two", "three"}, 
validator.getMessageParameters()));
     }
 
     private AnnotationActionValidatorManager createValidationManager(final 
Class<? extends ActionSupport> actionClass) throws Exception {

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=1457262&r1=1457261&r2=1457262&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
 Sat Mar 16 15:14:04 2013
@@ -1,20 +1,20 @@
 package com.opensymphony.xwork2.validator;
 
 import com.opensymphony.xwork2.ActionSupport;
+import 
com.opensymphony.xwork2.validator.annotations.ConditionalVisitorFieldValidator;
 import com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;
-import com.opensymphony.xwork2.validator.annotations.Validations;
 
 /**
  * Sets up all available validation annotations with params as expressions
  */
 public class AnnotationValidationExpAction extends ActionSupport {
 
-    @Validations(
-            regexFields = {
-                    @RegexFieldValidator(regexExpression = "${foo}", message = 
"Foo doesn't match!", key = "regex.key",
-                            fieldName = "bar", shortCircuit = true, 
trimExpression = "${trim}", caseSensitiveExpression = "${caseSensitive}"),
-            }
-    )
+    @RegexFieldValidator(regexExpression = "${foo}", message = "Foo doesn't 
match!", key = "regex.key",
+            fieldName = "bar", shortCircuit = true, trimExpression = 
"${trim}", caseSensitiveExpression = "${caseSensitive}",
+            messageParams = {"one", "two", "three"})
+    @ConditionalVisitorFieldValidator(expression = "foo+bar", context = 
"some", appendPrefix = false, fieldName = "bar",
+            key = "conditional.key", message = "Foo doesn't match!", 
shortCircuit = true,
+            messageParams = {"one", "two", "three"})
     public String execute() {
         return SUCCESS;
     }


Reply via email to