You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2009/10/20 11:01:10 UTC

svn commit: r827007 - in /myfaces/extensions/validator/trunk: examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/ examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/ exa...

Author: gpetracek
Date: Tue Oct 20 09:01:09 2009
New Revision: 827007

URL: http://svn.apache.org/viewvc?rev=827007&view=rev
Log:
basic composing constraint support

Added:
    myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/
    myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Birthday.java
    myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Name.java
Modified:
    myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/Person.java
    myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
    myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorInternals.java

Added: myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Birthday.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Birthday.java?rev=827007&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Birthday.java (added)
+++ myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Birthday.java Tue Oct 20 09:01:09 2009
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.demo.constraints;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Past;
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Past
+@NotNull
+
+@Constraint(validatedBy = {})
+@Retention(RUNTIME)
+@Target({METHOD, FIELD, ANNOTATION_TYPE})
+public @interface Birthday
+{
+    public abstract String message() default "no valid birthday";
+
+    public abstract Class<?>[] groups() default {};
+
+    public abstract Class<? extends Payload>[] payload() default {};
+}
\ No newline at end of file

Added: myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Name.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Name.java?rev=827007&view=auto
==============================================================================
--- myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Name.java (added)
+++ myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/constraints/Name.java Tue Oct 20 09:01:09 2009
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.validator.demo.constraints;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import javax.validation.OverridesAttribute;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@NotNull
+@Size(min = 2)
+
+@Constraint(validatedBy = {})
+@Retention(RUNTIME)
+@Target({METHOD, FIELD, ANNOTATION_TYPE})
+public @interface Name
+{
+    String message() default "invalid name"; //not used
+
+    Class<?>[] groups() default {};
+
+    Class<? extends Payload>[] payload() default {};
+
+    @OverridesAttribute(constraint = Size.class, name = "max")
+    int maxLength() default 20;
+}

Modified: myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/Person.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/Person.java?rev=827007&r1=827006&r2=827007&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/Person.java (original)
+++ myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/domain/Person.java Tue Oct 20 09:01:09 2009
@@ -18,7 +18,8 @@
  */
 package org.apache.myfaces.extensions.validator.demo.domain;
 
-import org.apache.myfaces.extensions.validator.beanval.payload.DisableClientSideValidation;
+import org.apache.myfaces.extensions.validator.demo.constraints.Name;
+import org.apache.myfaces.extensions.validator.demo.constraints.Birthday;
 
 import javax.validation.constraints.Size;
 import javax.validation.constraints.NotNull;
@@ -27,18 +28,16 @@
 
 public class Person
 {
-    @Size(min = 2, max = 20)
+    @Name(maxLength = 30)
     private String firstName;
 
-    @NotNull(payload = DisableClientSideValidation.class)
-    @Size(min = 2, max = 20, payload = DisableClientSideValidation.class)
+    @Name(maxLength = 30)
     private String lastName;
 
     @Size(min = 2, max = 10)
     private String password;
 
-    @Past
-    @NotNull
+    @Birthday
     private Date birthday;
 
     @Past

Modified: myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java?rev=827007&r1=827006&r2=827007&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java (original)
+++ myfaces/extensions/validator/trunk/examples/feature-set_02/src/main/java/org/apache/myfaces/extensions/validator/demo/gui/beans/RegistrationPage.java Tue Oct 20 09:01:09 2009
@@ -19,16 +19,17 @@
 package org.apache.myfaces.extensions.validator.demo.gui.beans;
 
 import org.apache.myfaces.extensions.validator.demo.domain.Person;
+import org.apache.myfaces.extensions.validator.beanval.payload.DisableClientSideValidation;
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
 public class RegistrationPage
 {
-    @NotNull
+    @NotNull(payload = DisableClientSideValidation.class)
     private String password;
 
-    @NotNull
+    @NotNull(payload = DisableClientSideValidation.class)
     private String passwordRepeated;
 
     private Person person;

Modified: myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorInternals.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorInternals.java?rev=827007&r1=827006&r2=827007&view=diff
==============================================================================
--- myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorInternals.java (original)
+++ myfaces/extensions/validator/trunk/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/BeanValidationInterceptorInternals.java Tue Oct 20 09:01:09 2009
@@ -27,6 +27,8 @@
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 import org.apache.myfaces.extensions.validator.util.JsfUtils;
 
@@ -43,6 +45,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.HashMap;
 import java.util.Set;
 
 /**
@@ -113,29 +116,60 @@
         }
     }
 
+    @ToDo(value = Priority.MEDIUM, description = "ConstraintDescriptor#isReportAsSingleViolation")
     private Map<String, Object> transformConstraintDescriptorToMetaData(
             ConstraintDescriptor<?> constraintDescriptor, Class elementClass)
     {
-        Map<String, Object> result = null;
+        Map<String, Object> result = new HashMap<String, Object>();
         MetaDataTransformer metaDataTransformer;
-        MetaDataEntry entry;
 
         metaDataTransformer = ExtValUtils.getMetaDataTransformerForValidationStrategy(
                 new BeanValidationVirtualValidationStrategy(constraintDescriptor, elementClass));
 
         if (metaDataTransformer != null)
         {
-            if (this.logger.isDebugEnabled())
+            result.putAll(transformMetaData(metaDataTransformer, constraintDescriptor));
+        }
+
+        if(!constraintDescriptor.isReportAsSingleViolation())
+        {
+            Set<ConstraintDescriptor<?>> composingConstraints = constraintDescriptor.getComposingConstraints();
+            if(composingConstraints != null && !composingConstraints.isEmpty())
             {
-                this.logger.debug(metaDataTransformer.getClass().getName() + " instantiated");
+                result.putAll(transformComposingConstraints(composingConstraints, elementClass));
             }
+        }
 
-            entry = new MetaDataEntry();
-            entry.setKey(constraintDescriptor.getAnnotation().annotationType().getName());
-            entry.setValue(constraintDescriptor);
+        return result;
+    }
 
-            result = metaDataTransformer.convertMetaData(entry);
+    private Map<String, Object> transformComposingConstraints(
+            Set<ConstraintDescriptor<?>> composingConstraints, Class elementClass)
+    {
+        Map<String, Object> result = new HashMap<String, Object>();
+        for(ConstraintDescriptor constraintDescriptor : composingConstraints)
+        {
+            result.putAll(transformConstraintDescriptorToMetaData(constraintDescriptor, elementClass));
         }
+
+        return result;
+    }
+
+    private Map<String, Object> transformMetaData(
+            MetaDataTransformer metaDataTransformer, ConstraintDescriptor<?> constraintDescriptor)
+    {
+        MetaDataEntry entry;
+        Map<String, Object> result;
+        if (this.logger.isDebugEnabled())
+        {
+            this.logger.debug(metaDataTransformer.getClass().getName() + " instantiated");
+        }
+
+        entry = new MetaDataEntry();
+        entry.setKey(constraintDescriptor.getAnnotation().annotationType().getName());
+        entry.setValue(constraintDescriptor);
+
+        result = metaDataTransformer.convertMetaData(entry);
         return result;
     }