Author: epbernard
Date: 2009-02-26 08:52:37 -0500 (Thu, 26 Feb 2009)
New Revision: 16044
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java
Log:
BVAL-130 Make ConstraintDescriptor generic: ConstraintDescriptor<T extends
Annotation>
Fix a bunch of untypesafe calls to the codebase
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
===================================================================
---
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -28,7 +28,7 @@
* @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
-public interface ConstraintDescriptor {
+public interface ConstraintDescriptor<T extends Annotation> {
/**
* Returns the annotation describing the constraint declaration.
* If a composing constraint, parameter values are reflecting
@@ -36,7 +36,7 @@
*
* @return The annotation for this constraint.
*/
- Annotation getAnnotation();
+ T getAnnotation();
/**
* The Set of groups the constraint is applied on.
@@ -52,8 +52,8 @@
*
* @return list of the constraint validation implementation classes.
*/
- List<Class<? extends ConstraintValidator<?, ?>>>
- getConstraintValidatorClasses();
+ List<Class<? extends ConstraintValidator<T, ?>>>
+ getConstraintValidatorClasses();
/**
* Returns a map containing the annotation parameter names as keys and the
@@ -75,7 +75,7 @@
* @return a set of <code>ConstraintDescriptor<code> objects or an empty
set
* in case there are no composing constraints.
*/
- Set<ConstraintDescriptor> getComposingConstraints();
+ Set<ConstraintDescriptor<?>> getComposingConstraints();
/**
* @return true if the constraint is annotated with @ReportAsSingleViolation
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
===================================================================
---
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -71,5 +71,5 @@
*
* @return constraint metadata
*/
- ConstraintDescriptor getConstraintDescriptor();
+ ConstraintDescriptor<?> getConstraintDescriptor();
}
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java
===================================================================
---
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ElementDescriptor.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -45,5 +45,5 @@
*
* @return Set of constraint descriptors for this element
*/
- Set<ConstraintDescriptor> getConstraintDescriptors();
+ Set<ConstraintDescriptor<?>> getConstraintDescriptors();
}
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java
===================================================================
---
beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
* @return Interpolated error message.
*/
String interpolate(String message,
- ConstraintDescriptor constraintDescriptor,
+ ConstraintDescriptor<?> constraintDescriptor,
Object value);
/**
@@ -54,7 +54,7 @@
* @return Interpolated error message.
*/
String interpolate(String message,
- ConstraintDescriptor constraintDescriptor,
+ ConstraintDescriptor<?> constraintDescriptor,
Object value,
Locale locale);
}
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -49,7 +49,7 @@
* @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
-public class ConstraintDescriptorImpl<U extends Annotation> implements
ConstraintDescriptor {
+public class ConstraintDescriptorImpl<T extends Annotation> implements
ConstraintDescriptor<T> {
private static final Logger log = LoggerFactory.make();
private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] {
Default.class };
private static final int OVERRIDES_PARAMETER_DEFAULT_INDEX = -1;
@@ -57,13 +57,13 @@
/**
* The actual constraint annotation.
*/
- private final U annotation;
+ private final T annotation;
/**
* The set of classes implementing the validation for this constraint. See also
* <code>ConstraintValidator</code> resolution algorithm.
*/
- private final List<Class<? extends ConstraintValidator<?, ?>>>
constraintClasses = new ArrayList<Class<? extends ConstraintValidator<?,
?>>>();
+ private final List<Class<? extends ConstraintValidator<T, ?>>>
constraintClasses = new ArrayList<Class<? extends ConstraintValidator<T,
?>>>();
/**
* The groups for which to apply this constraint.
@@ -79,7 +79,7 @@
/**
* The composing constraints for this constraints.
*/
- private final Set<ConstraintDescriptor> composingConstraints = new
HashSet<ConstraintDescriptor>();
+ private final Set<ConstraintDescriptor<?>> composingConstraints = new
HashSet<ConstraintDescriptor<?>>();
/**
* Override paramter values used for composing constraints.
@@ -96,7 +96,7 @@
*/
private final ConstraintHelper constraintHelper;
- public ConstraintDescriptorImpl(U annotation, Class<?>[] groups, ConstraintHelper
constraintHelper) {
+ public ConstraintDescriptorImpl(T annotation, Class<?>[] groups, ConstraintHelper
constraintHelper) {
this( annotation, new HashSet<Class<?>>(), constraintHelper );
if ( groups.length == 0 ) {
groups = DEFAULT_GROUP;
@@ -104,7 +104,7 @@
this.groups.addAll( Arrays.asList( groups ) );
}
- public ConstraintDescriptorImpl(U annotation, Set<Class<?>> groups,
ConstraintHelper constraintHelper) {
+ private ConstraintDescriptorImpl(T annotation, Set<Class<?>> groups,
ConstraintHelper constraintHelper) {
this.annotation = annotation;
this.groups = groups;
this.parameters = getAnnotationParameters( annotation );
@@ -125,15 +125,25 @@
constraintClasses.addAll( constraintHelper.getBuiltInConstraints( annotation ) );
}
else {
- Constraint constraint = annotation.annotationType().getAnnotation( Constraint.class
);
- constraintClasses.addAll( Arrays.asList( constraint.validatedBy() ) );
+ //TODO are we sure a @Constraint is there?
+ final Class<? extends Annotation> annotationType = annotation.annotationType();
+ Class<? extends ConstraintValidator<?,?>>[] validatedBy = annotationType
+ .getAnnotation( Constraint.class )
+ .validatedBy();
+ for (Class<? extends ConstraintValidator<?,?>> validator : validatedBy) {
+ //FIXME does this create a CCE at runtime?
+ //FIXME if yes wrap into VE, if no we need to test the type here
+ //Once resolved,we can @SuppressWarning("unchecked") on the cast
+ Class<? extends ConstraintValidator<T,?>> safeValidator = (Class<?
extends ConstraintValidator<T,?>>) validator;
+ constraintClasses.add( safeValidator );
+ }
}
}
/**
* {@inheritDoc}
*/
- public U getAnnotation() {
+ public T getAnnotation() {
return annotation;
}
@@ -147,7 +157,7 @@
/**
* {@inheritDoc}
*/
- public List<Class<? extends ConstraintValidator<?, ?>>>
getConstraintValidatorClasses() {
+ public List<Class<? extends ConstraintValidator<T, ?>>>
getConstraintValidatorClasses() {
return Collections.unmodifiableList( constraintClasses );
}
@@ -161,7 +171,7 @@
/**
* {@inheritDoc}
*/
- public Set<ConstraintDescriptor> getComposingConstraints() {
+ public Set<ConstraintDescriptor<?>> getComposingConstraints() {
return composingConstraints;
}
@@ -249,10 +259,7 @@
for ( Annotation declaredAnnotation :
annotation.annotationType().getDeclaredAnnotations() ) {
if ( constraintHelper.isConstraintAnnotation( declaredAnnotation )
|| constraintHelper.isBuiltinConstraint( declaredAnnotation ) ) {
- ConstraintDescriptorImpl descriptor = createComposingConstraintDescriptor(
- OVERRIDES_PARAMETER_DEFAULT_INDEX,
- declaredAnnotation
- );
+ ConstraintDescriptorImpl<?> descriptor = createComposingConstraintDescriptor(
declaredAnnotation, OVERRIDES_PARAMETER_DEFAULT_INDEX );
composingConstraints.add( descriptor );
log.debug( "Adding composing constraint: " + descriptor );
}
@@ -260,8 +267,8 @@
List<Annotation> multiValueConstraints =
constraintHelper.getMultiValueConstraints( declaredAnnotation );
int index = 1;
for ( Annotation constraintAnnotation : multiValueConstraints ) {
- ConstraintDescriptorImpl descriptor = createComposingConstraintDescriptor(
- index, constraintAnnotation
+ ConstraintDescriptorImpl<?> descriptor = createComposingConstraintDescriptor(
+ constraintAnnotation, index
);
composingConstraints.add( descriptor );
log.debug( "Adding composing constraint: " + descriptor );
@@ -271,13 +278,25 @@
}
}
- private ConstraintDescriptorImpl createComposingConstraintDescriptor(int index,
Annotation constraintAnnotation) {
- AnnotationDescriptor annotationDescriptor = new AnnotationDescriptor(
- constraintAnnotation.annotationType(), getAnnotationParameters( constraintAnnotation
)
+ private <U extends Annotation> ConstraintDescriptorImpl<U>
createComposingConstraintDescriptor(U declaredAnnotation, int index) {
+ //TODO don't quite understand this warning
+ //TODO assuming U.getClass() returns Class<U>
+ @SuppressWarnings("unchecked")
+ final Class<U> annotationType = (Class<U>)
declaredAnnotation.annotationType();
+ return createComposingConstraintDescriptor(
+ index,
+ declaredAnnotation,
+ annotationType
+ );
+ }
+
+ private <U extends Annotation> ConstraintDescriptorImpl<U>
createComposingConstraintDescriptor(int index, U constraintAnnotation, Class<U>
annotationType) {
+ AnnotationDescriptor<U> annotationDescriptor = new
AnnotationDescriptor<U>(
+ annotationType, getAnnotationParameters( constraintAnnotation )
);
Map<String, Object> overrides = overrideParameters.get(
new ClassIndexWrapper(
- constraintAnnotation.annotationType(), index
+ annotationType, index
)
);
if ( overrides != null ) {
@@ -285,8 +304,8 @@
annotationDescriptor.setValue( entry.getKey(), entry.getValue() );
}
}
- Annotation annotationProxy = AnnotationFactory.create( annotationDescriptor );
- return new ConstraintDescriptorImpl( annotationProxy, groups, constraintHelper );
+ U annotationProxy = AnnotationFactory.create( annotationDescriptor );
+ return new ConstraintDescriptorImpl<U>( annotationProxy, groups, constraintHelper
);
}
private class ClassIndexWrapper {
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintHelper.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -78,7 +78,8 @@
public ConstraintHelper() {
- List<Class<? extends ConstraintValidator<?, ?>>> constraintList = new
ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+ List<Class<? extends ConstraintValidator<?, ?>>> constraintList =
+ new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
constraintList.add( AssertFalseValidator.class );
builtinConstraints.put( AssertFalse.class, constraintList );
@@ -131,16 +132,28 @@
builtinConstraints.put( Pattern.class, constraintList );
}
- public List<Class<? extends ConstraintValidator<?, ?>>>
getBuiltInConstraints(Annotation annotation) {
- List<Class<? extends ConstraintValidator<?, ?>>> constraints =
builtinConstraints.get( annotation.annotationType() );
+ public <T extends Annotation> List<Class<? extends ConstraintValidator<T,
?>>> getBuiltInConstraints(T annotation) {
+ final List<Class<? extends ConstraintValidator<?, ?>>> builtInList =
getBuiltInFromAnnotationType( annotation.annotationType() );
- if ( constraints == null ) {
+ if (builtInList == null || builtInList.size() == 0) {
throw new ValidationException( "Unable to find constraints for " +
annotation.annotationType() );
}
+ List<Class<? extends ConstraintValidator<T, ?>>> constraints =
+ new ArrayList<Class<? extends ConstraintValidator<T, ?>>>(
builtInList.size() );
+ for (Class<? extends ConstraintValidator<?, ?>> validatorClass :
builtInList) {
+ //safe cause all CV for a given annotation A are CV<A, ?>
+ @SuppressWarnings( "unchecked" )
+ Class<ConstraintValidator<T, ?>> safeValdiatorClass =
(Class<ConstraintValidator<T, ?>>) validatorClass;
+ constraints.add( safeValdiatorClass );
+ }
return constraints;
}
+ private List<Class<? extends ConstraintValidator<?, ?>>>
getBuiltInFromAnnotationType(Class<?> annotationType) {
+ return builtinConstraints.get( annotationType );
+ }
+
public boolean isBuiltinConstraint(Annotation annotation) {
return builtinConstraints.containsKey( annotation.annotationType() );
}
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintTree.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -22,6 +22,8 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+
import org.hibernate.validation.AmbiguousConstraintUsageException;
import javax.validation.ConstraintDescriptor;
import javax.validation.ConstraintValidator;
@@ -40,29 +42,34 @@
*
* @author Hardy Ferentschik
*/
-public class ConstraintTree {
+public class ConstraintTree<T extends Annotation> {
private static final Logger log = LoggerFactory.make();
- private final ConstraintTree parent;
- private final List<ConstraintTree> children;
- private final ConstraintDescriptor descriptor;
+ private final ConstraintTree<?> parent;
+ private final List<ConstraintTree<?>> children;
+ private final ConstraintDescriptor<T> descriptor;
- public ConstraintTree(ConstraintDescriptor descriptor) {
+ public ConstraintTree(ConstraintDescriptor<T> descriptor) {
this( descriptor, null );
}
- private ConstraintTree(ConstraintDescriptor descriptor, ConstraintTree parent) {
+ private ConstraintTree(ConstraintDescriptor<T> descriptor, ConstraintTree<?>
parent) {
this.parent = parent;
this.descriptor = descriptor;
- children = new ArrayList<ConstraintTree>(
descriptor.getComposingConstraints().size() );
+ final Set<ConstraintDescriptor<?>> composingConstraints =
descriptor.getComposingConstraints();
+ children = new ArrayList<ConstraintTree<?>>( composingConstraints.size()
);
- for ( ConstraintDescriptor composingDescriptor : descriptor.getComposingConstraints() )
{
- ConstraintTree treeNode = new ConstraintTree( composingDescriptor, this );
+ for ( ConstraintDescriptor<?> composingDescriptor : composingConstraints ) {
+ ConstraintTree<?> treeNode = createConstraintTree( composingDescriptor );
children.add( treeNode );
}
}
+ private <U extends Annotation> ConstraintTree<U>
createConstraintTree(ConstraintDescriptor<U> composingDescriptor) {
+ return new ConstraintTree<U>( composingDescriptor, this );
+ }
+
public boolean isRoot() {
return parent == null;
}
@@ -71,7 +78,7 @@
return parent;
}
- public List<ConstraintTree> getChildren() {
+ public List<ConstraintTree<?>> getChildren() {
return children;
}
@@ -79,7 +86,7 @@
return children.size() > 0;
}
- public ConstraintDescriptor getDescriptor() {
+ public ConstraintDescriptor<T> getDescriptor() {
return descriptor;
}
@@ -150,15 +157,18 @@
* @return A initalized constraint validator matching the type of the value to be
validated.
*/
private ConstraintValidator getInitalizedValidator(Object value,
ConstraintValidatorFactory constraintFactory) {
- ConstraintValidator constraintValidator;
- Class validatorClass;
+ Class<? extends ConstraintValidator<T, ?>> validatorClass;
+ //FIXME This sounds really bad, why value can be null. Why are we deciding of the
validator based on the value?
if ( value == null ) {
validatorClass = descriptor.getConstraintValidatorClasses().get( 0 );
}
else {
validatorClass = findMatchingValidatorClass( value );
}
- constraintValidator = constraintFactory.getInstance( validatorClass );
+ //
+ @SuppressWarnings("unchecked")
+ ConstraintValidator<T,?> constraintValidator =
+ constraintFactory.getInstance( validatorClass );
initializeConstraint( descriptor, constraintValidator );
return constraintValidator;
}
@@ -174,9 +184,9 @@
Class valueClass = determineValueClass( value );
- Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation,
?>>> validatorsTypes = ValidatorTypeHelper
- .getValidatorsTypes( descriptor.getConstraintValidatorClasses() );
- List<Class> assignableClasses = findAssingableClasses( valueClass,
validatorsTypes );
+ Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>>
validatorsTypes =
+ ValidatorTypeHelper.getValidatorsTypes( descriptor.getConstraintValidatorClasses()
);
+ List<Class> assignableClasses = findAssignableClasses( valueClass,
validatorsTypes );
resolveAssignableClasses( assignableClasses );
verifyResolveWasUnique( valueClass, assignableClasses );
@@ -202,7 +212,7 @@
}
}
- private List<Class> findAssingableClasses(Class valueClass, Map<Class<?>,
Class<? extends ConstraintValidator<? extends Annotation, ?>>>
validatorsTypes) {
+ private List<Class> findAssignableClasses(Class valueClass, Map<Class<?>,
Class<? extends ConstraintValidator<?, ?>>> validatorsTypes) {
List<Class> assignableClasses = new ArrayList<Class>();
for ( Class clazz : validatorsTypes.keySet() ) {
if ( clazz.isAssignableFrom( valueClass ) ) {
@@ -247,9 +257,8 @@
} while ( classesToRemove.size() > 0 );
}
- @SuppressWarnings("unchecked")
private void initializeConstraint
- (ConstraintDescriptor
+ (ConstraintDescriptor<T>
descriptor, ConstraintValidator
constraintValidator) {
try {
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ElementDescriptorImpl.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -35,7 +35,7 @@
public class ElementDescriptorImpl implements PropertyDescriptor {
private final Class<?> returnType;
private final boolean cascaded;
- private final Set<ConstraintDescriptor> constraintDescriptors = new
HashSet<ConstraintDescriptor>();
+ private final Set<ConstraintDescriptor<?>> constraintDescriptors = new
HashSet<ConstraintDescriptor<?>>();
private final String propertyPath;
@@ -72,7 +72,7 @@
/**
* {@inheritDoc}
*/
- public Set<ConstraintDescriptor> getConstraintDescriptors() {
+ public Set<ConstraintDescriptor<?>> getConstraintDescriptors() {
return Collections.unmodifiableSet( constraintDescriptors );
}
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -45,15 +45,15 @@
* @return Return a Map<Class, Class<? extends
ConstraintValidator>> where the map
* key is the type the validator accepts and value the validator class itself.
*/
- public static Map<Class<?>, Class<? extends ConstraintValidator<? extends
Annotation, ?>>>
- getValidatorsTypes(List<Class<? extends ConstraintValidator<?, ?>>>
validators) {
+ public static <T extends Annotation> Map<Class<?>, Class<? extends
ConstraintValidator<?, ?>>> getValidatorsTypes(
+ List<Class<? extends ConstraintValidator<T, ?>>> validators) {
if ( validators == null || validators.size() == 0 ) {
throw new ValidationException( "No ConstraintValidators associated to
@Constraint" );
}
else {
- Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation,
?>>> validatorsTypes =
- new HashMap<Class<?>, Class<? extends ConstraintValidator<? extends
Annotation, ?>>>();
- for ( Class<? extends ConstraintValidator<? extends Annotation, ?>>
validator : validators ) {
+ Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>>
validatorsTypes =
+ new HashMap<Class<?>, Class<? extends ConstraintValidator<?,
?>>>();
+ for ( Class<? extends ConstraintValidator<?, ?>> validator : validators )
{
validatorsTypes.put( extractType( validator ), validator );
}
return validatorsTypes;
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationDescriptor.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -33,17 +33,17 @@
* @author Davide Marchignoli
* @author Hardy Ferentschik
*/
-public class AnnotationDescriptor {
+public class AnnotationDescriptor<T extends Annotation> {
- private final Class<? extends Annotation> type;
+ private final Class<T> type;
private final Map<String, Object> elements = new HashMap<String, Object>();
- public AnnotationDescriptor(Class<? extends Annotation> annotationType) {
+ public AnnotationDescriptor(Class<T> annotationType) {
this.type = annotationType;
}
- public AnnotationDescriptor(Class<? extends Annotation> annotationType,
Map<String, Object> elements) {
+ public AnnotationDescriptor(Class<T> annotationType, Map<String, Object>
elements) {
this.type = annotationType;
for (Map.Entry<String, Object> entry : elements.entrySet()) {
this.elements.put( entry.getKey(), entry.getValue() );
@@ -66,7 +66,7 @@
return elements.size();
}
- public Class<? extends Annotation> type() {
+ public Class<T> type() {
return type;
}
}
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java
===================================================================
---
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/annotationfactory/AnnotationFactory.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -34,7 +34,7 @@
public class AnnotationFactory {
@SuppressWarnings("unchecked")
- public static <T extends Annotation> T create(AnnotationDescriptor descriptor) {
+ public static <T extends Annotation> T create(AnnotationDescriptor<T>
descriptor) {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
//TODO round 34ms to generate the proxy, hug! is Javassist Faster?
Class<T> proxyClass = (Class<T>) Proxy.getProxyClass( classLoader,
descriptor.type() );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -114,11 +114,11 @@
configuration = Validation.byDefaultProvider().configure();
configuration.messageInterpolator(
new MessageInterpolator() {
- public String interpolate(String message, ConstraintDescriptor constraintDescriptor,
Object value) {
+ public String interpolate(String message, ConstraintDescriptor<?>
constraintDescriptor, Object value) {
return "my custom message";
}
- public String interpolate(String message, ConstraintDescriptor constraintDescriptor,
Object value, Locale locale) {
+ public String interpolate(String message, ConstraintDescriptor<?>
constraintDescriptor, Object value, Locale locale) {
throw new UnsupportedOperationException( "No specific locale is possible"
);
}
}
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForNumberTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -36,7 +36,7 @@
@Test
public void testIsValid() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class
);
descriptor.setValue( "integer", 5 );
descriptor.setValue( "fraction", 2 );
descriptor.setValue( "message", "{validator.digits}" );
@@ -64,7 +64,7 @@
@Test
public void testIsValidZeroLength() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class
);
descriptor.setValue( "integer", 0 );
descriptor.setValue( "fraction", 0 );
descriptor.setValue( "message", "{validator.digits}" );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/DigitsValidatorForStringTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -37,7 +37,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Digits.class );
+ AnnotationDescriptor<Digits> descriptor = new AnnotationDescriptor( Digits.class
);
descriptor.setValue( "integer", 5 );
descriptor.setValue( "fraction", 2 );
descriptor.setValue( "message", "{validator.digits}" );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthValidatorTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -36,7 +36,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Length.class );
+ AnnotationDescriptor<Length> descriptor = new AnnotationDescriptor<Length>(
Length.class );
descriptor.setValue( "min", 1 );
descriptor.setValue( "max", 3 );
descriptor.setValue( "message", "{validator.length}" );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForNumberTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Max.class );
+ AnnotationDescriptor<Max> descriptor = new AnnotationDescriptor( Max.class );
descriptor.setValue( "value", 15l );
descriptor.setValue( "message", "{validator.max}" );
Max m = AnnotationFactory.create( descriptor );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MaxValidatorForStringTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -37,7 +37,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Max.class );
+ AnnotationDescriptor<Max> descriptor = new AnnotationDescriptor( Max.class );
descriptor.setValue( "value", 15l );
descriptor.setValue( "message", "{validator.max}" );
Max m = AnnotationFactory.create( descriptor );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForNumberTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -39,7 +39,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Min.class );
+ AnnotationDescriptor<Min> descriptor = new AnnotationDescriptor<Min>(
Min.class );
descriptor.setValue( "value", 15l );
descriptor.setValue( "message", "{validator.min}" );
Min m = AnnotationFactory.create( descriptor );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/MinValidatorForStringTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -36,7 +36,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Min.class );
+ AnnotationDescriptor<Min> descriptor = new AnnotationDescriptor( Min.class );
descriptor.setValue( "value", 15l );
descriptor.setValue( "message", "{validator.min}" );
Min m = AnnotationFactory.create( descriptor );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternValidatorTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -37,7 +37,7 @@
@BeforeClass
public static void init() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+ AnnotationDescriptor<Pattern> descriptor = new AnnotationDescriptor(
Pattern.class );
descriptor.setValue( "regexp", "foobar" );
descriptor.setValue( "message", "{validator.pattern}" );
Pattern p = AnnotationFactory.create( descriptor );
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -49,11 +49,11 @@
public void setUp() {
interpolator = new ResourceBundleMessageInterpolator( new TestResources() );
- AnnotationDescriptor descriptor = new AnnotationDescriptor( NotNull.class );
+ AnnotationDescriptor<NotNull> descriptor = new
AnnotationDescriptor<NotNull>( NotNull.class );
notNull = AnnotationFactory.create( descriptor );
- descriptor = new AnnotationDescriptor( Size.class );
- size = AnnotationFactory.create( descriptor );
+ AnnotationDescriptor<Size> sizeDescriptor = new AnnotationDescriptor<Size>(
Size.class );
+ size = AnnotationFactory.create( sizeDescriptor );
}
@Test
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -439,7 +439,7 @@
BeanDescriptor beanDescriptor = validator.getConstraintsForClass( Order.class );
PropertyDescriptor propertyDescriptor = beanDescriptor.getConstraintsForProperty(
"orderNumber" );
- Set<ConstraintDescriptor> descriptors =
propertyDescriptor.getConstraintDescriptors();
+ Set<ConstraintDescriptor<?>> descriptors =
propertyDescriptor.getConstraintDescriptors();
assertEquals( "There should be only one constraint descriptor", 1,
descriptors.size() );
ConstraintDescriptor descriptor = descriptors.iterator().next();
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ValidatorTypeTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -27,6 +27,7 @@
import org.junit.Test;
import
org.hibernate.validation.constraints.composition.FrenchZipcodeConstraintValidator;
+import org.hibernate.validation.constraints.composition.FrenchZipcode;
/**
* Tests for message resolution.
@@ -37,9 +38,10 @@
@Test
public void testTypeDiscovery() {
- List<Class<? extends ConstraintValidator<?, ?>>> validators = new
ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+ List<Class<? extends ConstraintValidator<FrenchZipcode, ?>>>
validators =
+ new ArrayList<Class<? extends ConstraintValidator<FrenchZipcode,
?>>>();
validators.add( FrenchZipcodeConstraintValidator.class );
- Map<Class<?>, Class<? extends ConstraintValidator<? extends Annotation,
?>>> validatorsTypes = ValidatorTypeHelper
+ Map<Class<?>, Class<? extends ConstraintValidator<?, ?>>>
validatorsTypes = ValidatorTypeHelper
.getValidatorsTypes( validators );
assertEquals( FrenchZipcodeConstraintValidator.class, validatorsTypes.get( String.class
) );
}
Modified:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java
===================================================================
---
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java 2009-02-26
11:48:50 UTC (rev 16043)
+++
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/annotationfactory/AnnotationFactoryTest.java 2009-02-26
13:52:37 UTC (rev 16044)
@@ -31,7 +31,7 @@
@Test
public void createAnnotationProxy() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Size.class );
+ AnnotationDescriptor<Size> descriptor = new AnnotationDescriptor<Size>(
Size.class );
descriptor.setValue( "min", 5 );
descriptor.setValue( "max", 10 );
@@ -43,13 +43,13 @@
@Test(expected = IllegalArgumentException.class)
public void createAnnotationProxyMissingRequiredParamter() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+ AnnotationDescriptor<Pattern> descriptor = new
AnnotationDescriptor<Pattern>( Pattern.class );
AnnotationFactory.create( descriptor );
}
@Test
public void createAnnotationProxyWithRequiredParamter() {
- AnnotationDescriptor descriptor = new AnnotationDescriptor( Pattern.class );
+ AnnotationDescriptor<Pattern> descriptor = new
AnnotationDescriptor<Pattern>( Pattern.class );
descriptor.setValue( "regexp", ".*" );
Pattern pattern = AnnotationFactory.create( descriptor );