Revert due to bad formatting "WICKET-5418 properly handle groups in NonNull 
constraint"

This reverts commit 49922cdd5ccba3b97c59106d3aea769b8468962e.


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/cfd506ff
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/cfd506ff
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/cfd506ff

Branch: refs/heads/master
Commit: cfd506ff7521cd9b1c28f1346ec85ecb9797e1f9
Parents: e35a93b
Author: Igor Vaynberg <[email protected]>
Authored: Fri Nov 15 15:31:19 2013 -0800
Committer: Igor Vaynberg <[email protected]>
Committed: Fri Nov 15 15:42:47 2013 -0800

----------------------------------------------------------------------
 .../wicket-bean-validation/pom.xml              |   6 -
 .../bean/validation/PropertyValidator.java      | 212 +++++++++----------
 .../PropertyValidatorRequiredTest.java          | 196 -----------------
 3 files changed, 96 insertions(+), 318 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/cfd506ff/wicket-experimental/wicket-bean-validation/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-bean-validation/pom.xml 
b/wicket-experimental/wicket-bean-validation/pom.xml
index 9322886..ae13d9f 100644
--- a/wicket-experimental/wicket-bean-validation/pom.xml
+++ b/wicket-experimental/wicket-bean-validation/pom.xml
@@ -25,11 +25,5 @@
                        <groupId>org.apache.wicket</groupId>
                        <artifactId>wicket-core</artifactId>
                </dependency>
-               <dependency>
-                       <groupId>org.hibernate</groupId>
-                       <artifactId>hibernate-validator</artifactId>
-                       <version>4.3.1.Final</version>
-                       <scope>test</scope>
-               </dependency>
        </dependencies>
 </project>

http://git-wip-us.apache.org/repos/asf/wicket/blob/cfd506ff/wicket-experimental/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
 
b/wicket-experimental/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
index 93bd4c4..032a818 100644
--- 
a/wicket-experimental/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
+++ 
b/wicket-experimental/wicket-bean-validation/src/main/java/org/apache/wicket/bean/validation/PropertyValidator.java
@@ -1,10 +1,6 @@
 package org.apache.wicket.bean.validation;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Set;
 
 import javax.validation.ConstraintViolation;
@@ -22,43 +18,40 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 
 /**
- * Validator that delegates to the bean validation framework. The integration
- * has to be first configured using {@link BeanValidationConfiguration}.
+ * Validator that delegates to the bean validation framework. The integration 
has to be first
+ * configured using {@link BeanValidationConfiguration}.
  * 
  * <p>
- * The validator must be provided a {@link Property}, unless one can be 
resolved
- * from the component implicitly. By default the configuration contains the
- * {@link DefaultPropertyResolver} so {@link PropertyModel}s are supported out
- * of the box - when attached to a component with a property model the property
- * does not need to be specified explicitly.
+ * The validator must be provided a {@link Property}, unless one can be 
resolved from the component
+ * implicitly. By default the configuration contains the {@link 
DefaultPropertyResolver} so
+ * {@link PropertyModel}s are supported out of the box - when attached to a 
component with a
+ * property model the property does not need to be specified explicitly.
  * </p>
  * 
  * <p>
- * The validator will set the required flag on the form component it is 
attached
- * to based on the presence of the @NotNull annotation. Notice, the required
- * flag will only be set to {@code true}, components with the required flag
- * already set to {@code true} will not have the flag set to {@code false} by
- * this validator.
+ * The validator will set the required flag on the form component it is 
attached to based on the
+ * presence of the @NotNull annotation. Notice, the required flag will only be 
set to {@code true},
+ * components with the required flag already set to {@code true} will not have 
the flag set to
+ * {@code false} by this validator.
  * </p>
  * 
  * <p>
- * The validator will allow {@link ITagModifier}s configured in
- * {@link BeanValidationConfiguration} to mutate the markup tag of the 
component
- * it is attached to.
+ * The validator will allow {@link ITagModifier}s configured in {@link 
BeanValidationConfiguration}
+ * to mutate the markup tag of the component it is attached to.
  * </p>
  * 
  * <p>
- * The validator specifies default error messages in the
- * {@code PropertyValidator.properties} file. These values can be overridden in
- * the application subclass' property files globally or in the page or panel
- * properties locally. See this file for the default messages supported.
+ * The validator specifies default error messages in the {@code 
PropertyValidator.properties} file.
+ * These values can be overridden in the application subclass' property files 
globally or in the
+ * page or panel properties locally. See this file for the default messages 
supported.
  * </p>
  * 
  * @author igor
  * 
  * @param <T>
  */
-public class PropertyValidator<T> extends Behavior implements IValidator<T> {
+public class PropertyValidator<T> extends Behavior implements IValidator<T>
+{
        private static final Class<?>[] EMPTY = new Class<?>[0];
 
        private FormComponent<T> component;
@@ -74,41 +67,49 @@ public class PropertyValidator<T> extends Behavior 
implements IValidator<T> {
         */
        private boolean requiredFlagSet;
 
-       public PropertyValidator(Class<?>... groups) {
+       public PropertyValidator(Class<?>... groups)
+       {
                this(null, groups);
        }
 
-       public PropertyValidator(IModel<Class<?>[]> groups) {
+       public PropertyValidator(IModel<Class<?>[]> groups)
+       {
                this(null, groups);
        }
 
-       public PropertyValidator(Property property, Class<?>... groups) {
+       public PropertyValidator(Property property, Class<?>... groups)
+       {
                this(property, new GroupsModel(groups));
        }
 
-       public PropertyValidator(Property property, IModel<Class<?>[]> groups) {
+       public PropertyValidator(Property property, IModel<Class<?>[]> groups)
+       {
                this.property_ = property;
                this.groups_ = groups;
        }
 
-       private Property getProperty() {
-               if (property_ == null) {
-                       property_ = 
BeanValidationConfiguration.get().resolveProperty(
-                                       component);
-                       if (property_ == null) {
+       private Property getProperty()
+       {
+               if (property_ == null)
+               {
+                       property_ = 
BeanValidationConfiguration.get().resolveProperty(component);
+                       if (property_ == null)
+                       {
                                throw new IllegalStateException(
-                                               "Could not resolve Property 
from component: "
-                                                               + component
-                                                               + ". Either 
specify the Property in the constructor or use a model that works in 
combination with a "
-                                                               + 
IPropertyResolver.class.getSimpleName()
-                                                               + " to resolve 
the Property automatically");
+                                       "Could not resolve Property from 
component: " +
+                                               component +
+                                               ". Either specify the Property 
in the constructor or use a model that works in combination with a " +
+                                               
IPropertyResolver.class.getSimpleName() +
+                                               " to resolve the Property 
automatically");
                        }
                }
                return property_;
        }
 
-       private Class<?>[] getGroups() {
-               if (groups_ == null) {
+       private Class<?>[] getGroups()
+       {
+               if (groups_ == null)
+               {
                        return EMPTY;
                }
                return groups_.getObject();
@@ -116,127 +117,106 @@ public class PropertyValidator<T> extends Behavior 
implements IValidator<T> {
 
        @SuppressWarnings("unchecked")
        @Override
-       public void bind(Component component) {
-               if (this.component != null) {
+       public void bind(Component component)
+       {
+               if (this.component != null)
+               {
                        throw new IllegalStateException( //
-                                       "This validator has already been added 
to component: "
-                                                       + this.component
-                                                       + ". This validator 
does not support reusing instances, please create a new one");
+                               "This validator has already been added to 
component: " + this.component +
+                                       ". This validator does not support 
reusing instances, please create a new one");
                }
 
-               if (!(component instanceof FormComponent)) {
-                       throw new 
IllegalStateException(getClass().getSimpleName()
-                                       + " can only be added to 
FormComponents");
+               if (!(component instanceof FormComponent))
+               {
+                       throw new 
IllegalStateException(getClass().getSimpleName() +
+                               " can only be added to FormComponents");
                }
 
-               // TODO add a validation key that appends the type so we can 
have
-               // different messages for
-               // @Size on String vs Collection - done but need to add a key 
for each
-               // superclass/interface
+               // TODO add a validation key that appends the type so we can 
have different messages for
+               // @Size on String vs Collection - done but need to add a key 
for each superclass/interface
 
-               this.component = (FormComponent<T>) component;
+               this.component = (FormComponent<T>)component;
        }
 
        @Override
-       public void onConfigure(Component component) {
+       public void onConfigure(Component component)
+       {
                super.onConfigure(component);
-               if (requiredFlagSet == false) {
-                       // "Required" flag is calculated upon component's model 
property, so
-                       // we must ensure,
-                       // that model object is accessible (i.e. component is 
already added
-                       // in a page).
+               if (requiredFlagSet == false)
+               {
+                       // "Required" flag is calculated upon component's model 
property, so we must ensure,
+                       // that model object is accessible (i.e. component is 
already added in a page).
                        requiredFlagSet = true;
-                       if (isRequired()) {
-                               this.component.setRequired(true);
-                       }
+                       setComponentRequiredFlag();
                }
        }
 
        @Override
-       public void detach(Component component) {
+       public void detach(Component component)
+       {
                super.detach(component);
-               if (groups_ != null) {
+               if (groups_ != null)
+               {
                        groups_.detach();
                }
        }
 
-       private List<NotNull> findNotNullConstraints() {
+       /**
+        * Marks the form component required if necessary
+        */
+       private void setComponentRequiredFlag()
+       {
                BeanValidationContext config = 
BeanValidationConfiguration.get();
                Validator validator = config.getValidator();
                Property property = getProperty();
 
-               List<NotNull> constraints = new ArrayList<NotNull>();
-
-               Iterator<ConstraintDescriptor<?>> it = new ConstraintIterator(
-                               validator, property);
+               // if the property has a NotNull constraint mark the form 
component required
 
-               while (it.hasNext()) {
+               Iterator<ConstraintDescriptor<?>> it = new 
ConstraintIterator(validator, property);
+               while (it.hasNext())
+               {
                        ConstraintDescriptor<?> desc = it.next();
-                       if 
(desc.getAnnotation().annotationType().equals(NotNull.class)) {
-                               constraints.add((NotNull) desc.getAnnotation());
-                       }
-               }
-
-               return constraints;
-       }
-
-       boolean isRequired() {
-               List<NotNull> constraints = findNotNullConstraints();
-
-               if (constraints.isEmpty()) {
-                       return false;
-               }
-
-               HashSet<Class<?>> validatorGroups = new HashSet<Class<?>>();
-               validatorGroups.addAll(Arrays.asList(getGroups()));
-
-               for (NotNull constraint : constraints) {
-                       if (constraint.groups().length == 0 && 
validatorGroups.isEmpty()) {
-                               return true;
-                       }
-
-                       for (Class<?> constraintGroup : constraint.groups()) {
-                               if (validatorGroups.contains(constraintGroup)) {
-                                       return true;
-                               }
+                       if 
(desc.getAnnotation().annotationType().equals(NotNull.class))
+                       {
+                               component.setRequired(true);
+                               break;
                        }
                }
-
-               return false;
        }
 
        @Override
        @SuppressWarnings({ "rawtypes", "unchecked" })
-       public void onComponentTag(Component component, ComponentTag tag) {
+       public void onComponentTag(Component component, ComponentTag tag)
+       {
                super.onComponentTag(component, tag);
 
                BeanValidationContext config = 
BeanValidationConfiguration.get();
                Validator validator = config.getValidator();
                Property property = getProperty();
 
-               // find any tag modifiers that apply to the constraints of the 
property
-               // being validated
+               // find any tag modifiers that apply to the constraints of the 
property being validated
                // and allow them to modify the component tag
 
-               Iterator<ConstraintDescriptor<?>> it = new ConstraintIterator(
-                               validator, property, getGroups());
+               Iterator<ConstraintDescriptor<?>> it = new 
ConstraintIterator(validator, property,
+                       getGroups());
 
-               while (it.hasNext()) {
+               while (it.hasNext())
+               {
                        ConstraintDescriptor<?> desc = it.next();
 
-                       ITagModifier modifier = 
config.getTagModifier(desc.getAnnotation()
-                                       .annotationType());
+                       ITagModifier modifier = 
config.getTagModifier(desc.getAnnotation().annotationType());
 
-                       if (modifier != null) {
-                               modifier.modify((FormComponent<?>) component, 
tag,
-                                               desc.getAnnotation());
+                       if (modifier != null)
+                       {
+                               modifier.modify((FormComponent<?>)component, 
tag, desc.getAnnotation());
                        }
                }
        }
 
        @SuppressWarnings("unchecked")
        @Override
-       public void validate(IValidatable<T> validatable) {
+       public void validate(IValidatable<T> validatable)
+       {
                BeanValidationContext config = 
BeanValidationConfiguration.get();
                Validator validator = config.getValidator();
 
@@ -244,14 +224,14 @@ public class PropertyValidator<T> extends Behavior 
implements IValidator<T> {
 
                // validate the value using the bean validator
 
-               Set<?> violations = validator.validateValue(property.getOwner(),
-                               property.getName(), validatable.getValue(), 
getGroups());
+               Set<?> violations = 
validator.validateValue(property.getOwner(), property.getName(),
+                       validatable.getValue(), getGroups());
 
                // iterate over violations and report them
 
-               for (ConstraintViolation<?> violation : 
(Set<ConstraintViolation<?>>) violations) {
-                       validatable.error(config.getViolationTranslator()
-                                       .convert(violation));
+               for (ConstraintViolation<?> violation : 
(Set<ConstraintViolation<?>>)violations)
+               {
+                       
validatable.error(config.getViolationTranslator().convert(violation));
                }
        }
 

http://git-wip-us.apache.org/repos/asf/wicket/blob/cfd506ff/wicket-experimental/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-experimental/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
 
b/wicket-experimental/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
deleted file mode 100644
index e5ee0cc..0000000
--- 
a/wicket-experimental/wicket-bean-validation/src/test/java/org/apache/wicket/bean/validation/PropertyValidatorRequiredTest.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.wicket.bean.validation;
-
-import static org.junit.Assert.*;
-
-import javax.validation.constraints.NotNull;
-
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.IMarkupResourceStreamProvider;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.markup.html.form.FormComponent;
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.mock.MockApplication;
-import org.apache.wicket.model.PropertyModel;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.StringResourceStream;
-import org.apache.wicket.util.tester.WicketTester;
-import org.apache.wicket.util.tester.WicketTesterScope;
-import org.junit.Rule;
-import org.junit.Test;
-
-public class PropertyValidatorRequiredTest {
-       @Rule
-       public static WicketTesterScope scope = new WicketTesterScope() {
-               protected WicketTester create() {
-                       return new WicketTester(new TestApplication());
-               };
-       };
-
-       @Test
-       public void test() {
-               TestPage page = scope.getTester().startPage(TestPage.class);
-
-               // no group
-               assertTrue(page.input1.isRequired());
-               assertFalse(page.input2.isRequired());
-               assertFalse(page.input3.isRequired());
-               assertFalse(page.input4.isRequired());
-
-               // group1
-               assertFalse(page.input5.isRequired());
-               assertTrue(page.input6.isRequired());
-               assertFalse(page.input7.isRequired());
-               assertTrue(page.input8.isRequired());
-
-               // group2
-               assertFalse(page.input9.isRequired());
-               assertFalse(page.input10.isRequired());
-               assertTrue(page.input11.isRequired());
-               assertTrue(page.input12.isRequired());
-
-               // group1+group2
-               assertFalse(page.input13.isRequired());
-               assertTrue(page.input14.isRequired());
-               assertTrue(page.input15.isRequired());
-               assertTrue(page.input16.isRequired());
-
-               // group3
-               assertFalse(page.input17.isRequired());
-               assertFalse(page.input18.isRequired());
-               assertFalse(page.input19.isRequired());
-               assertFalse(page.input20.isRequired());
-
-       }
-
-       public static class TestApplication extends MockApplication {
-               @Override
-               protected void init() {
-                       super.init();
-                       new BeanValidationConfiguration().configure(this);
-               }
-       }
-
-       public static class TestPage extends WebPage implements
-                       IMarkupResourceStreamProvider {
-
-               private TestBean bean = new TestBean();
-               private FormComponent<String> input1, input2, input3, input4, 
input5,
-                               input6, input7, input8, input9, input10, 
input11, input12,
-                               input13, input14, input15, input16, input17, 
input18, input19,
-                               input20;
-
-               public TestPage() {
-                       Form<?> form = new Form<Void>("form");
-                       add(form);
-
-                       input1 = new TextField<String>("input1", new 
PropertyModel<String>(
-                                       this, "bean.property"))
-                                       .add(new PropertyValidator<String>());
-                       input2 = new TextField<String>("input2", new 
PropertyModel<String>(
-                                       this, "bean.propertyOne"))
-                                       .add(new PropertyValidator<String>());
-                       input3 = new TextField<String>("input3", new 
PropertyModel<String>(
-                                       this, "bean.propertyTwo"))
-                                       .add(new PropertyValidator<String>());
-                       input4 = new TextField<String>("input4", new 
PropertyModel<String>(
-                                       this, "bean.propertyOneTwo"))
-                                       .add(new PropertyValidator<String>());
-
-                       input5 = new TextField<String>("input5", new 
PropertyModel<String>(
-                                       this, "bean.property")).add(new 
PropertyValidator<String>(
-                                       GroupOne.class));
-                       input6 = new TextField<String>("input6", new 
PropertyModel<String>(
-                                       this, "bean.propertyOne"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class));
-                       input7 = new TextField<String>("input7", new 
PropertyModel<String>(
-                                       this, "bean.propertyTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class));
-                       input8 = new TextField<String>("input8", new 
PropertyModel<String>(
-                                       this, "bean.propertyOneTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class));
-
-                       input9 = new TextField<String>("input9", new 
PropertyModel<String>(
-                                       this, "bean.property")).add(new 
PropertyValidator<String>(
-                                       GroupTwo.class));
-                       input10 = new TextField<String>("input10",
-                                       new PropertyModel<String>(this, 
"bean.propertyOne"))
-                                       .add(new 
PropertyValidator<String>(GroupTwo.class));
-                       input11 = new TextField<String>("input11",
-                                       new PropertyModel<String>(this, 
"bean.propertyTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupTwo.class));
-                       input12 = new TextField<String>("input12",
-                                       new PropertyModel<String>(this, 
"bean.propertyOneTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupTwo.class));
-
-                       input13 = new TextField<String>("input13",
-                                       new PropertyModel<String>(this, 
"bean.property"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class,
-                                                       GroupTwo.class));
-                       input14 = new TextField<String>("input14",
-                                       new PropertyModel<String>(this, 
"bean.propertyOne"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class,
-                                                       GroupTwo.class));
-                       input15 = new TextField<String>("input15",
-                                       new PropertyModel<String>(this, 
"bean.propertyTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class,
-                                                       GroupTwo.class));
-                       input16 = new TextField<String>("input16",
-                                       new PropertyModel<String>(this, 
"bean.propertyOneTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupOne.class,
-                                                       GroupTwo.class));
-
-                       input17 = new TextField<String>("input17",
-                                       new PropertyModel<String>(this, 
"bean.property"))
-                                       .add(new 
PropertyValidator<String>(GroupThree.class));
-                       input18 = new TextField<String>("input18",
-                                       new PropertyModel<String>(this, 
"bean.propertyOne"))
-                                       .add(new 
PropertyValidator<String>(GroupThree.class));
-                       input19 = new TextField<String>("input19",
-                                       new PropertyModel<String>(this, 
"bean.propertyTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupThree.class));
-                       input20 = new TextField<String>("input20",
-                                       new PropertyModel<String>(this, 
"bean.propertyOneTwo"))
-                                       .add(new 
PropertyValidator<String>(GroupThree.class));
-
-                       form.add(input1, input2, input3, input4, input5, 
input6, input7,
-                                       input8, input9, input10, input11, 
input12, input13,
-                                       input14, input15, input16, input17, 
input18, input19,
-                                       input20);
-
-               }
-
-               @Override
-               public IResourceStream getMarkupResourceStream(
-                               MarkupContainer container, Class<?> 
containerClass) {
-                       return new StringResourceStream(
-                                       "<form wicket:id='form'><input 
wicket:id='input1'/><input wicket:id='input2'/><input 
wicket:id='input3'/><input wicket:id='input4'/><input 
wicket:id='input5'/><input wicket:id='input6'/><input 
wicket:id='input7'/><input wicket:id='input8'/><input 
wicket:id='input9'/><input wicket:id='input10'/><input 
wicket:id='input11'/><input wicket:id='input12'/><input 
wicket:id='input13'/><input wicket:id='input14'/><input 
wicket:id='input15'/><input wicket:id='input16'/><input 
wicket:id='input17'/><input wicket:id='input18'/><input 
wicket:id='input19'/><input wicket:id='input20'/></form>");
-               }
-
-       }
-
-       public static interface GroupOne {
-       }
-
-       public static interface GroupTwo {
-       }
-
-       public static interface GroupThree {
-       }
-
-       public static class TestBean {
-               @NotNull
-               String property;
-
-               @NotNull(groups = { GroupOne.class })
-               String propertyOne;
-
-               @NotNull(groups = { GroupTwo.class })
-               String propertyTwo;
-
-               @NotNull(groups = { GroupOne.class, GroupTwo.class })
-               String propertyOneTwo;
-
-       }
-
-}

Reply via email to