Hibernate SVN: r16002 - in validator/trunk/hibernate-validator/src: main/java/org/hibernate/validation/engine/group and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-19 13:26:09 -0500 (Thu, 19 Feb 2009)
New Revision: 16002
Added:
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Billable.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/BuyInOneClick.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CreditCard.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/User.java
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ExecutionContext.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaConstraint.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java
Log:
HV-92 started to use GroupChainGenerator in ValidatorImpl. Removed expandGroup
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaData.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -61,7 +61,7 @@
/**
* @return A map mapping defined group sequences to a list of groups.
*/
- List<Class<?>> getDefaultGroupSequence();
+ List<Class<?>> getDefaultGroupList();
/**
* @return A list of <code>MetaConstraint</code> instances encapsulating the information of all the constraints
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -84,7 +84,7 @@
/**
* Maps group sequences to the list of group/sequences.
*/
- private List<Class<?>> defaultGroupSequence = new ArrayList<Class<?>>();
+ private List<Class<?>> defaultGroupList = new ArrayList<Class<?>>();
private final BuiltinConstraints builtinConstraints;
@@ -138,10 +138,10 @@
private void initDefaultGroupSequence(Class<?> clazz) {
GroupSequence groupSequenceAnnotation = clazz.getAnnotation( GroupSequence.class );
if ( groupSequenceAnnotation == null ) {
- defaultGroupSequence.add( Default.class );
+ defaultGroupList.add( Default.class );
}
else {
- defaultGroupSequence.addAll( Arrays.asList( groupSequenceAnnotation.value() ) );
+ defaultGroupList.addAll( Arrays.asList( groupSequenceAnnotation.value() ) );
}
}
@@ -150,7 +150,7 @@
List<ConstraintDescriptorImpl> fieldMetadata = findFieldLevelConstraints( field );
for ( ConstraintDescriptorImpl constraintDescription : fieldMetadata ) {
ReflectionHelper.setAccessibility( field );
- MetaConstraint metaConstraint = new MetaConstraint( field, constraintDescription );
+ MetaConstraint metaConstraint = new MetaConstraint( field, constraintDescription, new ArrayList<Class<?>>(defaultGroupList) );
metaConstraintList.add( metaConstraint );
}
if ( field.isAnnotationPresent( Valid.class ) ) {
@@ -165,7 +165,7 @@
List<ConstraintDescriptorImpl> methodMetadata = findMethodLevelConstraints( method );
for ( ConstraintDescriptorImpl constraintDescription : methodMetadata ) {
ReflectionHelper.setAccessibility( method );
- MetaConstraint metaConstraint = new MetaConstraint( method, constraintDescription );
+ MetaConstraint metaConstraint = new MetaConstraint( method, constraintDescription, new ArrayList<Class<?>>(defaultGroupList) );
metaConstraintList.add( metaConstraint );
}
if ( method.isAnnotationPresent( Valid.class ) ) {
@@ -178,7 +178,7 @@
private void initClassConstraints(Class clazz) {
List<ConstraintDescriptorImpl> classMetadata = findClassLevelConstraints( clazz );
for ( ConstraintDescriptorImpl constraintDescription : classMetadata ) {
- MetaConstraint metaConstraint = new MetaConstraint( clazz, constraintDescription );
+ MetaConstraint metaConstraint = new MetaConstraint( clazz, constraintDescription, new ArrayList<Class<?>>(defaultGroupList) );
metaConstraintList.add( metaConstraint );
}
}
@@ -323,8 +323,8 @@
return cascadedMembers;
}
- public List<Class<?>> getDefaultGroupSequence() {
- return defaultGroupSequence;
+ public List<Class<?>> getDefaultGroupList() {
+ return defaultGroupList;
}
public List<MetaConstraint> geMetaConstraintList() {
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ExecutionContext.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ExecutionContext.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ExecutionContext.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -18,10 +18,10 @@
package org.hibernate.validation.engine;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.Stack;
import javax.validation.ConstraintValidatorFactory;
import javax.validation.MessageInterpolator;
@@ -207,7 +207,7 @@
return propertyPath;
}
- public boolean needsValidation(Set<Class<?>> groups) {
+ public boolean needsValidation(Collection<Class<?>> groups) {
return groups.contains( currentGroup );
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaConstraint.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaConstraint.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MetaConstraint.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -21,8 +21,11 @@
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.List;
import javax.validation.ConstraintDescriptor;
import javax.validation.ValidationException;
+import javax.validation.groups.Default;
import org.hibernate.validation.util.ReflectionHelper;
@@ -68,35 +71,57 @@
*/
private final ElementType elementType;
- public MetaConstraint(Type t, ConstraintDescriptor constraintDescriptor) {
- this( t, null, null, ElementType.FIELD, constraintDescriptor, "" );
+ private final List<Class<?>> groupList;
+
+ public MetaConstraint(Type t, ConstraintDescriptor constraintDescriptor, List<Class<?>> defaultGroupList) {
+ this( t, null, null, ElementType.FIELD, constraintDescriptor, "", defaultGroupList );
}
- public MetaConstraint(Method m, ConstraintDescriptor constraintDescriptor) {
+ public MetaConstraint(Method m, ConstraintDescriptor constraintDescriptor, List<Class<?>> defaultGroupList) {
this(
null,
m,
null,
ElementType.METHOD,
constraintDescriptor,
- ReflectionHelper.getPropertyName( m )
+ ReflectionHelper.getPropertyName( m ),
+ defaultGroupList
);
}
- public MetaConstraint(Field f, ConstraintDescriptor constraintDescriptor) {
- this( null, null, f, ElementType.FIELD, constraintDescriptor, f.getName() );
+ public MetaConstraint(Field f, ConstraintDescriptor constraintDescriptor, List<Class<?>> defaultGroupList) {
+ this( null, null, f, ElementType.FIELD, constraintDescriptor, f.getName(), defaultGroupList );
}
- private MetaConstraint(Type t, Method m, Field f, ElementType elementType, ConstraintDescriptor constraintDescriptor, String property) {
+ private MetaConstraint(Type t, Method m, Field f, ElementType elementType, ConstraintDescriptor constraintDescriptor, String property, List<Class<?>> defaultGroupList) {
this.type = t;
this.method = m;
this.field = f;
this.elementType = elementType;
this.propertyName = property;
constraintTree = new ConstraintTree( constraintDescriptor );
+ this.groupList = new ArrayList<Class<?>>( constraintDescriptor.getGroups() );
+ checkIfPartOfDefaultGroup( defaultGroupList );
}
+ private void checkIfPartOfDefaultGroup(List<Class<?>> defaultGroupList) {
+ for ( Class<?> clazz : defaultGroupList ) {
+ if ( groupList.contains( clazz ) ) {
+ groupList.add( Default.class );
+ break;
+ }
+ }
+ }
+
/**
+ * @return Returns the list of groups this constraint is part of. This might include the default group even when
+ * it is not explicitly specified, but part of the redefined default group list of the hosting bean.
+ */
+ public List<Class<?>> getGroupList() {
+ return groupList;
+ }
+
+ /**
* @param o the object from which to retrieve the value.
*
* @return Returns the value for this constraint from the specified object. Depending on the type either the value itself
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 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -29,16 +29,17 @@
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.validation.BeanDescriptor;
-import javax.validation.ConstraintDescriptor;
import javax.validation.ConstraintValidatorFactory;
import javax.validation.ConstraintViolation;
import javax.validation.MessageInterpolator;
import javax.validation.Validator;
import javax.validation.groups.Default;
+import org.hibernate.validation.engine.group.Group;
+import org.hibernate.validation.engine.group.GroupChain;
+import org.hibernate.validation.engine.group.GroupChainGenerator;
import org.hibernate.validation.util.PropertyIterator;
import org.hibernate.validation.util.ReflectionHelper;
-import org.hibernate.validation.engine.group.GroupChainGenerator;
/**
* The main Bean Validation class. This is the core processing class of Hibernate Validator.
@@ -52,6 +53,7 @@
* Set of classes which can be used as index in a map.
*/
private static final Set<Class<?>> VALID_MAP_INDEX_CLASSES = new HashSet<Class<?>>();
+
static {
VALID_MAP_INDEX_CLASSES.add( Integer.class );
VALID_MAP_INDEX_CLASSES.add( Long.class );
@@ -124,20 +126,17 @@
return Collections.emptyList();
}
- List<Class<?>> expandedGroups;
- boolean isGroupSequence;
- for ( Class<?> group : groups ) {
- expandedGroups = new ArrayList<Class<?>>();
- isGroupSequence = expandGroup( context.peekValidatedObjectType(), group, expandedGroups );
+ GroupChain groupChain = groupChainGenerator.getGroupChainFor( groups );
+ while ( groupChain.hasNext() ) {
+ Group group = groupChain.next();
+ Class<?> currentSequence = group.getSequence();
+ context.setCurrentGroup( group.getGroup() );
- for ( Class<?> expandedGroupName : expandedGroups ) {
- context.setCurrentGroup( expandedGroupName );
+ validateConstraints( context );
+ validateCascadedConstraints( context );
- validateConstraints( context );
- validateCascadedConstraints( context );
-
- if ( isGroupSequence && context.getFailingConstraints().size() > 0 ) {
- break;
+ if ( group.partOfSequence() && context.getFailingConstraints().size() > 0 ) {
+ while ( groupChain.hasNext() && currentSequence == groupChain.next().getSequence() ) {
}
}
}
@@ -155,11 +154,10 @@
BeanMetaData<T> beanMetaData =
( BeanMetaData<T> ) getBeanMetaData( executionContext.peekValidatedObjectType() );
for ( MetaConstraint metaConstraint : beanMetaData.geMetaConstraintList() ) {
- ConstraintDescriptor mainConstraintDescriptor = metaConstraint.getDescriptor();
executionContext.pushProperty( metaConstraint.getPropertyName() );
- if ( !executionContext.needsValidation( mainConstraintDescriptor.getGroups() ) ) {
+ if ( !executionContext.needsValidation( metaConstraint.getGroupList() ) ) {
executionContext.popProperty();
continue;
}
@@ -277,28 +275,23 @@
groups = DEFAULT_GROUP_ARRAY;
}
- List<Class<?>> expandedGroups;
- boolean isGroupSequence;
- for ( Class<?> group : groups ) {
- expandedGroups = new ArrayList<Class<?>>();
- isGroupSequence = expandGroup( beanType, group, expandedGroups );
-
- for ( Class<?> expandedGroup : expandedGroups ) {
-
- for ( MetaConstraint metaConstraint : metaConstraints ) {
- if ( !metaConstraint.getDescriptor().getGroups().contains( expandedGroup ) ) {
- continue;
- }
-
- ExecutionContext<T> context = new ExecutionContext<T>(
- object, messageInterpolator, constraintValidatorFactory
- );
- metaConstraint.validateConstraint( object.getClass(), context );
- failingConstraintViolations.addAll( context.getFailingConstraints() );
+ GroupChain groupChain = groupChainGenerator.getGroupChainFor( Arrays.asList( groups ) );
+ while ( groupChain.hasNext() ) {
+ Group group = groupChain.next();
+ Class<?> currentSequence = group.getSequence();
+ for ( MetaConstraint metaConstraint : metaConstraints ) {
+ if ( !metaConstraint.getGroupList().contains( group.getGroup() ) ) {
+ continue;
}
+ ExecutionContext<T> context = new ExecutionContext<T>(
+ object, messageInterpolator, constraintValidatorFactory
+ );
+ metaConstraint.validateConstraint( object.getClass(), context );
+ failingConstraintViolations.addAll( context.getFailingConstraints() );
+ }
- if ( isGroupSequence && failingConstraintViolations.size() > 0 ) {
- break;
+ if ( group.partOfSequence() && failingConstraintViolations.size() > 0 ) {
+ while ( groupChain.hasNext() && currentSequence == groupChain.next().getSequence() ) {
}
}
}
@@ -330,31 +323,27 @@
groups = DEFAULT_GROUP_ARRAY;
}
- List<Class<?>> expandedGroups;
- boolean isGroupSequence;
- for ( Class<?> group : groups ) {
- expandedGroups = new ArrayList<Class<?>>();
- isGroupSequence = expandGroup( beanType, group, expandedGroups );
+ GroupChain groupChain = groupChainGenerator.getGroupChainFor( Arrays.asList( groups ) );
+ while ( groupChain.hasNext() ) {
+ Group group = groupChain.next();
+ Class<?> currentSequence = group.getSequence();
- for ( Class<?> expandedGroup : expandedGroups ) {
-
- for ( MetaConstraint metaConstraint : metaConstraints ) {
- if ( !metaConstraint.getDescriptor().getGroups().contains( expandedGroup ) ) {
- continue;
- }
-
- ExecutionContext<T> context = new ExecutionContext<T>(
- ( T ) value, messageInterpolator, constraintValidatorFactory
- );
- context.pushProperty( propertyIter.getOriginalProperty() );
- metaConstraint.validateConstraint( beanType, value, context );
- failingConstraintViolations.addAll( context.getFailingConstraints() );
+ for ( MetaConstraint metaConstraint : metaConstraints ) {
+ if ( !metaConstraint.getGroupList().contains( group.getGroup() ) ) {
+ continue;
}
- if ( isGroupSequence && failingConstraintViolations.size() > 0 ) {
- break;
- }
+ ExecutionContext<T> context = new ExecutionContext<T>(
+ ( T ) value, messageInterpolator, constraintValidatorFactory
+ );
+ context.pushProperty( propertyIter.getOriginalProperty() );
+ metaConstraint.validateConstraint( beanType, value, context );
+ failingConstraintViolations.addAll( context.getFailingConstraints() );
}
+
+ if ( group.partOfSequence() && failingConstraintViolations.size() > 0 ) {
+ break;
+ }
}
}
@@ -402,35 +391,6 @@
}
/**
- * 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 beanType The class for which to expand the group names.
- * @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 expandGroup(Class<T> beanType, Class<?> group, List<Class<?>> expandedGroups) {
- if ( expandedGroups == null ) {
- throw new IllegalArgumentException( "List cannot be empty" );
- }
-
- boolean isGroupSequence;
- BeanMetaData<T> metaDataProvider = getBeanMetaData( beanType );
- if ( Default.class.getName().equals( group.getName() ) ) {
- expandedGroups.addAll( metaDataProvider.getDefaultGroupSequence() );
- isGroupSequence = true;
- }
- else {
- expandedGroups.add( group );
- isGroupSequence = false;
- }
- return isGroupSequence;
- }
-
- /**
* {@inheritDoc}
*/
private <T> BeanMetaDataImpl<T> getBeanMetaData(Class<T> beanClass) {
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -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 @@
* @return Returns <code>true</code> if there is another group in the chain <code>false</code> otherwise.
*/
public boolean hasNext() {
- return nextGroupPointer <= groupList.size();
+ return nextGroupPointer < groupList.size();
}
/**
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -18,10 +18,10 @@
package org.hibernate.validation.engine.group;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import javax.validation.GroupSequence;
import javax.validation.ValidationException;
@@ -34,7 +34,7 @@
private final Map<Class<?>, List<Group>> resolvedSequences = new HashMap<Class<?>, List<Group>>();
- public GroupChain getGroupChainFor(Set<Class<?>> groups) {
+ public GroupChain getGroupChainFor(Collection<Class<?>> groups) {
if ( groups == null || groups.size() == 0 ) {
throw new IllegalArgumentException( "At least one group has to be specified." );
}
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 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -19,19 +19,17 @@
import javax.validation.GroupSequence;
import javax.validation.Valid;
-import javax.validation.groups.Default;
import javax.validation.constraints.NotNull;
import org.hibernate.validation.constraints.Length;
import org.hibernate.validation.constraints.NotEmpty;
import org.hibernate.validation.eg.groups.First;
+import org.hibernate.validation.eg.groups.Last;
import org.hibernate.validation.eg.groups.Second;
-import org.hibernate.validation.eg.groups.Last;
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(value = { First.class, Second.class, Last.class })
public class Book {
@NotNull(groups = First.class)
@NotEmpty(groups = First.class)
@@ -67,4 +65,8 @@
public void setAuthor(Author author) {
this.author = author;
}
+
+ @GroupSequence(value = { First.class, Second.class, Last.class })
+ public interface All {
+ }
}
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Billable.java (from rev 15999, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Billable.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Billable.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Billable.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -0,0 +1,9 @@
+package org.hibernate.validation.engine.group;
+
+/**
+ * Validation group checking whether user is billable.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface Billable {
+}
\ No newline at end of file
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/BuyInOneClick.java (from rev 15999, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/BuyInOneClick.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/BuyInOneClick.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/BuyInOneClick.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -0,0 +1,9 @@
+package org.hibernate.validation.engine.group;
+
+/**
+ * Customer can buy without being harrassed by the checking-out process.
+ *
+ * @author Emmanuel Bernard
+ */
+public interface BuyInOneClick {
+}
\ No newline at end of file
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CreditCard.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CreditCard.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CreditCard.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -0,0 +1,34 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class CreditCard {
+
+ private String number;
+
+ public String getNumber() {
+ return number;
+ }
+
+ public void setNumber(String number) {
+ this.number = number;
+ }
+}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -31,6 +31,8 @@
import org.hibernate.validation.eg.groups.Last;
import org.hibernate.validation.eg.groups.Second;
+import static junit.framework.Assert.assertFalse;
+
/**
* @author Hardy Ferentschik
*/
@@ -110,6 +112,6 @@
assertTrue( "Should have more groups", chain.hasNext() );
assertEquals( "Wrong group", Address.HighLevelCoherence.class, chain.next().getGroup() );
- assertTrue( "There should be no more groups", chain.hasNext() );
+ assertFalse( "There should be no more groups", chain.hasNext() );
}
}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java 2009-02-19 14:13:19 UTC (rev 16001)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -37,7 +37,7 @@
import org.hibernate.validation.util.TestUtil;
/**
- * Tests for the implementation of <code>Validator</code>.
+ * Tests for the group and group sequence feature.
*
* @author Hardy Ferentschik
*/
@@ -54,7 +54,9 @@
book.setTitle( "" );
book.setAuthor( author );
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, First.class, Second.class, Last.class );
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate(
+ book, First.class, Second.class, Last.class
+ );
assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
author.setFirstName( "Gavin" );
@@ -97,7 +99,7 @@
}
@Test
- public void testDefaultGroupSequence() {
+ public void testGroupSequence() {
Validator validator = TestUtil.getValidator();
Author author = new Author();
@@ -106,13 +108,13 @@
Book book = new Book();
book.setAuthor( author );
- Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, Default.class );
+ Set<ConstraintViolation<Book>> constraintViolations = validator.validate( book, Book.All.class );
assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
author.setFirstName( "Gavin" );
author.setLastName( "King" );
- constraintViolations = validator.validate( book, Default.class );
+ constraintViolations = validator.validate( book, Book.All.class );
ConstraintViolation constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
@@ -123,18 +125,18 @@
book.setTitle( "Hibernate Persistence with JPA" );
book.setSubtitle( "Revised Edition of Hibernate in Action" );
- constraintViolations = validator.validate( book, Default.class );
+ constraintViolations = validator.validate( book, Book.All.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.class );
+ constraintViolations = validator.validate( book, Book.All.class );
assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
author.setCompany( "JBoss" );
- constraintViolations = validator.validate( book, Default.class );
+ constraintViolations = validator.validate( book, Book.All.class );
assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
}
@@ -161,7 +163,9 @@
elepfant.setName( "" );
elepfant.setDomain( Animal.Domain.EUKARYOTA );
- Set<ConstraintViolation<Animal>> constraintViolations = validator.validate( elepfant, First.class, Second.class );
+ 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,
@@ -178,4 +182,37 @@
constraintViolation.getGroups()
);
}
+
+ @Test
+ public void testValidateAgainstDifferentGroups() {
+ User user = new User();
+
+ // all fields per default null. Depending on the validation group there should be a different amount
+ // of constraint failures.
+ Validator validator = TestUtil.getValidator();
+
+ Set<ConstraintViolation<User>> constraintViolations = validator.validate( user );
+ assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, Default.class );
+ assertEquals( "Wrong number of constraints", 2, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, Billable.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, BuyInOneClick.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, BuyInOneClick.class, Billable.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, BuyInOneClick.class, Default.class );
+ assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, BuyInOneClick.class, Default.class, Billable.class );
+ assertEquals( "Wrong number of constraints", 3, constraintViolations.size() );
+
+ constraintViolations = validator.validate( user, BuyInOneClick.class, BuyInOneClick.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ }
}
\ No newline at end of file
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/User.java (from rev 15999, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/User.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/User.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/User.java 2009-02-19 18:26:09 UTC (rev 16002)
@@ -0,0 +1,43 @@
+package org.hibernate.validation.engine.group;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.groups.Default;
+
+/**
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+public class User {
+ @NotNull
+ private String firstname;
+
+ @NotNull(groups = Default.class)
+ private String lastname;
+
+ @NotNull(groups = { Billable.class, BuyInOneClick.class })
+ private CreditCard defaultCreditCard;
+
+ public String getFirstname() {
+ return firstname;
+ }
+
+ public void setFirstname(String firstname) {
+ this.firstname = firstname;
+ }
+
+ public String getLastname() {
+ return lastname;
+ }
+
+ public void setLastname(String lastname) {
+ this.lastname = lastname;
+ }
+
+ public CreditCard getDefaultCreditCard() {
+ return defaultCreditCard;
+ }
+
+ public void setDefaultCreditCard(CreditCard defaultCreditCard) {
+ this.defaultCreditCard = defaultCreditCard;
+ }
+}
\ No newline at end of file
16 years
Hibernate SVN: r16001 - in validator/trunk/hibernate-validator/src: test/java/org/hibernate/validation/bootstrap and 1 other directory.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-19 09:13:19 -0500 (Thu, 19 Feb 2009)
New Revision: 16001
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConfigurationImpl.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
Log:
Fixed some todos
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConfigurationImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConfigurationImpl.java 2009-02-19 14:08:10 UTC (rev 16000)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConfigurationImpl.java 2009-02-19 14:13:19 UTC (rev 16001)
@@ -44,9 +44,8 @@
Version.touch();
}
- //FIXME not sure why it is like that. We should cache these instances somehow. Static?
- private final MessageInterpolator defaultMessageInterpolator = new ResourceBundleMessageInterpolator();
- private final TraversableResolver defaultTraversableResolver = new DefaultTraversableResolver();
+ private static final MessageInterpolator defaultMessageInterpolator = new ResourceBundleMessageInterpolator();
+ private static final TraversableResolver defaultTraversableResolver = new DefaultTraversableResolver();
private MessageInterpolator messageInterpolator;
private ConstraintValidatorFactory constraintValidatorFactory = new ConstraintValidatorFactoryImpl();
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-19 14:08:10 UTC (rev 16000)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java 2009-02-19 14:13:19 UTC (rev 16001)
@@ -110,8 +110,8 @@
ConstraintViolation<Customer> constraintViolation = constraintViolations.iterator().next();
assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
- //FIXME nothing guarantee that a configuration can be reused
// now we modify the configuration, get a new factory and valiator and try again
+ configuration = Validation.byDefaultProvider().configure();
configuration.messageInterpolator(
new MessageInterpolator() {
public String interpolate(String message, ConstraintDescriptor constraintDescriptor, Object value) {
16 years
Hibernate SVN: r16000 - beanvalidation/trunk/validation-api/src/main/java/javax/validation and 6 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-19 09:08:10 -0500 (Thu, 19 Feb 2009)
New Revision: 16000
Modified:
beanvalidation/trunk/validation-api/pom.xml
beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
validator/trunk/hibernate-validator-legacy/pom.xml
validator/trunk/hibernate-validator/pom.xml
validator/trunk/hibernate-validator/src/main/docbook/en-US/master.xml
validator/trunk/hibernate-validator/src/main/docbook/en-US/modules/gettingstarted.xml
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/pom.xml
Log:
Removed name property from GroupSequence
Updated version numbers
Modified: beanvalidation/trunk/validation-api/pom.xml
===================================================================
--- beanvalidation/trunk/validation-api/pom.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ beanvalidation/trunk/validation-api/pom.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -6,7 +6,7 @@
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
- <version>1.0.Beta3</version>
+ <version>1.0.Beta4-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Bean Validation API</name>
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2009-02-19 01:11:40 UTC (rev 15999)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2009-02-19 14:08:10 UTC (rev 16000)
@@ -32,8 +32,5 @@
@Target({ TYPE })
@Retention(RUNTIME)
public @interface GroupSequence {
- //TODO depreciate
- Class<?> name() default void.class;
-
Class<?>[] value();
}
Modified: validator/trunk/hibernate-validator/pom.xml
===================================================================
--- validator/trunk/hibernate-validator/pom.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator/pom.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -1,11 +1,11 @@
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.0.0.Alpha1</version>
+ <version>4.0.0.Alpha2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
@@ -22,6 +22,7 @@
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
+ <version>1.0.Beta4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
@@ -36,6 +37,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
+ <version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -83,12 +85,12 @@
</format>
<format>
<formatName>html_single</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl </stylesheetResource>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-single.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
<format>
<formatName>html</formatName>
- <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl </stylesheetResource>
+ <stylesheetResource>classpath:/xslt/hibernate/html/main-chunk.xsl</stylesheetResource>
<finalName>index.html</finalName>
</format>
</formats>
Modified: validator/trunk/hibernate-validator/src/main/docbook/en-US/master.xml
===================================================================
--- validator/trunk/hibernate-validator/src/main/docbook/en-US/master.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator/src/main/docbook/en-US/master.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -25,7 +25,7 @@
-->
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
-<!ENTITY versionNumber "4.0.0.Alpha1">
+<!ENTITY versionNumber "4.0.0.Alpha2">
<!ENTITY copyrightYear "2009">
<!ENTITY copyrightHolder "Red Hat Middleware, LLC. & Gunnar Morling">
]>
Modified: validator/trunk/hibernate-validator/src/main/docbook/en-US/modules/gettingstarted.xml
===================================================================
--- validator/trunk/hibernate-validator/src/main/docbook/en-US/modules/gettingstarted.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator/src/main/docbook/en-US/modules/gettingstarted.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -145,7 +145,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
- <version>4.0.0.Alpha1</version>
+ <version>4.0.0.Alpha2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
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 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java 2009-02-19 14:08:10 UTC (rev 16000)
@@ -31,7 +31,7 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(name = Default.class, value = { First.class, Second.class, Last.class })
+@GroupSequence(value = { First.class, Second.class, Last.class })
public class Book {
@NotNull(groups = First.class)
@NotEmpty(groups = First.class)
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 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java 2009-02-19 14:08:10 UTC (rev 16000)
@@ -26,7 +26,7 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(name = DefaultAlias.class, value = { Default.class })
+@GroupSequence(value = { Default.class })
public class Dictonary extends Book {
@NotNull(groups = Translate.class)
@NotEmpty(groups = Translate.class)
Modified: validator/trunk/hibernate-validator-legacy/pom.xml
===================================================================
--- validator/trunk/hibernate-validator-legacy/pom.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/hibernate-validator-legacy/pom.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -5,7 +5,7 @@
<parent>
<artifactId>hibernate-validator-parent</artifactId>
<groupId>org.hibernate</groupId>
- <version>4.0.0.Alpha1</version>
+ <version>4.0.0.Alpha2</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>hibernate-validator-legacy</artifactId>
@@ -27,7 +27,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
- <version>3.3.0.SP1</version>
+ <version>3.3.1.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
@@ -37,7 +37,6 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.4.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
@@ -78,7 +77,6 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.4.2</version>
<scope>test</scope>
</dependency>
<dependency>
Modified: validator/trunk/pom.xml
===================================================================
--- validator/trunk/pom.xml 2009-02-19 01:11:40 UTC (rev 15999)
+++ validator/trunk/pom.xml 2009-02-19 14:08:10 UTC (rev 16000)
@@ -6,7 +6,7 @@
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-parent</artifactId>
<packaging>pom</packaging>
- <version>4.0.0.Alpha1</version>
+ <version>4.0.0.Alpha2</version>
<name>Hibernate Validator Parent</name>
<url>http://validator.hibernate.org</url>
@@ -46,11 +46,6 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>javax.validation</groupId>
- <artifactId>validation-api</artifactId>
- <version>1.0.Beta3</version>
- </dependency>
- <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.4.2</version>
@@ -59,12 +54,7 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.4.2</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.4</version>
- </dependency>
+ </dependency>
</dependencies>
</dependencyManagement>
16 years
Hibernate SVN: r15999 - validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report.
by hibernate-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2009-02-18 20:11:40 -0500 (Wed, 18 Feb 2009)
New Revision: 15999
Modified:
validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java
validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
Log:
added table of contents, minor
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java 2009-02-18 15:50:13 UTC (rev 15998)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java 2009-02-19 01:11:40 UTC (rev 15999)
@@ -68,7 +68,8 @@
auditParser.parse();
}
catch (Exception e) {
- throw new RuntimeException("Unable to parse audit file.");
+ e.printStackTrace();
+ throw new RuntimeException("Unable to parse audit file.", e);
}
}
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 15:50:13 UTC (rev 15998)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-19 01:11:40 UTC (rev 15999)
@@ -34,6 +34,8 @@
private String fisheyeBaseUrl = null;
private String svnBaseUrl = null;
+
+ private List<SpecReference> unmatched;
public CoverageReport(List<SpecReference> references, AuditParser auditParser) {
this.references = new HashMap<String, List<SpecReference>>();
@@ -73,14 +75,29 @@
}
public void generate(OutputStream out) throws IOException {
+ calculateUnmatched();
writeHeader(out);
+ writeContents(out);
writeMasterSummary(out);
writeSectionSummary(out);
writeCoverage(out);
writeUnmatched(out);
writeFooter(out);
}
+
+ private void calculateUnmatched()
+ {
+ unmatched = new ArrayList<SpecReference>();
+ for (String sectionId : references.keySet()) {
+ for (SpecReference ref : references.get(sectionId)) {
+ if (!auditParser.hasAssertion(ref.getSection(), ref.getAssertion())) {
+ unmatched.add(ref);
+ }
+ }
+ }
+ }
+
private void writeHeader(OutputStream out) throws IOException {
StringBuilder sb = new StringBuilder();
@@ -150,10 +167,22 @@
out.write(sb.toString().getBytes());
}
+ private void writeContents(OutputStream out) throws IOException {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("<h3>Contents</h3>");
+ sb.append("<div><a href=\"#masterSummary\">Master Summary</a></div>");
+ sb.append("<div><a href=\"#sectionSummary\">Section Summary</a></div>");
+ sb.append("<div><a href=\"#coverageDetail\">Coverage Detail</a></div>");
+ sb.append("<div><a href=\"#unmatched\">Unmatched Tests</a></div>");
+
+ out.write(sb.toString().getBytes());
+ }
+
private void writeMasterSummary(OutputStream out) throws IOException {
StringBuilder sb = new StringBuilder();
- sb.append("<h3>Master Summary</h3>\n");
+ sb.append("<h3 id=\"masterSummary\">Master Summary</h3>\n");
sb.append("<table border=\"0\">");
@@ -198,12 +227,25 @@
sb.append("<td>Total percentage of tested assertions</td>");
double coveragePercent = assertionTotal > 0 ? ((coverage * 1.0) / assertionTotal) * 100 : 0;
- sb.append("<td>");
+
+ String bgColor = coveragePercent < 60 ? "#ffaaaa" : coveragePercent < 80 ? "#ffffaa" : "#aaffaa";
+
+ sb.append("<td align=\"center\" style=\"background-color:" + bgColor + "\">");
+
sb.append(String.format("%.2f%%", coveragePercent));
sb.append("</td>");
- sb.append("</tr>");
+ sb.append("</tr>");
+ sb.append("<tr>");
+ sb.append("<td>Total number of unmatched tests</td>");
+
+ sb.append("<td>");
+ sb.append(unmatched.size());
+ sb.append("</td>");
+
+ sb.append("</tr>");
+
sb.append("</table>");
out.write(sb.toString().getBytes());
@@ -212,7 +254,7 @@
private void writeSectionSummary(OutputStream out) throws IOException {
StringBuilder sb = new StringBuilder();
- sb.append("<h3>Section Summary</h3>\n");
+ sb.append("<h3 id=\"sectionSummary\">Section Summary</h3>\n");
sb.append("<table width=\"100%\">");
@@ -284,7 +326,7 @@
private void writeCoverage(OutputStream out) throws IOException {
- out.write("<h3>Coverage Detail</h3>\n".getBytes());
+ out.write("<h3 id=\"coverageDetail\">Coverage Detail</h3>\n".getBytes());
for (String sectionId : auditParser.getSectionIds()) {
@@ -375,21 +417,11 @@
}
private void writeUnmatched(OutputStream out) throws IOException {
- List<SpecReference> unmatched = new ArrayList<SpecReference>();
-
- for (String sectionId : references.keySet()) {
- for (SpecReference ref : references.get(sectionId)) {
- if (!auditParser.hasAssertion(ref.getSection(), ref.getAssertion())) {
- unmatched.add(ref);
- }
- }
- }
-
if (unmatched.isEmpty()) return;
StringBuilder sb = new StringBuilder();
- sb.append("<h3>Unmatched tests</h3>\n");
+ sb.append("<h3 id=\"unmatched\">Unmatched tests</h3>\n");
sb.append(String.format("<p>The following %d tests do not match any known assertions:</p>",
unmatched.size()));
16 years
Hibernate SVN: r15998 - beanvalidation/trunk/validation-api/src/main/java/javax/validation.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-18 10:50:13 -0500 (Wed, 18 Feb 2009)
New Revision: 15998
Added:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolationException.java
Log:
BVAL-123 add ConstraintViolationException
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolationException.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolationException.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/ConstraintViolationException.java 2009-02-18 15:50:13 UTC (rev 15998)
@@ -0,0 +1,42 @@
+package javax.validation;
+
+import java.util.Set;
+
+/**
+ * Report the result of constraint violations
+ *
+ * @author Emmanuel Bernard
+ */
+public class ConstraintViolationException extends ValidationException {
+ private final Set<ConstraintViolation> constraintViolations;
+
+ /**
+ * Creates a constraint violation report
+ *
+ * @param message error message
+ * @param constraintViolations Set of ConstraintViolation
+ */
+ public ConstraintViolationException(String message, Set<ConstraintViolation> constraintViolations) {
+ super( message );
+ this.constraintViolations = constraintViolations;
+ }
+
+ /**
+ * Creates a constraint violation report
+ *
+ * @param constraintViolations Set of ConstraintViolation
+ */
+ public ConstraintViolationException(Set<ConstraintViolation> constraintViolations) {
+ super();
+ this.constraintViolations = constraintViolations;
+ }
+
+ /**
+ * Set of constraint violations reported during a validation
+ *
+ * @return Set of CosntraintViolation
+ */
+ public Set<ConstraintViolation> getConstraintViolations() {
+ return constraintViolations;
+ }
+}
16 years
Hibernate SVN: r15997 - beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4 and 4 other directories.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-18 10:43:32 -0500 (Wed, 18 Feb 2009)
New Revision: 15997
Modified:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Address.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.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/engine/group/Address.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java
Log:
BVAL-122 Rename @GroupSequence.sequence to @GroupSequence.value
Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/GroupSequence.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -35,5 +35,5 @@
//TODO depreciate
Class<?> name() default void.class;
- Class<?>[] sequence();
+ Class<?>[] value();
}
Modified: beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Address.java
===================================================================
--- beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Address.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Address.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -29,6 +29,6 @@
* check both basic constraints and high level ones.
* high level constraints are not cheked if basic constraints fail
*/
- @GroupSequence(sequence = {Default.class, HighLevelCoherence.class})
+ @GroupSequence(value = {Default.class, HighLevelCoherence.class})
public interface Complete {}
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -141,7 +141,7 @@
defaultGroupSequence.add( Default.class );
}
else {
- defaultGroupSequence.addAll( Arrays.asList( groupSequenceAnnotation.sequence() ) );
+ defaultGroupSequence.addAll( Arrays.asList( groupSequenceAnnotation.value() ) );
}
}
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -79,7 +79,7 @@
}
List<Group> resolvedGroupSequence = new ArrayList<Group>();
GroupSequence sequenceAnnotation = group.getAnnotation( GroupSequence.class );
- Class<?>[] sequenceArray = sequenceAnnotation.sequence();
+ Class<?>[] sequenceArray = sequenceAnnotation.value();
for ( Class clazz : sequenceArray ) {
if ( clazz.getAnnotation( GroupSequence.class ) == null ) {
resolvedGroupSequence.add( new Group( clazz, group ) );
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 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Book.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -31,7 +31,7 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(name = Default.class, sequence = { First.class, Second.class, Last.class })
+@GroupSequence(name = Default.class, value = { First.class, Second.class, Last.class })
public class Book {
@NotNull(groups = First.class)
@NotEmpty(groups = First.class)
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 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/eg/Dictonary.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -26,7 +26,7 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(name = DefaultAlias.class, sequence = { Default.class })
+@GroupSequence(name = DefaultAlias.class, value = { Default.class })
public class Dictonary extends Book {
@NotNull(groups = Translate.class)
@NotEmpty(groups = Translate.class)
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -30,6 +30,6 @@
* Check both basic constraints and high level ones.
* High level constraints are not checked if basic constraints fail.
*/
- @GroupSequence(sequence = {Default.class, HighLevelCoherence.class})
+ @GroupSequence(value = {Default.class, HighLevelCoherence.class})
public interface Complete {}
}
\ No newline at end of file
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -22,6 +22,6 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(sequence = CyclicGroupSequence.class)
+@GroupSequence(value = CyclicGroupSequence.class)
public interface CyclicGroupSequence {
}
\ No newline at end of file
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -22,6 +22,6 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence(sequence = CyclicGroupSequence2.class)
+@GroupSequence(value = CyclicGroupSequence2.class)
public interface CyclicGroupSequence1 {
}
Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java 2009-02-18 15:38:53 UTC (rev 15996)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java 2009-02-18 15:43:32 UTC (rev 15997)
@@ -1,4 +1,4 @@
-// $Id:$
+// $Id$
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
@@ -22,6 +22,6 @@
/**
* @author Hardy Ferentschik
*/
-@GroupSequence( sequence = CyclicGroupSequence1.class)
+@GroupSequence( value = CyclicGroupSequence1.class)
public interface CyclicGroupSequence2 {
}
\ No newline at end of file
16 years
Hibernate SVN: r15996 - beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints.
by hibernate-commits@lists.jboss.org
Author: epbernard
Date: 2009-02-18 10:38:53 -0500 (Wed, 18 Feb 2009)
New Revision: 15996
Added:
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalses.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrues.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Futures.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Maxs.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Mins.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/NotNulls.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Nulls.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pasts.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Patterns.java
beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Sizes.java
Log:
BVAL-121 plural form (not stable yet)
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalses.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalses.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertFalses.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @AssertFalse annotations on the same element
+ * @see javax.validation.constraints.AssertFalse
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface AssertFalses {
+ AssertFalse[] value();
+}
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrues.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrues.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/AssertTrues.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @AssertTrue annotations on the same element
+ * @see AssertTrue
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface AssertTrues {
+ AssertTrue[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Futures.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Futures.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Futures.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Future annotations on the same element
+ * @see javax.validation.constraints.Future
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Futures {
+ Future[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Maxs.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Maxs.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Maxs.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Max annotations on the same element
+ * @see Max
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Maxs {
+ public abstract Max[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Mins.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Mins.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Mins.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Min annotations on the same element
+ * @see javax.validation.constraints.Min
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Mins {
+ public abstract Min[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/NotNulls.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/NotNulls.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/NotNulls.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @NotNull annotations on the same element
+ * @see javax.validation.constraints.NotNull
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface NotNulls {
+ public abstract NotNull[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Nulls.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Nulls.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Nulls.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Null annotations on the same element
+ * @see javax.validation.constraints.Null
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Nulls {
+ public abstract Null[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pasts.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pasts.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Pasts.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @NotNull annotations on the same element
+ * @see Past
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Pasts {
+ public abstract Past[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Patterns.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Patterns.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Patterns.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Pattern annotations on the same element
+ * @see javax.validation.constraints.Pattern
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Patterns {
+ public abstract Pattern[] value();
+}
\ No newline at end of file
Added: beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Sizes.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Sizes.java (rev 0)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/constraints/Sizes.java 2009-02-18 15:38:53 UTC (rev 15996)
@@ -0,0 +1,22 @@
+package javax.validation.constraints;
+
+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;
+
+/**
+ * Defines several @Size annotations on the same element
+ * @see Size
+ *
+ * @author Emmanuel Bernard
+ */
+@Target({ METHOD, FIELD, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface Sizes {
+ public abstract Size[] value();
+}
\ No newline at end of file
16 years
Hibernate SVN: r15995 - in validator/trunk/hibernate-validator/src: main/java/org/hibernate/validation/engine/group and 2 other directories.
by hibernate-commits@lists.jboss.org
Author: hardy.ferentschik
Date: 2009-02-18 09:47:10 -0500 (Wed, 18 Feb 2009)
New Revision: 15995
Added:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/Group.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCode.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCodeCoherenceChecker.java
Removed:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java
validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
Log:
HV-92 Work on group and group sequence processing
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 2009-02-18 08:07:43 UTC (rev 15994)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -38,39 +38,55 @@
import org.hibernate.validation.util.PropertyIterator;
import org.hibernate.validation.util.ReflectionHelper;
+import org.hibernate.validation.engine.group.GroupChainGenerator;
/**
- * The main Bean Validation class.
+ * The main Bean Validation class. This is the core processing class of Hibernate Validator.
*
* @author Emmanuel Bernard
* @author Hardy Ferentschik
* @todo Make all properties transient for serializability.
*/
public class ValidatorImpl implements Validator {
- private static final Set<Class<?>> INDEXABLE_CLASS = new HashSet<Class<?>>();
- private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
+ /**
+ * Set of classes which can be used as index in a map.
+ */
+ private static final Set<Class<?>> VALID_MAP_INDEX_CLASSES = new HashSet<Class<?>>();
+ static {
+ VALID_MAP_INDEX_CLASSES.add( Integer.class );
+ VALID_MAP_INDEX_CLASSES.add( Long.class );
+ VALID_MAP_INDEX_CLASSES.add( String.class );
+ }
/**
+ * The default group array used in case any of the validate methods is called without a group.
+ */
+ private static final Class<?>[] DEFAULT_GROUP_ARRAY = new Class<?>[] { Default.class };
+
+ /**
* A map for the meta data for each entity. The key is the class and the value the bean meta data for this
* entity.
*/
private static Map<Class<?>, BeanMetaDataImpl<?>> metadataProviders
= new ConcurrentHashMap<Class<?>, BeanMetaDataImpl<?>>( 10 );
- static {
- INDEXABLE_CLASS.add( Integer.class );
- INDEXABLE_CLASS.add( Long.class );
- INDEXABLE_CLASS.add( String.class );
- }
+ /**
+ * Used to resolve the group execution order for a validate call.
+ */
+ private GroupChainGenerator groupChainGenerator;
private final ConstraintValidatorFactory constraintValidatorFactory;
+
private final MessageInterpolator messageInterpolator;
+
private final BuiltinConstraints builtinConstraints;
public ValidatorImpl(ConstraintValidatorFactory constraintValidatorFactory, MessageInterpolator messageInterpolator, BuiltinConstraints builtinConstraints) {
this.constraintValidatorFactory = constraintValidatorFactory;
this.messageInterpolator = messageInterpolator;
this.builtinConstraints = builtinConstraints;
+
+ groupChainGenerator = new GroupChainGenerator();
}
/**
@@ -84,6 +100,12 @@
ExecutionContext<T> context = new ExecutionContext<T>(
object, messageInterpolator, constraintValidatorFactory
);
+
+ // if no group is specified use the default
+ if ( groups.length == 0 ) {
+ groups = DEFAULT_GROUP_ARRAY;
+ }
+
List<ConstraintViolationImpl<T>> list = validateInContext( context, Arrays.asList( groups ) );
return new HashSet<ConstraintViolation<T>>( list );
}
@@ -96,19 +118,12 @@
* @param groups A list of groups to validate.
*
* @return List of invalid constraints.
- *
- * @todo Currently we iterate the cascaded fields multiple times. Maybe we should change to an approach where we iterate the object graph only once.
*/
private <T> List<ConstraintViolationImpl<T>> validateInContext(ExecutionContext<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( DEFAULT_GROUP );
- }
-
List<Class<?>> expandedGroups;
boolean isGroupSequence;
for ( Class<?> group : groups ) {
@@ -214,7 +229,7 @@
propertyIndex = String.valueOf( i );
if ( actualValue instanceof Map.Entry ) {
Object key = ( ( Map.Entry ) actualValue ).getKey();
- if ( INDEXABLE_CLASS.contains( key.getClass() ) ) {
+ if ( VALID_MAP_INDEX_CLASSES.contains( key.getClass() ) ) {
propertyIndex = key.toString();
}
actualValue = ( ( Map.Entry ) actualValue ).getValue();
@@ -259,7 +274,7 @@
// if no group is specified use the default
if ( groups.length == 0 ) {
- groups = DEFAULT_GROUP;
+ groups = DEFAULT_GROUP_ARRAY;
}
List<Class<?>> expandedGroups;
@@ -312,7 +327,7 @@
// if no group is specified use the default
if ( groups.length == 0 ) {
- groups = DEFAULT_GROUP;
+ groups = DEFAULT_GROUP_ARRAY;
}
List<Class<?>> expandedGroups;
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/Group.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/Group.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/Group.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,85 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+/**
+ * Encapsulates a single group.
+ *
+ * @author Hardy Ferentschik
+ */
+public class Group {
+ private Class<?> group;
+ private Class<?> sequence;
+
+ public Group(Class<?> group) {
+ this( group, null );
+ }
+
+ public Group(Class<?> group, Class<?> sequence) {
+ this.group = group;
+ this.sequence = sequence;
+ }
+
+ public Class<?> getGroup() {
+ return group;
+ }
+
+ public boolean partOfSequence() {
+ return sequence != null;
+ }
+
+ public Class<?> getSequence() {
+ return sequence;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if ( this == o ) {
+ return true;
+ }
+ if ( o == null || getClass() != o.getClass() ) {
+ return false;
+ }
+
+ Group group1 = ( Group ) o;
+
+ if ( group != null ? !group.equals( group1.group ) : group1.group != null ) {
+ return false;
+ }
+ if ( sequence != null ? !sequence.equals( group1.sequence ) : group1.sequence != null ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = group != null ? group.hashCode() : 0;
+ result = 31 * result + ( sequence != null ? sequence.hashCode() : 0 );
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "Group{" +
+ "group=" + group +
+ ", sequence=" + sequence +
+ '}';
+ }
+}
Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/Group.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,99 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * An instance of <code>GroupExecutionChain</code> defines the order in to validate groups during the validation process.
+ *
+ * @author Hardy Ferentschik
+ */
+public class GroupChain {
+
+ private List<Group> groupList = new ArrayList<Group>();
+
+ private int nextGroupPointer = 0;
+
+
+ /**
+ * @return Returns <code>true</code> if there is another group in the chain <code>false</code> otherwise.
+ */
+ public boolean hasNext() {
+ return nextGroupPointer <= groupList.size();
+ }
+
+ /**
+ * @return Returns the next group in the chain or <code>null</code> if there is none.
+ */
+ public Group next() {
+ if ( hasNext() ) {
+ return groupList.get( nextGroupPointer++ );
+ }
+ else {
+ return null;
+ }
+ }
+
+ /**
+ * @return The number of groups in this chain.
+ */
+ public int size() {
+ return groupList.size();
+ }
+
+ public boolean containsSequence(Class<?> groupSequence) {
+ boolean result = false;
+ for ( Group group : groupList ) {
+ if ( groupSequence.getName().equals( group.getSequence() ) ) {
+ result = true;
+ break;
+ }
+ }
+ return result;
+ }
+
+ void insertGroup(Group group) {
+ if ( nextGroupPointer != 0 ) {
+ throw new RuntimeException( "Trying to modify the GroupChain while iterating." );
+ }
+
+ if ( !groupList.contains( group ) ) {
+ groupList.add( group );
+ }
+ }
+
+ void insertSequence(List<Group> groups) {
+ if ( groups == null || groups.size() == 0 ) {
+ return;
+ }
+
+ if ( !containsSequence( groups.get( 0 ).getSequence() ) ) {
+ groupList.addAll( groups );
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "GroupChain{" +
+ "groupList=" + groupList +
+ ", nextGroupPointer=" + nextGroupPointer +
+ '}';
+ }
+}
\ No newline at end of file
Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChain.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java (from rev 15990, validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java)
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupChainGenerator.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,95 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import javax.validation.GroupSequence;
+import javax.validation.ValidationException;
+
+/**
+ * Used to determine the execution order.
+ *
+ * @author Hardy Ferentschik
+ */
+public class GroupChainGenerator {
+
+ private final Map<Class<?>, List<Group>> resolvedSequences = new HashMap<Class<?>, List<Group>>();
+
+ public GroupChain getGroupChainFor(Set<Class<?>> groups) {
+ if ( groups == null || groups.size() == 0 ) {
+ throw new IllegalArgumentException( "At least one group has to be specified." );
+ }
+
+ for ( Class<?> clazz : groups ) {
+ if ( !clazz.isInterface() ) {
+ throw new ValidationException( "A group has to be an interface. " + clazz.getName() + " is not." );
+ }
+ }
+
+ GroupChain chain = new GroupChain();
+ for ( Class<?> clazz : groups ) {
+ if ( clazz.getAnnotation( GroupSequence.class ) == null ) { // normal clazz
+ Group group = new Group( clazz );
+ chain.insertGroup( group );
+ }
+ else {
+ insertSequence( clazz, chain );
+ }
+ }
+
+ return chain;
+ }
+
+ private void insertSequence(Class<?> clazz, GroupChain chain) {
+ List<Group> sequence;
+ if ( resolvedSequences.containsKey( clazz ) ) {
+ sequence = resolvedSequences.get( clazz );
+ }
+ else {
+ sequence = resolveSequence( clazz, new ArrayList<Class<?>>() );
+ }
+ chain.insertSequence( sequence );
+ }
+
+ private List<Group> resolveSequence(Class<?> group, List<Class<?>> processedSequences) {
+ if ( processedSequences.contains( group ) ) {
+ throw new ValidationException( "Cyclic dependecy in group definition" );
+ }
+ else {
+ processedSequences.add( group );
+ }
+ List<Group> resolvedGroupSequence = new ArrayList<Group>();
+ GroupSequence sequenceAnnotation = group.getAnnotation( GroupSequence.class );
+ Class<?>[] sequenceArray = sequenceAnnotation.sequence();
+ for ( Class clazz : sequenceArray ) {
+ if ( clazz.getAnnotation( GroupSequence.class ) == null ) {
+ resolvedGroupSequence.add( new Group( clazz, group ) );
+ }
+ else {
+ List<Group> tmpSequence = resolveSequence( clazz, processedSequences );
+ resolvedGroupSequence.addAll( tmpSequence );
+ }
+ }
+ resolvedSequences.put( group, resolvedGroupSequence );
+ return resolvedGroupSequence;
+ }
+}
Deleted: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java 2009-02-18 08:07:43 UTC (rev 15994)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/group/GroupExecutionOrder.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -1,26 +0,0 @@
-// $Id:$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.hibernate.validation.engine.group;
-
-/**
- * Used to determine the execution order if there is one or more group or group sequences are specified.
- *
- * @author Hardy Ferentschik
- */
-public class GroupExecutionOrder {
-}
Deleted: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java 2009-02-18 08:07:43 UTC (rev 15994)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -1,181 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-* http://www.apache.org/licenses/LICENSE-2.0
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.hibernate.validation.engine;
-
-import java.util.HashSet;
-import java.util.Set;
-import javax.validation.ConstraintViolation;
-import javax.validation.Validator;
-import javax.validation.groups.Default;
-
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-
-import org.hibernate.validation.eg.Animal;
-import org.hibernate.validation.eg.Author;
-import org.hibernate.validation.eg.Book;
-import org.hibernate.validation.eg.DefaultAlias;
-import org.hibernate.validation.eg.Dictonary;
-import org.hibernate.validation.eg.groups.First;
-import org.hibernate.validation.eg.groups.Last;
-import org.hibernate.validation.eg.groups.Second;
-import org.hibernate.validation.util.TestUtil;
-
-/**
- * Tests for the implementation of <code>Validator</code>.
- *
- * @author Hardy Ferentschik
- */
-public class GroupTest {
-
- @Test
- public void testGroups() {
- Validator validator = TestUtil.getValidator();
-
- Author author = new Author();
- author.setLastName( "" );
- author.setFirstName( "" );
- Book book = new Book();
- book.setTitle( "" );
- book.setAuthor( author );
-
- 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.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.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
-
- book.setTitle( "Hibernate Persistence with JPA" );
- book.setSubtitle( "Revised Edition of Hibernate in Action" );
-
- 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.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
-
- book.setSubtitle( "Revised Edition" );
- author.setCompany( "JBoss a divison of RedHat" );
-
- 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.getMessage() );
- 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.class, Second.class, Last.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
- public void testDefaultGroupSequence() {
- Validator validator = TestUtil.getValidator();
-
- Author author = new Author();
- author.setLastName( "" );
- author.setFirstName( "" );
- Book book = new Book();
- book.setAuthor( author );
-
- 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.class );
- ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
- assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
- assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
- assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
- assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
-
- book.setTitle( "Hibernate Persistence with JPA" );
- book.setSubtitle( "Revised Edition of Hibernate in Action" );
-
- 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.class );
- assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
-
- author.setCompany( "JBoss" );
-
- constraintViolations = validator.validate( book, Default.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
- public void testGroupSequences() {
- Validator validator = TestUtil.getValidator();
-
- Dictonary dictonary = new Dictonary();
- dictonary.setTitle( "English - German" );
- Author author = new Author();
- author.setLastName( "-" );
- author.setFirstName( "-" );
- author.setCompany( "Langenscheidt Publ." );
- dictonary.setAuthor( author );
-
- Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, DefaultAlias.class );
- assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
- }
-
- @Test
- public void testValidationFailureInMultipleGroups() {
- Validator validator = TestUtil.getValidator();
- Animal elepfant = new Animal();
- elepfant.setName( "" );
- elepfant.setDomain( Animal.Domain.EUKARYOTA );
-
- 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,
- constraintViolations.size()
- );
-
- ConstraintViolation constraintViolation = constraintViolations.iterator().next();
- Set<Class<?>> expected = new HashSet<Class<?>>();
- expected.add( First.class );
- expected.add( Second.class );
- assertEquals(
- "The constraint should be invalid for both groups",
- expected,
- constraintViolation.getGroups()
- );
- }
-}
\ No newline at end of file
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java (from rev 15989, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/Address.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/Address.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,35 @@
+package org.hibernate.validation.engine.group;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import javax.validation.GroupSequence;
+import javax.validation.groups.Default;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@ZipCodeCoherenceChecker(groups = Address.HighLevelCoherence.class)
+public class Address {
+ @NotNull @Size(max = 50)
+ private String street1;
+
+ @ZipCode
+ private String zipcode;
+
+ @NotNull
+ @Size(max = 30)
+ private String city;
+
+ /**
+ * Check conherence on the overall object
+ * Needs basic checking to be green first
+ */
+ public interface HighLevelCoherence {}
+
+ /**
+ * Check both basic constraints and high level ones.
+ * High level constraints are not checked if basic constraints fail.
+ */
+ @GroupSequence(sequence = {Default.class, HighLevelCoherence.class})
+ public interface Complete {}
+}
\ No newline at end of file
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,27 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import javax.validation.GroupSequence;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@GroupSequence(sequence = CyclicGroupSequence.class)
+public interface CyclicGroupSequence {
+}
\ No newline at end of file
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,27 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import javax.validation.GroupSequence;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@GroupSequence(sequence = CyclicGroupSequence2.class)
+public interface CyclicGroupSequence1 {
+}
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence1.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,27 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import javax.validation.GroupSequence;
+
+/**
+ * @author Hardy Ferentschik
+ */
+@GroupSequence( sequence = CyclicGroupSequence1.class)
+public interface CyclicGroupSequence2 {
+}
\ No newline at end of file
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/CyclicGroupSequence2.java
___________________________________________________________________
Name: svn:keywords
+ Id
Added: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,115 @@
+// $Id:$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.validation.ValidationException;
+import javax.validation.groups.Default;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.hibernate.validation.eg.groups.First;
+import org.hibernate.validation.eg.groups.Last;
+import org.hibernate.validation.eg.groups.Second;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class GroupChainGeneratorTest {
+
+ GroupChainGenerator generator;
+
+ @Before
+ public void init() {
+ generator = new GroupChainGenerator();
+ }
+
+ @Test(expected = ValidationException.class)
+ public void testGroupChainForNonInterface() {
+ Set<Class<?>> groups = new HashSet<Class<?>>();
+ groups.add( String.class );
+ generator.getGroupChainFor( groups );
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testGroupChainForNull() {
+ generator.getGroupChainFor( null );
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testGroupChainForEmptySet() {
+ generator.getGroupChainFor( new HashSet<Class<?>>() );
+ }
+
+ @Test(expected = ValidationException.class)
+ public void testCyclicGroupSequences() {
+ Set<Class<?>> groups = new HashSet<Class<?>>();
+ groups.add( CyclicGroupSequence1.class );
+ generator.getGroupChainFor( groups );
+ }
+
+ @Test(expected = ValidationException.class)
+ public void testCyclicGroupSequence() {
+ Set<Class<?>> groups = new HashSet<Class<?>>();
+ groups.add( CyclicGroupSequence.class );
+ generator.getGroupChainFor( groups );
+ }
+
+ @Test
+ public void testGroupDuplicates() {
+ Set<Class<?>> groups = new HashSet<Class<?>>();
+ groups.add( First.class );
+ groups.add( Second.class );
+ groups.add( Last.class );
+ GroupChain chain = generator.getGroupChainFor( groups );
+ assertEquals( "Wrong number of groups", 3, chain.size() );
+
+ groups.clear();
+ groups.add( First.class );
+ groups.add( First.class );
+ chain = generator.getGroupChainFor( groups );
+ assertEquals( "Wrong number of groups", 1, chain.size() );
+
+ groups.clear();
+ groups.add( First.class );
+ groups.add( Last.class );
+ groups.add( First.class );
+ chain = generator.getGroupChainFor( groups );
+ assertEquals( "Wrong number of groups", 2, chain.size() );
+ }
+
+ @Test
+ public void testSequenceResolution() {
+ Set<Class<?>> groups = new HashSet<Class<?>>();
+ groups.add( Address.Complete.class );
+ GroupChain chain = generator.getGroupChainFor( groups );
+ assertEquals( "Wrong number of groups", 2, chain.size() );
+
+ assertTrue( "Should have more groups", chain.hasNext() );
+ assertEquals( "Wrong group", Default.class, chain.next().getGroup() );
+
+ assertTrue( "Should have more groups", chain.hasNext() );
+ assertEquals( "Wrong group", Address.HighLevelCoherence.class, chain.next().getGroup() );
+
+ assertTrue( "There should be no more groups", chain.hasNext() );
+ }
+}
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupChainGeneratorTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java (from rev 15990, validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/GroupTest.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,181 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+* http://www.apache.org/licenses/LICENSE-2.0
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.hibernate.validation.engine.group;
+
+import java.util.HashSet;
+import java.util.Set;
+import javax.validation.ConstraintViolation;
+import javax.validation.Validator;
+import javax.validation.groups.Default;
+
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+import org.hibernate.validation.eg.Animal;
+import org.hibernate.validation.eg.Author;
+import org.hibernate.validation.eg.Book;
+import org.hibernate.validation.eg.DefaultAlias;
+import org.hibernate.validation.eg.Dictonary;
+import org.hibernate.validation.eg.groups.First;
+import org.hibernate.validation.eg.groups.Last;
+import org.hibernate.validation.eg.groups.Second;
+import org.hibernate.validation.util.TestUtil;
+
+/**
+ * Tests for the implementation of <code>Validator</code>.
+ *
+ * @author Hardy Ferentschik
+ */
+public class GroupTest {
+
+ @Test
+ public void testGroups() {
+ Validator validator = TestUtil.getValidator();
+
+ Author author = new Author();
+ author.setLastName( "" );
+ author.setFirstName( "" );
+ Book book = new Book();
+ book.setTitle( "" );
+ book.setAuthor( author );
+
+ 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.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.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
+
+ book.setTitle( "Hibernate Persistence with JPA" );
+ book.setSubtitle( "Revised Edition of Hibernate in Action" );
+
+ 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.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getSubtitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "subtitle", constraintViolation.getPropertyPath() );
+
+ book.setSubtitle( "Revised Edition" );
+ author.setCompany( "JBoss a divison of RedHat" );
+
+ 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.getMessage() );
+ 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.class, Second.class, Last.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testDefaultGroupSequence() {
+ Validator validator = TestUtil.getValidator();
+
+ Author author = new Author();
+ author.setLastName( "" );
+ author.setFirstName( "" );
+ Book book = new Book();
+ book.setAuthor( author );
+
+ 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.class );
+ ConstraintViolation constraintViolation = constraintViolations.iterator().next();
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+ assertEquals( "Wrong message", "may not be null", constraintViolation.getMessage() );
+ assertEquals( "Wrong root entity", book, constraintViolation.getRootBean() );
+ assertEquals( "Wrong value", book.getTitle(), constraintViolation.getInvalidValue() );
+ assertEquals( "Wrong propertyName", "title", constraintViolation.getPropertyPath() );
+
+ book.setTitle( "Hibernate Persistence with JPA" );
+ book.setSubtitle( "Revised Edition of Hibernate in Action" );
+
+ 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.class );
+ assertEquals( "Wrong number of constraints", 1, constraintViolations.size() );
+
+ author.setCompany( "JBoss" );
+
+ constraintViolations = validator.validate( book, Default.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testGroupSequences() {
+ Validator validator = TestUtil.getValidator();
+
+ Dictonary dictonary = new Dictonary();
+ dictonary.setTitle( "English - German" );
+ Author author = new Author();
+ author.setLastName( "-" );
+ author.setFirstName( "-" );
+ author.setCompany( "Langenscheidt Publ." );
+ dictonary.setAuthor( author );
+
+ Set<ConstraintViolation<Dictonary>> constraintViolations = validator.validate( dictonary, DefaultAlias.class );
+ assertEquals( "Wrong number of constraints", 0, constraintViolations.size() );
+ }
+
+ @Test
+ public void testValidationFailureInMultipleGroups() {
+ Validator validator = TestUtil.getValidator();
+ Animal elepfant = new Animal();
+ elepfant.setName( "" );
+ elepfant.setDomain( Animal.Domain.EUKARYOTA );
+
+ 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,
+ constraintViolations.size()
+ );
+
+ ConstraintViolation constraintViolation = constraintViolations.iterator().next();
+ Set<Class<?>> expected = new HashSet<Class<?>>();
+ expected.add( First.class );
+ expected.add( Second.class );
+ assertEquals(
+ "The constraint should be invalid for both groups",
+ expected,
+ constraintViolation.getGroups()
+ );
+ }
+}
\ No newline at end of file
Property changes on: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/GroupTest.java
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:mergeinfo
+
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCode.java (from rev 15989, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/ZipCode.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCode.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCode.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,7 @@
+package org.hibernate.validation.engine.group;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public @interface ZipCode {
+}
\ No newline at end of file
Copied: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCodeCoherenceChecker.java (from rev 15989, beanvalidation/trunk/validation-api/src/test/java/org/hibernate/validator/spec/s3/s4/ZipCodeCoherenceChecker.java)
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCodeCoherenceChecker.java (rev 0)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/group/ZipCodeCoherenceChecker.java 2009-02-18 14:47:10 UTC (rev 15995)
@@ -0,0 +1,19 @@
+package org.hibernate.validation.engine.group;
+
+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.TYPE;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Target({ TYPE, ANNOTATION_TYPE })
+@Retention(RUNTIME)
+@Documented
+public @interface ZipCodeCoherenceChecker {
+ public abstract String message() default "{validator.zipCodeCoherenceChecker}";
+ public abstract Class<?>[] groups() default {};
+}
\ No newline at end of file
16 years
Hibernate SVN: r15994 - validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report.
by hibernate-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2009-02-18 03:07:43 -0500 (Wed, 18 Feb 2009)
New Revision: 15994
Modified:
validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
Log:
minor
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 07:20:48 UTC (rev 15993)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 08:07:43 UTC (rev 15994)
@@ -219,7 +219,7 @@
sb.append("<tr style=\"background-color:#dddddd\">");
sb.append("<th align=\"left\">Section</th>");
sb.append("<th>Assertions</th>");
- sb.append("<th>Coverage</th>");
+ sb.append("<th>Tested</th>");
sb.append("<th>Coverage %</th>");
sb.append("</tr>");
16 years
Hibernate SVN: r15993 - validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report.
by hibernate-commits@lists.jboss.org
Author: shane.bryzak(a)jboss.com
Date: 2009-02-18 02:20:48 -0500 (Wed, 18 Feb 2009)
New Revision: 15993
Modified:
validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
Log:
added master summary
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 04:45:23 UTC (rev 15992)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java 2009-02-18 07:20:48 UTC (rev 15993)
@@ -172,6 +172,38 @@
sb.append("</td>");
sb.append("</tr>");
+ sb.append("<tr>");
+ sb.append("<td>Total number of tested assertions</td>");
+
+ int coverage = 0;
+
+ for (String sectionId : auditParser.getSectionIds())
+ {
+ for (AuditAssertion assertion : auditParser.getAssertionsForSection(sectionId))
+ {
+ if (!getCoverageForAssertion(sectionId, assertion.getId()).isEmpty())
+ {
+ coverage++;
+ }
+ }
+ }
+
+ sb.append("<td>");
+ sb.append(coverage);
+ sb.append("</td>");
+
+ sb.append("</tr>");
+
+ sb.append("<tr>");
+ sb.append("<td>Total percentage of tested assertions</td>");
+
+ double coveragePercent = assertionTotal > 0 ? ((coverage * 1.0) / assertionTotal) * 100 : 0;
+ sb.append("<td>");
+ sb.append(String.format("%.2f%%", coveragePercent));
+ sb.append("</td>");
+
+ sb.append("</tr>");
+
sb.append("</table>");
out.write(sb.toString().getBytes());
16 years