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);
}