[hibernate-commits] Hibernate SVN: r15646 - in validator/trunk: hibernate-validator/src/main/java/org/hibernate/validation/constraints and 11 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Wed Dec 3 07:26:30 EST 2008
Author: epbernard
Date: 2008-12-03 07:26:29 -0500 (Wed, 03 Dec 2008)
New Revision: 15646
Added:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/All.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/DefaultAlias.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/First.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Last.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Second.java
validator/trunk/validation-api/src/main/java/javax/validation/groups/
validator/trunk/validation-api/src/main/java/javax/validation/groups/Default.java
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/ValidatorConstants.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Length.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/NotEmpty.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Pattern.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProvider.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProviderImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidationContext.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintDescriptorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintViolationImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthConstraintTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternConstraintTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Animal.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Author.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/impl/ResourceBundleMessageResolverTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ReflectionHelperTest.java
validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
validator/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
validator/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
validator/trunk/validation-api/src/main/java/javax/validation/Validator.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalse.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrue.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Future.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Max.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Min.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/NotNull.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Null.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Past.java
validator/trunk/validation-api/src/main/java/javax/validation/constraints/Size.java
Log:
BVAL-79 Groups are now type based
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/ValidatorConstants.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/ValidatorConstants.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/ValidatorConstants.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -19,6 +19,7 @@
/**
* @author Hardy Ferentschik
+ * TODO remove
*/
public class ValidatorConstants {
@@ -28,5 +29,5 @@
/**
* The default group/sequence name used when no group parameter is passed to validate().
*/
- public static final String DEFAULT_GROUP_NAME = "default";
+ //public static final String DEFAULT_GROUP_NAME = "default";
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Length.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Length.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Length.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -36,11 +36,11 @@
@Target({ METHOD, FIELD, TYPE })
@Retention(RUNTIME)
public @interface Length {
- public abstract int min() default 0;
+ int min() default 0;
- public abstract int max() default Integer.MAX_VALUE;
+ int max() default Integer.MAX_VALUE;
- public abstract String message() default "{validator.length}";
+ String message() default "{validator.length}";
- public abstract String[] groups() default { };
+ Class<?>[] groups() default { };
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/NotEmpty.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/NotEmpty.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/NotEmpty.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -33,7 +33,7 @@
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
public @interface NotEmpty {
- public abstract String message() default "{validator.notEmpty}";
+ String message() default "{validator.notEmpty}";
- public abstract String[] groups() default { };
+ Class<?>[] groups() default { };
}
\ No newline at end of file
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Pattern.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Pattern.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/constraints/Pattern.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -33,9 +33,9 @@
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
public @interface Pattern {
- public abstract String message() default "{validator.pattern}";
+ String message() default "{validator.pattern}";
- public abstract String[] groups() default { };
+ Class<?>[] groups() default { };
/**
* @return the regular expression the annotated string must match.
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProvider.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProvider.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProvider.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -59,9 +59,9 @@
List<Member> getCascadedMembers();
/**
- * @return A map mapping defined group sequence names to a list of groups.
+ * @return A map mapping defined group sequences to a list of groups.
*/
- Map<String, List<String>> getGroupSequences();
+ Map<Class<?>, List<Class<?>>> getGroupSequences();
/**
* @return A list of <code>ValidatorMetaData</code> instances encapsulating the information of all the constraints
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProviderImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProviderImpl.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaDataProviderImpl.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -95,9 +95,9 @@
private ConstraintFactory constraintFactory = new ConstraintFactoryImpl();
/**
- * Maps group sequence names to the list of group/sequence names.
+ * Maps group sequences to the list of group/sequences.
*/
- private Map<String, List<String>> groupSequences = new HashMap<String, List<String>>();
+ private Map<Class<?>, List<Class<?>>> groupSequences = new HashMap<Class<?>, List<Class<?>>>();
public MetaDataProviderImpl(Class<T> beanClass, ConstraintFactory constraintFactory) {
this.beanClass = beanClass;
@@ -159,24 +159,24 @@
}
}
- for ( Map.Entry<String, List<String>> mapEntry : groupSequences.entrySet() ) {
- List<String> groupNames = mapEntry.getValue();
- List<String> expandedGroupNames = new ArrayList<String>();
- for ( String groupName : groupNames ) {
- expandedGroupNames.addAll( expandGroupSequenceNames( groupName ) );
+ for ( Map.Entry<Class<?>, List<Class<?>>> mapEntry : groupSequences.entrySet() ) {
+ List<Class<?>> groups = mapEntry.getValue();
+ List<Class<?>> expandedGroups = new ArrayList<Class<?>>();
+ for ( Class<?> group : groups ) {
+ expandedGroups.addAll( expandGroupSequences( group ) );
}
- groupSequences.put( mapEntry.getKey(), expandedGroupNames );
+ groupSequences.put( mapEntry.getKey(), expandedGroups );
}
if ( log.isDebugEnabled() && !groupSequences.isEmpty() ) {
log.debug( "Expanded groups sequences: {}", groupSequences );
}
}
- private List<String> expandGroupSequenceNames(String group) {
- List<String> groupList = new ArrayList<String>();
+ private List<Class<?>> expandGroupSequences(Class<?> group) {
+ List<Class<?>> groupList = new ArrayList<Class<?>>();
if ( groupSequences.containsKey( group ) ) {
- for ( String s : groupSequences.get( group ) ) {
- groupList.addAll( expandGroupSequenceNames( s ) );
+ for ( Class<?> localGroup : groupSequences.get( group ) ) {
+ groupList.addAll( expandGroupSequences( localGroup ) );
}
}
else {
@@ -275,8 +275,8 @@
@SuppressWarnings("unchecked")
private <A extends Annotation> ConstraintDescriptorImpl buildConstraintDescriptor(A annotation, Class constraintClass) {
- String[] groups = ReflectionHelper.getAnnotationParameter( annotation, "groups", String[].class );
- for ( String groupName : groups ) {
+ Class<?>[] groups = ReflectionHelper.getAnnotationParameter( annotation, "groups", Class[].class );
+ for ( Class<?> groupName : groups ) {
if ( groupSequences.containsKey( groupName ) ) {
throw new ValidationException( groupName + " is illegally used as group and sequence name." );
}
@@ -414,7 +414,7 @@
return cascadedMembers;
}
- public Map<String, List<String>> getGroupSequences() {
+ public Map<Class<?>, List<Class<?>>> getGroupSequences() {
return groupSequences;
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidationContext.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidationContext.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidationContext.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -47,10 +47,10 @@
private final T rootBean;
/**
- * Maps for each group name to an identity set to keep track of already validated objects. We have to make sure
+ * Maps for each group to an identity set to keep track of already validated objects. We have to make sure
* that each object gets only validated once (per group).
*/
- private final Map<String, IdentitySet> processedObjects;
+ private final Map<Class<?>, IdentitySet> processedObjects;
/**
* A list of all failing constraints so far.
@@ -65,7 +65,7 @@
/**
* The current group which is getting processed.
*/
- private String currentGroup;
+ private Class<?> currentGroup;
/**
* Stack for keep track of the currently validated object.
@@ -80,7 +80,7 @@
public ValidationContext(T rootBean, Object object) {
this.rootBean = rootBean;
validatedobjectStack.push( new ValidatedBean(object) );
- processedObjects = new HashMap<String, IdentitySet>();
+ processedObjects = new HashMap<Class<?>, IdentitySet>();
propertyPath = "";
failingConstraintViolations = new ArrayList<ConstraintViolationImpl<T>>();
}
@@ -105,11 +105,11 @@
return rootBean;
}
- public String getCurrentGroup() {
+ public Class<?> getCurrentGroup() {
return currentGroup;
}
- public void setCurrentGroup(String currentGroup) {
+ public void setCurrentGroup(Class<?> currentGroup) {
this.currentGroup = currentGroup;
}
@@ -182,7 +182,7 @@
return propertyPath;
}
- public boolean needsValidation(Set<String> groups) {
+ public boolean needsValidation(Set<Class<?>> groups) {
return groups.contains( currentGroup );
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -31,10 +31,9 @@
import javax.validation.ConstraintDescriptor;
import javax.validation.ConstraintViolation;
import javax.validation.MessageResolver;
-import javax.validation.PropertyDescriptor;
import javax.validation.Validator;
+import javax.validation.groups.Default;
-import org.hibernate.validation.ValidatorConstants;
import org.hibernate.validation.Version;
import org.hibernate.validation.impl.ConstraintDescriptorImpl;
import org.hibernate.validation.impl.ConstraintViolationImpl;
@@ -77,6 +76,7 @@
private final MessageResolver messageResolver;
private final ValidatorFactoryImplementor factory;
+ private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
public ValidatorImpl(ValidatorFactoryImplementor factory, MessageResolver messageResolver) {
this.factory = factory;
@@ -87,18 +87,18 @@
/**
* {@inheritDoc}
*/
- public <T> Set<ConstraintViolation<T>> validate(T object, String... groups) {
+ public <T> Set<ConstraintViolation<T>> validate(T object, Class<?>... groups) {
if ( object == null ) {
throw new IllegalArgumentException( "Validation of a null object" );
}
ValidationContext<T> context = new ValidationContext<T>( object );
- List<ConstraintViolationImpl<T>> list = validate( context, Arrays.asList( groups ) );
+ List<ConstraintViolationImpl<T>> list = validateInContext( context, Arrays.asList( groups ) );
return new HashSet<ConstraintViolation<T>>( list );
}
/**
- * Validates the ovject contained in <code>context</code>.
+ * Validates the object contained in <code>context</code>.
*
* @param context A context object containing the object to validate together with other state information needed
* for validation.
@@ -109,23 +109,23 @@
* @todo Currently we iterate the cascaded fields multiple times. Maybe we should change to an approach where we iterate the object graph only once.
* @todo Context root bean can be a different object than the current Validator<T> hence two different generics variables
*/
- private <T> List<ConstraintViolationImpl<T>> validate(ValidationContext<T> context, List<String> groups) {
+ private <T> List<ConstraintViolationImpl<T>> validateInContext(ValidationContext<T> context, List<Class<?>> groups) {
if ( context.peekValidatedObject() == null ) {
return Collections.emptyList();
}
// if no group is specified use the default
if ( groups.size() == 0 ) {
- groups = Arrays.asList( ValidatorConstants.DEFAULT_GROUP_NAME );
+ groups = Arrays.asList( DEFAULT_GROUP );
}
- List<String> expandedGroups;
+ List<Class<?>> expandedGroups;
boolean isGroupSequence;
- for ( String group : groups ) {
- expandedGroups = new ArrayList<String>();
- isGroupSequence = expandGroupName( context.peekValidatedObjectType(), group, expandedGroups );
+ for ( Class<?> group : groups ) {
+ expandedGroups = new ArrayList<Class<?>>();
+ isGroupSequence = expandGroup( context.peekValidatedObjectType(), group, expandedGroups );
- for ( String expandedGroupName : expandedGroups ) {
+ for ( Class<?> expandedGroupName : expandedGroups ) {
context.setCurrentGroup( expandedGroupName );
validateConstraints( context );
@@ -223,6 +223,7 @@
for ( Member member : cascadedMembers ) {
Type type = ReflectionHelper.typeOf( member );
context.pushProperty( ReflectionHelper.getPropertyName( member ) );
+ //FIXME change accessibility only once, that's somewhat costly. do it when Member is created
ReflectionHelper.setAccessibility( member );
Object value = ReflectionHelper.getValue( member, context.peekValidatedObject() );
validateCascadedConstraint( context, type, value );
@@ -253,7 +254,7 @@
context.replacePropertyIndex( propertyIndex );
context.pushValidatedObject( actualValue );
- validate( context, Arrays.asList( context.getCurrentGroup() ) );
+ validateInContext( context, Arrays.asList( new Class<?>[] { context.getCurrentGroup() } ) );
context.popValidatedObject();
i++;
}
@@ -263,14 +264,15 @@
/**
* {@inheritDoc}
*/
- public <T> Set<ConstraintViolation<T>> validateProperty(T object, String propertyName, String... groups) {
+ public <T> Set<ConstraintViolation<T>> validateProperty(T object, String propertyName, Class<?>... groups) {
List<ConstraintViolationImpl<T>> failingConstraintViolations = new ArrayList<ConstraintViolationImpl<T>>();
validateProperty( object, new PropertyIterator( propertyName ), failingConstraintViolations, groups );
return new HashSet<ConstraintViolation<T>>( failingConstraintViolations );
}
- private <T> void validateProperty(T object, PropertyIterator propertyIter, List<ConstraintViolationImpl<T>> failingConstraintViolations, String... groups) {
+ private <T> void validateProperty(T object, PropertyIterator propertyIter, List<ConstraintViolationImpl<T>> failingConstraintViolations, Class<?>... groups) {
+ if ( object == null ) throw new IllegalArgumentException("Validated object cannot be null");
@SuppressWarnings( "unchecked" )
final Class<T> beanType = (Class<T>) object.getClass();
@@ -282,18 +284,18 @@
// if no group is specified use the default
if ( groups.length == 0 ) {
- groups = new String[] { ValidatorConstants.DEFAULT_GROUP_NAME };
+ groups = DEFAULT_GROUP;
}
- List<String> expandedGroups;
+ List<Class<?>> expandedGroups;
boolean isGroupSequence;
- for ( String group : groups ) {
- expandedGroups = new ArrayList<String>();
- isGroupSequence = expandGroupName( beanType, group, expandedGroups );
+ for ( Class<?> group : groups ) {
+ expandedGroups = new ArrayList<Class<?>>();
+ isGroupSequence = expandGroup( beanType, group, expandedGroups );
- for ( String expandedGroupName : expandedGroups ) {
+ for ( Class<?> expandedGroup : expandedGroups ) {
- if ( !wrapper.descriptor.isInGroups( expandedGroupName ) ) {
+ if ( !wrapper.descriptor.isInGroups( expandedGroup ) ) {
continue;
}
@@ -332,7 +334,7 @@
/**
* {@inheritDoc}
*/
- public <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, String... groups) {
+ public <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups) {
List<ConstraintViolationImpl<T>> failingConstraintViolations = new ArrayList<ConstraintViolationImpl<T>>();
validateValue( beanType, value, new PropertyIterator( propertyName ), failingConstraintViolations, groups );
return new HashSet<ConstraintViolation<T>>( failingConstraintViolations );
@@ -343,7 +345,7 @@
}
- private <T> void validateValue(Class<T> beanType, Object object, PropertyIterator propertyIter, List<ConstraintViolationImpl<T>> failingConstraintViolations, String... groups) {
+ private <T> void validateValue(Class<T> beanType, Object object, PropertyIterator propertyIter, List<ConstraintViolationImpl<T>> failingConstraintViolations, Class<?>... groups) {
ConstraintDescriptorImpl constraintDescriptor = getConstraintDescriptorForPath( beanType, propertyIter );
if ( constraintDescriptor == null ) {
@@ -352,18 +354,18 @@
// if no group is specified use the default
if ( groups.length == 0 ) {
- groups = new String[] { ValidatorConstants.DEFAULT_GROUP_NAME };
+ groups = DEFAULT_GROUP;
}
- List<String> expandedGroups;
+ List<Class<?>> expandedGroups;
boolean isGroupSequence;
- for ( String group : groups ) {
- expandedGroups = new ArrayList<String>();
- isGroupSequence = expandGroupName( beanType, group, expandedGroups );
+ for ( Class<?> group : groups ) {
+ expandedGroups = new ArrayList<Class<?>>();
+ isGroupSequence = expandGroup( beanType, group, expandedGroups );
- for ( String expandedGroupName : expandedGroups ) {
+ for ( Class<?> expandedGroup : expandedGroups ) {
- if ( !constraintDescriptor.isInGroups( expandedGroupName ) ) {
+ if ( !constraintDescriptor.isInGroups( expandedGroup ) ) {
continue;
}
@@ -384,7 +386,7 @@
null,
object,
propertyIter.getOriginalProperty(), //FIXME use error.getProperty()
- "",
+ null, //FIXME why is this a null group!! Used to be "" string should it be Default. Looks weird
constraintDescriptor
);
addFailingConstraint( failingConstraintViolations, failingConstraintViolation );
@@ -505,25 +507,25 @@
* Checks whether the provided group name is a group sequence and if so expands the group name and add the expanded
* groups names to <code>expandedGroupName </code>
*
- * @param groupName The group name to expand
- * @param expandedGroupNames The exanded group names or just a list with the single provided group name id the name
+ * @param group The group to expand
+ * @param expandedGroups The exanded group names or just a list with the single provided group name id the name
* was not expandable
*
* @return <code>true</code> if an expansion took place, <code>false</code> otherwise.
*/
- private <T> boolean expandGroupName(Class<T> beanType, String groupName, List<String> expandedGroupNames) {
- if ( expandedGroupNames == null ) {
+ private <T> boolean expandGroup(Class<T> beanType, Class<?> group, List<Class<?>> expandedGroups) {
+ if ( expandedGroups == null ) {
throw new IllegalArgumentException( "List cannot be empty" );
}
boolean isGroupSequence;
MetaDataProviderImpl<T> metaDataProvider = factory.getMetadataProvider( beanType );
- if ( metaDataProvider.getGroupSequences().containsKey( groupName ) ) {
- expandedGroupNames.addAll( metaDataProvider.getGroupSequences().get( groupName ) );
+ if ( metaDataProvider.getGroupSequences().containsKey( group ) ) {
+ expandedGroups.addAll( metaDataProvider.getGroupSequences().get( group ) );
isGroupSequence = true;
}
else {
- expandedGroupNames.add( groupName );
+ expandedGroups.add( group );
isGroupSequence = false;
}
return isGroupSequence;
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintDescriptorImpl.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintDescriptorImpl.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -30,6 +30,7 @@
import javax.validation.ConstraintDescriptor;
import javax.validation.ReportAsViolationFromCompositeConstraint;
import javax.validation.ValidationException;
+import javax.validation.groups.Default;
/**
* Describe a single constraint.
@@ -41,16 +42,17 @@
private final Annotation annotation;
private final Constraint constraintImplementation;
private final Class<? extends Constraint> constraintClass;
- private final Set<String> groups;
+ private final Set<Class<?>> groups;
private final Map<String, Object> parameters;
private final boolean isReportAsSingleInvalidConstraint;
+ private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
- public ConstraintDescriptorImpl(Annotation annotation, String[] groups, Constraint validator, Class<? extends Constraint> constraintClass) {
+ public ConstraintDescriptorImpl(Annotation annotation, Class<?>[] groups, Constraint validator, Class<? extends Constraint> constraintClass) {
this.annotation = annotation;
if ( groups.length == 0 ) {
- groups = new String[] { "default" };
+ groups = DEFAULT_GROUP;
}
- this.groups = new HashSet<String>();
+ this.groups = new HashSet<Class<?>>();
this.groups.addAll( Arrays.asList( groups ) );
this.constraintImplementation = validator;
this.parameters = getAnnotationParameters( annotation );
@@ -71,7 +73,7 @@
/**
* {@inheritDoc}
*/
- public Set<String> getGroups() {
+ public Set<Class<?>> getGroups() {
return groups;
}
@@ -82,7 +84,7 @@
return constraintClass;
}
- public boolean isInGroups(String group) {
+ public boolean isInGroups(Class<?> group) {
return groups.contains( group );
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintViolationImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintViolationImpl.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/impl/ConstraintViolationImpl.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -32,7 +32,7 @@
private Class<T> beanClass;
private Object value;
private String propertyPath;
- private HashSet<String> groups;
+ private Set<Class<?>> groups;
private Object leafBeanInstance;
private final ConstraintDescriptor constraintDescriptor;
private String rawMessage;
@@ -40,14 +40,14 @@
public ConstraintViolationImpl(String rawMessage, String interpolatedMessage, T rootBean, Class<T> beanClass,
Object leafBeanInstance, Object value,
- String propertyPath, String group, ConstraintDescriptor constraintDescriptor) {
+ String propertyPath, Class<?> group, ConstraintDescriptor constraintDescriptor) {
this.rawMessage = rawMessage;
this.interpolatedMessage = interpolatedMessage;
this.rootBean = rootBean;
this.beanClass = beanClass;
this.value = value;
this.propertyPath = propertyPath;
- groups = new HashSet<String>();
+ groups = new HashSet<Class<?>>();
groups.add( group );
this.leafBeanInstance = leafBeanInstance;
this.constraintDescriptor = constraintDescriptor;
@@ -92,7 +92,7 @@
/**
* {@inheritDoc}
*/
- public Set<String> getGroups() {
+ public Set<Class<?>> getGroups() {
return groups;
}
@@ -100,7 +100,7 @@
return this.constraintDescriptor;
}
- public void addGroups(Set<String> groupSet) {
+ public void addGroups(Set<Class<?>> groupSet) {
groups.addAll( groupSet );
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -121,7 +121,7 @@
}
try {
- getAnnotationParameter( annotation, "groups", String[].class );
+ getAnnotationParameter( annotation, "groups", Class[].class );
}
catch ( Exception e ) {
String msg = annotation.annotationType().getName() + " contains ConstraintValidator annotation, but does " +
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthConstraintTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthConstraintTest.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/LengthConstraintTest.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -46,8 +46,8 @@
return "{validator.length}";
}
- public String[] groups() {
- return new String[0];
+ public Class<?>[] groups() {
+ return new Class<?>[0];
}
public Class<? extends Annotation> annotationType() {
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternConstraintTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternConstraintTest.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/constraints/PatternConstraintTest.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -38,8 +38,8 @@
return "{validator.pattern}";
}
- public String[] groups() {
- return new String[0];
+ public Class<?>[] groups() {
+ return new Class<?>[0];
}
public String regex() {
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/All.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/All.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/All.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,8 @@
+package org.hibernate.validation.eg;
+
+/**
+ * Groups including all validations
+ * @author Emmanuel Bernard
+ */
+public interface All {
+}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Animal.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Animal.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Animal.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -29,10 +29,10 @@
PROKARYOTA, EUKARYOTA
}
- @NotEmpty(groups = { "first", "second" })
+ @NotEmpty(groups = { First.class, Second.class })
private String name;
- @NotNull(groups = "first")
+ @NotNull(groups = First.class)
private Domain domain;
public String getName() {
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Author.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Author.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Author.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -27,14 +27,14 @@
*/
public class Author {
- @NotEmpty(groups = "last")
+ @NotEmpty(groups = Last.class)
private String firstName;
- @NotNull(groups = "first")
- @NotEmpty(groups = "first")
+ @NotNull(groups = First.class)
+ @NotEmpty(groups = First.class)
private String lastName;
- @Length(max = 20, groups = "last")
+ @Length(max = 20, groups = Last.class)
private String company;
public String getFirstName() {
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -19,6 +19,7 @@
import javax.validation.GroupSequence;
import javax.validation.Valid;
+import javax.validation.groups.Default;
import javax.validation.constraints.NotNull;
import org.hibernate.validation.constraints.Length;
@@ -27,17 +28,17 @@
/**
* @author Hardy Ferentschik
*/
- at GroupSequence(name = "default", sequence = { "first", "second", "last" })
+ at GroupSequence(name = Default.class, sequence = { First.class, Second.class, Last.class })
public class Book {
- @NotNull(groups = "first")
- @NotEmpty(groups = "first")
+ @NotNull(groups = First.class)
+ @NotEmpty(groups = First.class)
private String title;
- @Length(max = 30, groups = "second")
+ @Length(max = 30, groups = Second.class)
private String subtitle;
@Valid
- @NotNull(groups = "first")
+ @NotNull(groups = First.class)
private Author author;
public String getTitle() {
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/DefaultAlias.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/DefaultAlias.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/DefaultAlias.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,7 @@
+package org.hibernate.validation.eg;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public interface DefaultAlias {
+}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -19,6 +19,7 @@
import javax.validation.GroupSequence;
import javax.validation.GroupSequences;
+import javax.validation.groups.Default;
import javax.validation.constraints.NotNull;
import org.hibernate.validation.constraints.NotEmpty;
@@ -27,16 +28,16 @@
* @author Hardy Ferentschik
*/
@GroupSequences({
- @GroupSequence(name = "default-alias", sequence = { "default" }),
- @GroupSequence(name = "all", sequence = { "default", "translate" })
+ @GroupSequence(name = DefaultAlias.class, sequence = { Default.class }),
+ @GroupSequence(name = All.class, sequence = { Default.class, Dictonary.Translate.class })
})
public class Dictonary extends Book {
- @NotNull(groups = "translate")
- @NotEmpty(groups = "translate")
+ @NotNull(groups = Translate.class)
+ @NotEmpty(groups = Translate.class)
private String translatesTo;
- @NotNull(groups = "translate")
- @NotEmpty(groups = "translate")
+ @NotNull(groups = Translate.class)
+ @NotEmpty(groups = Translate.class)
private String translatesFrom;
public String getTranslatesTo() {
@@ -54,4 +55,10 @@
public void setTranslatesFrom(String translatesFrom) {
this.translatesFrom = translatesFrom;
}
+
+ /**
+ * Translator related constraints
+ */
+ public interface Translate {
+ }
}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/EnglishDictonary.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -19,12 +19,13 @@
import javax.validation.GroupSequence;
import javax.validation.GroupSequences;
+import javax.validation.groups.Default;
/**
* @author Hardy Ferentschik
*/
@GroupSequences({
- @GroupSequence(name = "default", sequence = { "first" }) // illegal - default is already defined in Book
+ @GroupSequence(name = Default.class, sequence = { First.class }) // illegal - default is already defined in Book
})
public class EnglishDictonary extends Dictonary {
}
\ No newline at end of file
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/First.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/First.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/First.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,9 @@
+package org.hibernate.validation.eg;
+
+/**
+ * Group executed first in the validation
+ *
+ * @author Emmanuel Bernard
+ */
+public interface First {
+}
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Last.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Last.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Last.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,9 @@
+package org.hibernate.validation.eg;
+
+/**
+ * Group executed Last in the validation
+ *
+ * @author Emmanuel Bernard
+ */
+public interface Last {
+}
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Second.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Second.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Second.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,9 @@
+package org.hibernate.validation.eg;
+
+/**
+ * Group executed second during the validation
+ *
+ * @author Emmanuel Bernard
+ */
+public interface Second {
+}
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 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ValidatorImplTest.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -23,6 +23,7 @@
import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.Validation;
+import javax.validation.groups.Default;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -41,6 +42,10 @@
import org.hibernate.validation.eg.EnglishDictonary;
import org.hibernate.validation.eg.Order;
import org.hibernate.validation.eg.Unconstraint;
+import org.hibernate.validation.eg.First;
+import org.hibernate.validation.eg.Second;
+import org.hibernate.validation.eg.Last;
+import org.hibernate.validation.eg.DefaultAlias;
import org.hibernate.validation.HibernateValidatorFactoryBuilder;
/**
@@ -109,7 +114,7 @@
@Test(expected = IllegalArgumentException.class)
public void testValidateWithNullProperty() {
Validator validator = getHibernateValidator();
- validator.validate( null, "firstName" );
+ validator.validateProperty( null, "firstName" );
}
@Test
@@ -123,17 +128,16 @@
book.setTitle( "" );
book.setAuthor( author );
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, "first", "second", "last" );
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
author.setFirstName( "Gavin" );
author.setLastName( "King" );
- constraintViolations = validator.validate( book, "first", "second", "last" );
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be empty", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Book.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
@@ -141,11 +145,10 @@
book.setTitle( "Hibernate Persistence with JPA" );
book.setSubtitle( "Revised Edition of Hibernate in Action" );
- constraintViolations = validator.validate( book, "first", "second", "last" );
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "length must be between 0 and 30", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Book.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
@@ -153,18 +156,17 @@
book.setSubtitle( "Revised Edition" );
author.setCompany( "JBoss a divison of RedHat" );
- constraintViolations = validator.validate( book, "first", "second", "last" );
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "length must be between 0 and 20", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Author.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", author.getCompany(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "author.company", constraintViolation.getPropertyPath() );
author.setCompany( "JBoss" );
- constraintViolations = validator.validate( book, "first", "second", "last" );
+ constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
}
@@ -178,17 +180,16 @@
Book book = new Book();
book.setAuthor( author );
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, "default" );
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, Default.class );
assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
author.setFirstName( "Gavin" );
author.setLastName( "King" );
- constraintViolations = validator.validate( book, "default" );
+ constraintViolations = validator.validate( book, Default.class );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Book.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
@@ -196,18 +197,18 @@
book.setTitle( "Hibernate Persistence with JPA" );
book.setSubtitle( "Revised Edition of Hibernate in Action" );
- constraintViolations = validator.validate( book, "default" );
+ constraintViolations = validator.validate( book, Default.class );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
book.setSubtitle( "Revised Edition" );
author.setCompany( "JBoss a divison of RedHat" );
- constraintViolations = validator.validate( book, "default" );
+ constraintViolations = validator.validate( book, Default.class );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
author.setCompany( "JBoss" );
- constraintViolations = validator.validate( book, "default" );
+ constraintViolations = validator.validate( book, Default.class );
assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
}
@@ -239,7 +240,7 @@
author.setCompany( "Langenscheidt Publ." );
dictonary.setAuthor( author );
- Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, "default-alias" );
+ Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, DefaultAlias.class );
assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
}
@@ -250,7 +251,7 @@
elepfant.setName( "" );
elepfant.setDomain( Animal.Domain.EUKARYOTA );
- Set<ConstraintViolation<Animal>> constraintViolations = validator.validate( elepfant, "first", "second" );
+ Set<ConstraintViolation<Animal>> constraintViolations = validator.validate( elepfant, First.class, Second.class );
assertEquals(
"The should be two invalid constraints since the same propertyName gets validated in both groups",
1,
@@ -258,9 +259,9 @@
);
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- Set<String> expected = new HashSet<String>();
- expected.add( "first" );
- expected.add( "second" );
+ Set<Class<?>> expected = new HashSet<Class<?>>();
+ expected.add( First.class );
+ expected.add( Second.class );
assertEquals(
"The constraint should be invalid for both groups",
expected,
@@ -330,7 +331,6 @@
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Order.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", customer, constraintViolation.getRootBean() );
assertEquals( "Wrong value", order1.getOrderNumber(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "orderList[0].orderNumber", constraintViolation.getPropertyPath() );
@@ -382,7 +382,6 @@
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be empty", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", Actor.class, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", clint, constraintViolation.getRootBean() );
assertEquals( "Wrong value", morgan.getLastName(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "playedWith[0].playedWith[1].lastName", constraintViolation.getPropertyPath() );
@@ -402,7 +401,6 @@
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be null", constraintViolation.getInterpolatedMessage() );
- assertEquals( "Wrong bean class", null, constraintViolation.getBeanClass() );
assertEquals( "Wrong root entity", null, constraintViolation.getRootBean() );
assertEquals( "Wrong value", order.getOrderNumber(), constraintViolation.getInvalidValue() );
assertEquals( "Wrong propertyName", "orderList[0].orderNumber", constraintViolation.getPropertyPath() );
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/impl/ResourceBundleMessageResolverTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/impl/ResourceBundleMessageResolverTest.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/impl/ResourceBundleMessageResolverTest.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -52,8 +52,8 @@
return "{validator.notNull}";
}
- public String[] groups() {
- return new String[] { };
+ public Class<?>[] groups() {
+ return new Class<?>[] { };
}
public Class<? extends Annotation> annotationType() {
@@ -74,8 +74,8 @@
return "{validator.length}";
}
- public String[] groups() {
- return new String[] { };
+ public Class<?>[] groups() {
+ return new Class<?>[] { };
}
public Class<? extends Annotation> annotationType() {
@@ -87,7 +87,7 @@
@Test
public void testSuccessfulInterpolation() {
ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl(
- notNull, new String[] { }, new NotNullConstraint(), NotNullConstraint.class
+ notNull, new Class<?>[] { }, new NotNullConstraint(), NotNullConstraint.class
);
String expected = "replacement worked";
@@ -110,7 +110,7 @@
@Test
public void testUnSuccessfulInterpolation() {
ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl(
- notNull, new String[] { }, new NotNullConstraint(), NotNullConstraint.class
+ notNull, new Class<?>[] { }, new NotNullConstraint(), NotNullConstraint.class
);
String expected = "foo"; // missing {}
String actual = resolver.interpolate( "foo", desciptor, null );
@@ -124,7 +124,7 @@
@Test
public void testUnkownTokenInterpolation() {
ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl(
- notNull, new String[] { }, new NotNullConstraint(), NotNullConstraint.class
+ notNull, new Class<?>[] { }, new NotNullConstraint(), NotNullConstraint.class
);
String expected = "{bar}"; // unkown token {}
String actual = resolver.interpolate( "{bar}", desciptor, null );
@@ -134,13 +134,13 @@
@Test
public void testDefaultInterpolation() {
ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl(
- notNull, new String[] { }, new NotNullConstraint(), NotNullConstraint.class
+ notNull, new Class<?>[] { }, new NotNullConstraint(), NotNullConstraint.class
);
String expected = "may not be null";
String actual = resolver.interpolate( notNull.message(), desciptor, null );
assertEquals( "Wrong substitution", expected, actual );
- desciptor = new ConstraintDescriptorImpl( length, new String[] { }, new NotNullConstraint(), NotNullConstraint.class );
+ desciptor = new ConstraintDescriptorImpl( length, new Class<?>[] { }, new NotNullConstraint(), NotNullConstraint.class );
expected = "length must be between 0 and 2147483647"; // unkown token {}
actual = resolver.interpolate( length.message(), desciptor, null );
assertEquals( "Wrong substitution", expected, actual );
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ReflectionHelperTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ReflectionHelperTest.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/util/ReflectionHelperTest.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -24,6 +24,7 @@
import java.util.List;
import java.util.Map;
import javax.validation.ValidationException;
+import javax.validation.groups.Default;
import javax.validation.constraints.NotNull;
import static org.junit.Assert.assertEquals;
@@ -94,8 +95,8 @@
return "test";
}
- public String[] groups() {
- return new String[] { "default" };
+ public Class<?>[] groups() {
+ return new Class<?>[] { Default.class };
}
public Class<? extends Annotation> annotationType() {
@@ -105,8 +106,8 @@
String message = ReflectionHelper.getAnnotationParameter( testAnnotation, "message", String.class );
assertEquals( "Wrong message", "test", message );
- String[] group = ReflectionHelper.getAnnotationParameter( testAnnotation, "groups", String[].class );
- assertEquals( "Wrong message", "default", group[0] );
+ Class<?>[] group = ReflectionHelper.getAnnotationParameter( testAnnotation, "groups", Class[].class );
+ assertEquals( "Wrong message", Default.class, group[0] );
try {
ReflectionHelper.getAnnotationParameter( testAnnotation, "message", Integer.class );
Modified: validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -40,7 +40,7 @@
/**
* @return The groups the constraint is applied on.
*/
- Set<String> getGroups();
+ Set<Class<?>> getGroups();
/**
* @return the constraint implementation class
Modified: validator/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/ConstraintViolation.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -70,7 +70,7 @@
*
* TODO: considering removal, if you think it's important, speak up
*/
- Set<String> getGroups();
+ Set<Class<?>> getGroups();
/**
* Constraint metadata reported to fail.
Modified: validator/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -23,12 +23,17 @@
import java.lang.annotation.Target;
/**
+ * Define a group sequence
+ * Should be hosted by an
+ *
+ * @author Emmanuel Bernard
* @author Hardy Ferentschik
*/
@Target({ TYPE })
@Retention(RUNTIME)
public @interface GroupSequence {
- String name();
+ //TODO depreciate
+ Class<?> name();
- String[] sequence();
+ Class<?>[] sequence();
}
Modified: validator/trunk/validation-api/src/main/java/javax/validation/Validator.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/Validator.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/Validator.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -33,28 +33,28 @@
* validate all constraints on object
*
* @param object object to validate
- * @param groups group name(s) (including group sequence names) targeted
- * for validation (default to <code>default</code>)
+ * @param groups groups targeted for validation
+ * (default to {@link javax.validation.groups.Default})
*
* @return constraint violations or an empty Set if none
*
* @throws IllegalArgumentException e if object is null
*/
- <T> Set<ConstraintViolation<T>> validate(T object, String... groups);
+ <T> Set<ConstraintViolation<T>> validate(T object, Class<?>... groups);
/**
* validate all constraints on <code>propertyName</code> property of object
*
* @param object object to validate
* @param propertyName property to validate (ie field and getter constraints)
- * @param groups group name(s) (including group sequence names) targeted
- * for validation (default to <code>default</code>)
+ * @param groups groups targeted for validation
+ * (default to {@link javax.validation.groups.Default})
*
* @return constraint violations or an empty Set if none
*
* @throws IllegalArgumentException e if object is null or if propertyName is not present
*/
- <T> Set<ConstraintViolation<T>> validateProperty(T object, String propertyName, String... groups);
+ <T> Set<ConstraintViolation<T>> validateProperty(T object, String propertyName, Class<?>... groups);
/**
* validate all constraints on <code>propertyName</code> property
@@ -64,13 +64,14 @@
*
* @param propertyName property to validate
* @param value property value to validate
- * @param groups group name(s) (including group sequence names) targeted
- * for validation (default to <code>default</code>)
+ * @param groups groups targeted for validation
+ * (default to {@link javax.validation.groups.Default})
*
* @return constraint violations or an empty Set if none
* @throws IllegalArgumentException e if propertyName is not present
*/
- <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, String... groups);
+ <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName,
+ Object value, Class<?>... groups);
/**
* Return the descriptor object describing bean constraints
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalse.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalse.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalse.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -39,5 +39,5 @@
public @interface AssertFalse {
String message() default "{validator.assertFalse}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
\ No newline at end of file
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrue.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrue.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrue.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -39,5 +39,5 @@
public @interface AssertTrue {
String message() default "{validator.assertTrue}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
\ No newline at end of file
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Digits.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -49,7 +49,7 @@
public @interface Digits {
String message() default "{validator.digits}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
/**
* @return maximum number of integral digits accepted for this number
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Future.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Future.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Future.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -50,5 +50,5 @@
public @interface Future {
String message() default "{validator.future}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
\ No newline at end of file
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Max.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Max.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Max.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -51,7 +51,7 @@
public @interface Max {
String message() default "{validator.max}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
/**
* @return Value the element must be lower or equal to
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Min.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Min.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Min.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -51,7 +51,7 @@
public @interface Min {
String message() default "{validator.min}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
/**
* @return Value the element must be higher or equal to
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/NotNull.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/NotNull.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/NotNull.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -37,5 +37,5 @@
public @interface NotNull {
String message() default "{validator.notNull}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Null.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Null.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Null.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -37,6 +37,6 @@
public @interface Null {
String message() default "{validator.null}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Past.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Past.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Past.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -50,5 +50,5 @@
public @interface Past {
String message() default "{validator.past}";
- String[] groups() default { };
+ Class<?>[] groups() default { };
}
\ No newline at end of file
Modified: validator/trunk/validation-api/src/main/java/javax/validation/constraints/Size.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/constraints/Size.java 2008-12-03 11:22:31 UTC (rev 15645)
+++ validator/trunk/validation-api/src/main/java/javax/validation/constraints/Size.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -43,7 +43,7 @@
@Documented
public @interface Size {
String message() default "{validator.min}";
- String[] groups() default {};
+ Class<?>[] groups() default {};
/**
* @return size the element must be higher or equal to
Added: validator/trunk/validation-api/src/main/java/javax/validation/groups/Default.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/groups/Default.java (rev 0)
+++ validator/trunk/validation-api/src/main/java/javax/validation/groups/Default.java 2008-12-03 12:26:29 UTC (rev 15646)
@@ -0,0 +1,10 @@
+package javax.validation.groups;
+
+/**
+ * Default Bean Validation group
+ *
+ * @author Emmanuel Bernard
+ * TODO should it be named DefaultGroup?
+ */
+public interface Default {
+}
More information about the hibernate-commits
mailing list