This is an automated email from the ASF dual-hosted git repository.

svenmeier pushed a commit to branch WICKET-6656-bean-validation-required
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to 
refs/heads/WICKET-6656-bean-validation-required by this push:
     new a290538  WICKET-6656 test each constraint separately
a290538 is described below

commit a290538c3eadc8e11ef85217b46e027b67268a9c
Author: Sven Meier <[email protected]>
AuthorDate: Sat Apr 20 23:32:23 2019 +0200

    WICKET-6656 test each constraint separately
    
    whether it is required
---
 .../wicket/bean/validation/AnnotationUtils.java    | 46 ----------------------
 .../validation/BeanValidationConfiguration.java    | 12 +++---
 .../bean/validation/BeanValidationContext.java     |  8 ++--
 .../wicket/bean/validation/PropertyValidator.java  | 45 ++++++++++++++-------
 .../validation/PropertyValidatorRequiredTest.java  |  3 +-
 .../bean/validation/BeanValidationApplication.java |  9 ++---
 6 files changed, 43 insertions(+), 80 deletions(-)

diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/AnnotationUtils.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/AnnotationUtils.java
deleted file mode 100644
index be5e243..0000000
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/AnnotationUtils.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.wicket.bean.validation;
-
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import javax.validation.Validator;
-import javax.validation.groups.Default;
-import javax.validation.metadata.ConstraintDescriptor;
-
-class AnnotationUtils {
-
-       static List<ConstraintDescriptor<?>> findConstraints(Property property, 
Collection<Class<? extends Annotation>> annotationTypes)
-       {
-               BeanValidationContext config = 
BeanValidationConfiguration.get();
-               Validator validator = config.getValidator();
-
-               List<ConstraintDescriptor<?>> constraints = new ArrayList<>();
-
-               Iterator<ConstraintDescriptor<?>> it = new 
ConstraintIterator(validator, property);
-
-               while (it.hasNext())
-               {
-                       ConstraintDescriptor<?> desc = it.next();
-                       Annotation annotation = desc.getAnnotation();
-                       Class<? extends Annotation> annotationType = 
annotation.annotationType();
-                       if (annotationTypes.contains(annotationType))
-                       {
-                               constraints.add(desc);
-                       }
-               }
-
-               return constraints;
-       }
-
-       static boolean canApplyToDefaultGroup(ConstraintDescriptor<?> 
constraint)
-       {
-               Set<Class<?>> groups = constraint.getGroups();
-               //the constraint can be applied to default group either if its 
group array is empty
-               //or if it contains javax.validation.groups.Default
-               return groups.size() == 0 || groups.contains(Default.class);
-       }
-}
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
index 884ad9d..7971c84 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationConfiguration.java
@@ -199,16 +199,14 @@ public class BeanValidationConfiguration implements 
BeanValidationContext
        }
 
        /**
-        * By default {@link NotNull} and {@link NotEmpty} make a component 
required.
+        * By default {@link NotNull} and {@link NotEmpty} constraints make a 
component required.
         * 
-        * @param property
-        *            property
-        * @param groups
-        *            groups
+        * @param constraint
+        *            constraint 
         */
        @Override
-       public List<ConstraintDescriptor<?>> getRequiredConstraints(Property 
property)
+       public boolean isRequiredConstraint(ConstraintDescriptor<?> constraint)
        {
-               return AnnotationUtils.findConstraints(property, 
REQUIRED_ANNOTATIONS);
+               return 
REQUIRED_ANNOTATIONS.contains(constraint.getAnnotation().annotationType());
        }
 }
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
index caf5936..8f1f8b9 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/BeanValidationContext.java
@@ -1,7 +1,6 @@
 package org.apache.wicket.bean.validation;
 
 import java.lang.annotation.Annotation;
-import java.util.List;
 
 import javax.validation.Validator;
 import javax.validation.metadata.ConstraintDescriptor;
@@ -47,9 +46,10 @@ public interface BeanValidationContext extends 
IPropertyResolver
        Property resolveProperty(FormComponent<?> component);
        
        /**
-        * Which constraints make a component required.
+        * Does the given constraint make a component required.
         * 
-        * @param property property
+        * @param constraint constraint
+        * @return <code>true</code> if required
         */
-       List<ConstraintDescriptor<?>> getRequiredConstraints(Property property);
+       boolean isRequiredConstraint(ConstraintDescriptor<?> constraint);
 }
\ No newline at end of file
diff --git 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
index 6bfbbcf..437c04a 100644
--- 
a/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
+++ 
b/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
@@ -3,11 +3,11 @@ package org.apache.wicket.bean.validation;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 
 import javax.validation.ConstraintViolation;
 import javax.validation.Validator;
+import javax.validation.groups.Default;
 import javax.validation.metadata.ConstraintDescriptor;
 
 import org.apache.wicket.Component;
@@ -185,37 +185,52 @@ public class PropertyValidator<T> extends Behavior 
implements INullAcceptingVali
                }
        }
 
+       /**
+        * Should this property make the owning component required.
+        * 
+        * @return <code>true</code> if required
+        * 
+        * @see BeanValidationContext#isRequiredConstraint(ConstraintDescriptor)
+        */
        protected boolean isRequired()
        {
                BeanValidationContext config = 
BeanValidationConfiguration.get();
 
-               List<ConstraintDescriptor<?>> constraints = 
config.getRequiredConstraints(getProperty());
-               if (constraints.isEmpty())
-               {
-                       return false;
-               }
-
                HashSet<Class<?>> groups = new 
HashSet<Class<?>>(Arrays.asList(getGroups()));
 
-               for (ConstraintDescriptor<?> constraint : constraints)
+               Iterator<ConstraintDescriptor<?>> it = new 
ConstraintIterator(config.getValidator(), getProperty());
+               while (it.hasNext())
                {
-                       if (AnnotationUtils.canApplyToDefaultGroup(constraint) 
&& groups.size() == 0)
+                       ConstraintDescriptor<?> constraint = it.next();
+                       
+                       if (config.isRequiredConstraint(constraint))
                        {
-                               return true;
-                       }
-
-                       for (Class<?> constraintGroup : constraint.getGroups())
-                       {
-                               if (groups.contains(constraintGroup))
+                               if (canApplyToDefaultGroup(constraint) && 
groups.size() == 0)
                                {
                                        return true;
                                }
+               
+                               for (Class<?> constraintGroup : 
constraint.getGroups())
+                               {
+                                       if (groups.contains(constraintGroup))
+                                       {
+                                               return true;
+                                       }
+                               }
                        }
                }
 
                return false;
        }
 
+       private boolean canApplyToDefaultGroup(ConstraintDescriptor<?> 
constraint)
+       {
+               Set<Class<?>> groups = constraint.getGroups();
+               //the constraint can be applied to default group either if its 
group array is empty
+               //or if it contains javax.validation.groups.Default
+               return groups.size() == 0 || groups.contains(Default.class);
+       }
+
        @Override
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public void onComponentTag(Component component, ComponentTag tag)
diff --git 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
 
b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
index 3a5342a..1eac2d6 100644
--- 
a/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
+++ 
b/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
@@ -1,6 +1,5 @@
 package org.apache.wicket.bean.validation;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -87,7 +86,7 @@ public class PropertyValidatorRequiredTest
        {
                Property property = new 
Property(DefaultPropertyResolverTest.BeanWithPassword.class, "password");
 
-               assertEquals(1, new 
BeanValidationConfiguration().getRequiredConstraints(property).size());
+               assertTrue(new PropertyValidator<>(property).isRequired());
        }
 
        public static class TestApplication extends MockApplication
diff --git 
a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationApplication.java
 
b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationApplication.java
index 222b629..aceddfa 100644
--- 
a/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationApplication.java
+++ 
b/wicket-examples/src/main/java/org/apache/wicket/examples/bean/validation/BeanValidationApplication.java
@@ -16,14 +16,10 @@
  */
 package org.apache.wicket.examples.bean.validation;
 
-import java.util.Collections;
-import java.util.List;
-
 import javax.validation.metadata.ConstraintDescriptor;
 
 import org.apache.wicket.Page;
 import org.apache.wicket.bean.validation.BeanValidationConfiguration;
-import org.apache.wicket.bean.validation.Property;
 import org.apache.wicket.examples.WicketExampleApplication;
 
 public class BeanValidationApplication extends WicketExampleApplication
@@ -43,8 +39,9 @@ public class BeanValidationApplication extends 
WicketExampleApplication
                         * Let bean-validation handle required constraints.
                         */
                        @Override
-                       public List<ConstraintDescriptor<?>> 
getRequiredConstraints(Property property) {
-                               return Collections.emptyList();
+                       public boolean 
isRequiredConstraint(ConstraintDescriptor<?> constraint)
+                       {
+                               return false;
                        }
                }.configure(this);
        }

Reply via email to