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