[hibernate-commits] Hibernate SVN: r16507 - in validator/trunk/hibernate-validator/src: test/java/org/hibernate/validation/constraints and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon May 4 13:06:35 EDT 2009


Author: epbernard
Date: 2009-05-04 13:06:34 -0400 (Mon, 04 May 2009)
New Revision: 16507

Added:
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/BoundariesConstraintValidator.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/CustomConstraintValidatorTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/Positive.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/PositiveConstraintValidator.java
Modified:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java
Log:
HV-146 ConstraintValidator impls cannot inherit from a super class implementing ConstraintValidator

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-05-04 15:34:08 UTC (rev 16506)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ValidatorTypeHelper.java	2009-05-04 17:06:34 UTC (rev 16507)
@@ -86,16 +86,8 @@
 		}
 		else if ( type instanceof Class ) {
 			Class clazz = ( Class ) type;
-			Type returnedType = resolveTypes( resolvedTypes, clazz.getGenericSuperclass() );
-			if ( returnedType != null ) {
-				return returnedType;
-			}
-			for ( Type genericInterface : clazz.getGenericInterfaces() ) {
-				returnedType = resolveTypes( resolvedTypes, genericInterface );
-				if ( returnedType != null ) {
-					return returnedType;
-				}
-			}
+			final Type returnedType = resolveTypeForClassAndHierarchy( resolvedTypes, clazz );
+			if ( returnedType != null) return  returnedType;
 		}
 		else if ( type instanceof ParameterizedType ) {
 			ParameterizedType paramType = ( ParameterizedType ) type;
@@ -116,13 +108,25 @@
 				return type;
 			}
 			else {
-				resolveTypes( resolvedTypes, rawType.getGenericSuperclass() );
-				for ( Type genericInterface : rawType.getGenericInterfaces() ) {
-					resolveTypes( resolvedTypes, genericInterface );
-				}
+				Type returnedType = resolveTypeForClassAndHierarchy( resolvedTypes, rawType );
+				if ( returnedType != null) return  returnedType;
 			}
 		}
 		//else we don't care I think
 		return null;
 	}
+
+	private static Type resolveTypeForClassAndHierarchy(Map<Type, Type> resolvedTypes, Class<?> clazz) {
+		Type returnedType = resolveTypes( resolvedTypes, clazz.getGenericSuperclass() );
+		if ( returnedType != null ) {
+			return returnedType;
+		}
+		for ( Type genericInterface : clazz.getGenericInterfaces() ) {
+			returnedType = resolveTypes( resolvedTypes, genericInterface );
+			if ( returnedType != null ) {
+				return returnedType;
+			}
+		}
+		return null;
+	}
 }

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/BoundariesConstraintValidator.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/BoundariesConstraintValidator.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/BoundariesConstraintValidator.java	2009-05-04 17:06:34 UTC (rev 16507)
@@ -0,0 +1,22 @@
+package org.hibernate.validation.constraints.custom;
+
+import java.lang.annotation.Annotation;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public abstract class BoundariesConstraintValidator<T extends Annotation> implements ConstraintValidator<T, Integer> {
+	private int low;
+	private int high;
+
+	protected void initialize(int low, int high) {
+		this.low = low;
+		this.high = high;
+	}
+
+	public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
+		return value >= low && value <= high;
+	}
+}

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/CustomConstraintValidatorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/CustomConstraintValidatorTest.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/CustomConstraintValidatorTest.java	2009-05-04 17:06:34 UTC (rev 16507)
@@ -0,0 +1,33 @@
+package org.hibernate.validation.constraints.custom;
+
+import java.util.Set;
+import javax.validation.Validation;
+import javax.validation.Validator;
+import javax.validation.ConstraintViolation;
+import javax.validation.PropertyDescriptor;
+
+import org.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+/**
+ * @author Emmanuel Bernard
+ */
+
+public class CustomConstraintValidatorTest {
+
+	@Test
+	public void testInheritedConstraintValidationImpl() {
+		Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
+		Phone p = new Phone();
+		p.size = -2;
+		final PropertyDescriptor propertyDescriptor = validator.getConstraintsForClass( Phone.class )
+				.getConstraintsForProperty( "size" );
+		assertNotNull( propertyDescriptor );
+		final Set<ConstraintViolation<Phone>> constraintViolations = validator.validate( p );
+		assertEquals( 1, constraintViolations.size() );
+	}
+
+	public static class Phone {
+		@Positive public int size;
+	}
+}

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/Positive.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/Positive.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/Positive.java	2009-05-04 17:06:34 UTC (rev 16507)
@@ -0,0 +1,22 @@
+package org.hibernate.validation.constraints.custom;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Documented;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import javax.validation.Constraint;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Constraint( validatedBy = { PositiveConstraintValidator.class })
+ at Target({ METHOD, FIELD, ANNOTATION_TYPE })
+ at Retention(RUNTIME)
+ at Documented
+public @interface Positive {
+	String message() default "{validation.positive}";
+	Class<?>[] groups() default {};
+}

Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/PositiveConstraintValidator.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/PositiveConstraintValidator.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/custom/PositiveConstraintValidator.java	2009-05-04 17:06:34 UTC (rev 16507)
@@ -0,0 +1,10 @@
+package org.hibernate.validation.constraints.custom;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class PositiveConstraintValidator extends BoundariesConstraintValidator<Positive> {
+	public void initialize(Positive constraintAnnotation) {
+		super.initialize( 0, Integer.MAX_VALUE );
+	}
+}




More information about the hibernate-commits mailing list