[hibernate-commits] Hibernate SVN: r17004 - beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jul 6 09:00:58 EDT 2009


Author: epbernard
Date: 2009-07-06 09:00:57 -0400 (Mon, 06 Jul 2009)
New Revision: 17004

Added:
   beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Severity.java
Modified:
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/metadata/ConstraintDescriptor.java
   beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorTest.java
   beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Person.java
   beanvalidation/trunk/validation-tck/src/main/resources/tck-audit.xml
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java
Log:
BVAL-172 Provide ConstraintDescriptor#getPayload including implementation and TCK audit and test

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/metadata/ConstraintDescriptor.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/metadata/ConstraintDescriptor.java	2009-07-06 11:43:52 UTC (rev 17003)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/metadata/ConstraintDescriptor.java	2009-07-06 13:00:57 UTC (rev 17004)
@@ -22,6 +22,7 @@
 import java.util.Map;
 import java.util.Set;
 import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintPayload;
 
 /**
  * Describes a single constraint and its composing constraints.
@@ -50,6 +51,13 @@
 	Set<Class<?>> getGroups();
 
 	/**
+	 * The Set of payload the constraint hosts.
+	 *
+	 * @return payload classes hosted on the constraint or an empty set if none.
+	 */
+	Set<Class<ConstraintPayload>> getPayload();
+
+	/**
 	 * Immutable list of the constraint validation implementation classes.
 	 *
 	 * @return list of the constraint validation implementation classes.

Modified: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorTest.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorTest.java	2009-07-06 11:43:52 UTC (rev 17003)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/ConstraintDescriptorTest.java	2009-07-06 13:00:57 UTC (rev 17004)
@@ -23,6 +23,7 @@
 import javax.validation.constraints.Size;
 import javax.validation.groups.Default;
 import javax.validation.metadata.ConstraintDescriptor;
+import javax.validation.ConstraintPayload;
 
 import org.jboss.test.audit.annotations.SpecAssertion;
 import org.jboss.test.audit.annotations.SpecAssertions;
@@ -106,6 +107,20 @@
 	}
 
 	@Test
+	@SpecAssertion(section = "5.5", id = "f")
+	public void testPayload() {
+		ConstraintDescriptor<?> descriptor = getConstraintDescriptor( Person.class, "firstName" );
+		Set<Class<ConstraintPayload>> payload = descriptor.getPayload();
+		assertTrue( payload.size() == 1 );
+		assertEquals( payload.iterator().next(), Severity.Info.class, "Wrong payload" );
+
+		descriptor = getConstraintDescriptor( Order.class, "orderNumber" );
+		payload = descriptor.getPayload();
+		assertTrue( payload != null );
+		assertTrue( payload.size() == 0 );
+	}
+
+	@Test
 	@SpecAssertion(section = "5.5", id = "d")
 	public void testGetGroupsOnInterface() {
 		ConstraintDescriptor<?> descriptor = getConstraintDescriptor( Person.class, "lastName" );

Modified: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Person.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Person.java	2009-07-06 11:43:52 UTC (rev 17003)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Person.java	2009-07-06 13:00:57 UTC (rev 17004)
@@ -21,7 +21,7 @@
  * @author Hardy Ferentschik
  */
 public interface Person {
-	@NotEmpty(groups = PersonValidation.class)
+	@NotEmpty(groups = PersonValidation.class, payload = Severity.Info.class)
 	String getFirstName();
 
 	String getMiddleName();

Added: beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Severity.java
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Severity.java	                        (rev 0)
+++ beanvalidation/trunk/validation-tck/src/main/java/org/hibernate/jsr303/tck/tests/metadata/Severity.java	2009-07-06 13:00:57 UTC (rev 17004)
@@ -0,0 +1,10 @@
+package org.hibernate.jsr303.tck.tests.metadata;
+
+import javax.validation.ConstraintPayload;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface Severity {
+	interface Info extends ConstraintPayload {}
+}

Modified: beanvalidation/trunk/validation-tck/src/main/resources/tck-audit.xml
===================================================================
--- beanvalidation/trunk/validation-tck/src/main/resources/tck-audit.xml	2009-07-06 11:43:52 UTC (rev 17003)
+++ beanvalidation/trunk/validation-tck/src/main/resources/tck-audit.xml	2009-07-06 13:00:57 UTC (rev 17004)
@@ -924,6 +924,10 @@
             <text>The groups of a composing constraint are the groups of the composed
                 constraint</text>
         </assertion>
+        <assertion id="g">
+            <text>getPayload returns the payloads the constraint hosts or an empty set if none</text>
+        </assertion>
+
     </section>
 
     <section id="6" title="Built-in Constraint definitions">

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java	2009-07-06 11:43:52 UTC (rev 17003)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/metadata/ConstraintDescriptorImpl.java	2009-07-06 13:00:57 UTC (rev 17004)
@@ -34,6 +34,7 @@
 import javax.validation.OverridesAttribute;
 import javax.validation.ReportAsSingleViolation;
 import javax.validation.ValidationException;
+import javax.validation.ConstraintPayload;
 import javax.validation.groups.Default;
 import javax.validation.metadata.ConstraintDescriptor;
 
@@ -76,6 +77,8 @@
 	 */
 	private final Map<String, Object> attributes;
 
+	private final Set<Class<ConstraintPayload>> payload = new HashSet<Class<ConstraintPayload>>();
+
 	/**
 	 * The composing constraints for this constraints.
 	 */
@@ -119,11 +122,32 @@
 			this.groups.addAll( Arrays.asList( groupsFromAnnotation ) );
 		}
 
+		initializePayload( annotation );
+
 		findConstraintValidatorClasses();
 		Map<ClassIndexWrapper, Map<String, Object>> overrideParameters = parseOverrideParameters();
 		parseComposingConstraints( overrideParameters );
 	}
 
+	private void initializePayload(T annotation) {
+		Class<ConstraintPayload>[] payloadFromAnnotation;
+		try {
+			//TODO be extra safe and make sure this is an array of ConstraintPayload
+			@SuppressWarnings( "unchecked" )
+			Class<ConstraintPayload>[] unsafePayloadFromAnnotation = (Class<ConstraintPayload>[])
+					ReflectionHelper.getAnnotationParameter(annotation, "payload", Class[].class
+			);
+			payloadFromAnnotation = unsafePayloadFromAnnotation;
+		}
+		catch ( ValidationException e ) {
+			//ignore people not defining payload
+			payloadFromAnnotation = null;
+		}
+		if (payloadFromAnnotation != null) {
+			payload.addAll( Arrays.asList( payloadFromAnnotation ) );
+		}
+	}
+
 	private void findConstraintValidatorClasses() {
 		final Class<T> annotationType = getAnnotationType();
 		if ( constraintHelper.containsConstraintValidatorDefinition( annotationType ) ) {
@@ -169,6 +193,10 @@
 		return Collections.unmodifiableSet( groups );
 	}
 
+	public Set<Class<ConstraintPayload>> getPayload() {
+		return Collections.unmodifiableSet( payload );
+	}
+
 	public List<Class<? extends ConstraintValidator<T, ?>>> getConstraintValidatorClasses() {
 		return Collections.unmodifiableList( constraintValidatorDefinitonClasses );
 	}




More information about the hibernate-commits mailing list