[hibernate-commits] Hibernate SVN: r15855 - in validator/trunk: hibernate-validator/src/main/java/org/hibernate/validation/util and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Feb 2 10:50:32 EST 2009


Author: hardy.ferentschik
Date: 2009-02-02 10:50:32 -0500 (Mon, 02 Feb 2009)
New Revision: 15855

Added:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
Removed:
   validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/BuiltinConstraintDefinitions.properties
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/ConstraintDescriptorImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorContextImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorFactoryImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
   validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
Log:
Removed the properties files. Now a map is used to determine the builtin constraints. Also create the builtin constraints in ValidatorFactoryImpl and pass them along. This will allow to override the builtin constraints to be overridden in xml. However, I also had to pass the instance aound for quite a long time. I am wondering whether dependcy injection wouldn't be a good idea here (guice?)

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-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BeanMetaDataImpl.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -86,8 +86,11 @@
 	 */
 	private Map<Class<?>, List<Class<?>>> groupSequences = new HashMap<Class<?>, List<Class<?>>>();
 
-	public BeanMetaDataImpl(Class<T> beanClass) {
+	private final BuiltinConstraints builtinConstraints;
+
+	public BeanMetaDataImpl(Class<T> beanClass, BuiltinConstraints builtinConstraints) {
 		this.beanClass = beanClass;
+		this.builtinConstraints = builtinConstraints;
 		createMetaData();
 	}
 
@@ -255,7 +258,7 @@
 			}
 		}
 
-		return new ConstraintDescriptorImpl( annotation, groups );
+		return new ConstraintDescriptorImpl( annotation, groups, builtinConstraints );
 	}
 
 	/**

Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -0,0 +1,113 @@
+// $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.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.validation.ConstraintValidator;
+import javax.validation.ValidationException;
+import javax.validation.constraints.AssertFalse;
+import javax.validation.constraints.AssertTrue;
+import javax.validation.constraints.Future;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Null;
+import javax.validation.constraints.Size;
+
+import org.hibernate.validation.constraints.AssertFalseValidator;
+import org.hibernate.validation.constraints.AssertTrueValidator;
+import org.hibernate.validation.constraints.FutureValidatorForCalendar;
+import org.hibernate.validation.constraints.FutureValidatorForDate;
+import org.hibernate.validation.constraints.MaxValidatorForNumber;
+import org.hibernate.validation.constraints.MaxValidatorForString;
+import org.hibernate.validation.constraints.MinValidatorForNumber;
+import org.hibernate.validation.constraints.MinValidatorForString;
+import org.hibernate.validation.constraints.NotNullValidator;
+import org.hibernate.validation.constraints.NullValidator;
+import org.hibernate.validation.constraints.PastValidatorForCalendar;
+import org.hibernate.validation.constraints.PastValidatorForDate;
+import org.hibernate.validation.constraints.SizeValidator;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class BuiltinConstraints {
+
+	private final Map<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<?, ?>>>> builtinConstraints =
+			new HashMap<Class<? extends Annotation>, List<Class<? extends ConstraintValidator<?, ?>>>>();
+
+	public BuiltinConstraints() {
+
+		List<Class<? extends ConstraintValidator<?, ?>>> constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( AssertFalseValidator.class );
+		builtinConstraints.put( AssertFalse.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( AssertTrueValidator.class );
+		builtinConstraints.put( AssertTrue.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( FutureValidatorForCalendar.class );
+		constraintList.add( FutureValidatorForDate.class );
+		builtinConstraints.put( Future.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( MaxValidatorForNumber.class );
+		constraintList.add( MaxValidatorForString.class );
+		builtinConstraints.put( Max.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( MinValidatorForNumber.class );
+		constraintList.add( MinValidatorForString.class );
+		builtinConstraints.put( Min.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( NotNullValidator.class );
+		builtinConstraints.put( NotNull.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( NullValidator.class );
+		builtinConstraints.put( Null.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( PastValidatorForCalendar.class );
+		constraintList.add( PastValidatorForDate.class );
+		builtinConstraints.put( Future.class, constraintList );
+
+		constraintList = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+		constraintList.add( SizeValidator.class );
+		builtinConstraints.put( Size.class, constraintList );
+
+
+	}
+
+	public List<Class<? extends ConstraintValidator<?, ?>>> getBuiltInConstraints(Annotation annotation) {
+		List<Class<? extends ConstraintValidator<?, ?>>> constraints = builtinConstraints.get( annotation.annotationType() );
+
+		if ( constraints == null ) {
+			throw new ValidationException( "Unable to find constraints for  " + annotation.annotationType() );
+		}
+
+		return constraints;
+	}
+
+}


Property changes on: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/BuiltinConstraints.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ConstraintDescriptorImpl.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -20,6 +20,7 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -27,7 +28,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.ArrayList;
 import javax.validation.Constraint;
 import javax.validation.ConstraintDescriptor;
 import javax.validation.ConstraintValidator;
@@ -55,46 +55,80 @@
 	private static final Class<?>[] DEFAULT_GROUP = new Class<?>[] { Default.class };
 	private static final int OVERRIDES_PARAMETER_DEFAULT_INDEX = -1;
 
+	/**
+	 * The actual constraint annotation.
+	 */
 	private final U annotation;
-	//TODO make it a list
-	private final Class<? extends ConstraintValidator<U,?>>[] constraintClasses;
+
+	/**
+	 * The set of classes implementing the validation for this constraint. See also
+	 * <code>ConstraintValidator</code> resolution algorithm.
+	 */
+	private final List<Class<? extends ConstraintValidator<?, ?>>> constraintClasses = new ArrayList<Class<? extends ConstraintValidator<?, ?>>>();
+
+	/**
+	 * The groups for which to apply this constraint.
+	 */
 	private final Set<Class<?>> groups;
+
+	/**
+	 * The constraint parameters as map. The key is the paramter name and the value the
+	 * parameter value as specified in the constraint.
+	 */
 	private final Map<String, Object> parameters;
+
+	/**
+	 * The composing constraints for this constraints.
+	 */
 	private final Set<ConstraintDescriptor> composingConstraints = new HashSet<ConstraintDescriptor>();
+
+	/**
+	 * Override paramter values used for composing constraints.
+	 */
 	private final Map<ClassIndexWrapper, Map<String, Object>> overrideParameters = new HashMap<ClassIndexWrapper, Map<String, Object>>();
+
+	/**
+	 * Flag indicating if in case of a composing constraint a single error or multiple errors should be raised.
+	 */
 	private final boolean isReportAsSingleInvalidConstraint;
 
-	public ConstraintDescriptorImpl(U annotation, Class<?>[] groups) {
-		this( annotation, new HashSet<Class<?>>() );
+	/**
+	 * Handle to the builtin constraint implementations.
+	 */
+	private final BuiltinConstraints builtinConstraints;
+
+	public ConstraintDescriptorImpl(U annotation, Class<?>[] groups, BuiltinConstraints builtinConstraints) {
+		this( annotation, new HashSet<Class<?>>(), builtinConstraints );
 		if ( groups.length == 0 ) {
 			groups = DEFAULT_GROUP;
 		}
 		this.groups.addAll( Arrays.asList( groups ) );
 	}
 
-	public ConstraintDescriptorImpl(U annotation, Set<Class<?>> groups) {
+	public ConstraintDescriptorImpl(U annotation, Set<Class<?>> groups, BuiltinConstraints builtinConstraints) {
 		this.annotation = annotation;
 		this.groups = groups;
 		this.parameters = getAnnotationParameters( annotation );
+		this.builtinConstraints = builtinConstraints;
 
 		this.isReportAsSingleInvalidConstraint = annotation.annotationType().isAnnotationPresent(
 				ReportAsViolationFromCompositeConstraint.class
 		);
 
 
+		findConstraintClasses();
+		parseOverrideParameters();
+		parseComposingConstraints();
+	}
+
+	private void findConstraintClasses() {
 		if ( ReflectionHelper.isBuiltInConstraintAnnotation( annotation ) ) {
-			this.constraintClasses = (Class<? extends ConstraintValidator<U,?>>[])
-					ReflectionHelper.getBuiltInConstraints( annotation );
+			constraintClasses.addAll( builtinConstraints.getBuiltInConstraints( annotation ) );
 		}
 		else {
-			Constraint constraint = annotation.annotationType()
-					.getAnnotation( Constraint.class );
-			this.constraintClasses = (Class<? extends ConstraintValidator<U,?>>[])
-					constraint.validatedBy();
+			Constraint constraint = annotation.annotationType().getAnnotation( Constraint.class );
+			constraintClasses.addAll( Arrays.asList( constraint.validatedBy() ) );
 		}
-
-		parseOverrideParameters();
-		parseComposingConstraints();
 	}
 
 	/**
@@ -114,11 +148,8 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public List<Class<? extends ConstraintValidator<?,?>>>
-			getConstraintValidatorClasses() {
-		return Collections.unmodifiableList(
-				Arrays.asList((Class<? extends ConstraintValidator<?,?>>[]) constraintClasses)
-				);
+	public List<Class<? extends ConstraintValidator<?, ?>>> getConstraintValidatorClasses() {
+		return Collections.unmodifiableList( constraintClasses );
 	}
 
 	/**
@@ -146,7 +177,7 @@
 	public String toString() {
 		return "ConstraintDescriptorImpl{" +
 				"annotation=" + annotation +
-				", constraintClasses=" + constraintClasses +
+				", constraintClasses=" + constraintClasses.toString() +
 				", groups=" + groups +
 				", parameters=" + parameters +
 				", composingConstraints=" + composingConstraints +
@@ -172,7 +203,6 @@
 	}
 
 	private void addOverrideParameter(Map<ClassIndexWrapper, Map<String, Object>> overrideParameters, Object value, OverridesParameter... parameters) {
-
 		for ( OverridesParameter parameter : parameters ) {
 			ClassIndexWrapper wrapper = new ClassIndexWrapper( parameter.constraint(), parameter.index() );
 			Map<String, Object> map = overrideParameters.get( wrapper );
@@ -200,7 +230,6 @@
 	}
 
 	private void parseOverrideParameters() {
-		// check for overrides
 		for ( Method m : annotation.annotationType().getMethods() ) {
 			if ( m.getAnnotation( OverridesParameter.class ) != null ) {
 				addOverrideParameter(
@@ -259,7 +288,7 @@
 			}
 		}
 		Annotation annotationProxy = AnnotationFactory.create( annotationDescriptor );
-		return new ConstraintDescriptorImpl( annotationProxy, groups );
+		return new ConstraintDescriptorImpl( annotationProxy, groups, builtinConstraints );
 	}
 
 	private class ClassIndexWrapper {

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorContextImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorContextImpl.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorContextImpl.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -15,13 +15,16 @@
 	private final MessageInterpolator factoryMessageInterpolator;
 	private final TraversableResolver factoryTraversableResolver;
 	private final ConstraintValidatorFactory constraintValidatorFactory;
+	private final BuiltinConstraints builtinConstraints;
 
 	public ValidatorContextImpl(ConstraintValidatorFactory constraintValidatorFactory,
 								MessageInterpolator factoryMessageInterpolator,
-								TraversableResolver factoryTraversableResolver) {
+								TraversableResolver factoryTraversableResolver,
+								BuiltinConstraints builtinConstraints) {
 		this.constraintValidatorFactory = constraintValidatorFactory;
 		this.factoryMessageInterpolator = factoryMessageInterpolator;
 		this.factoryTraversableResolver = factoryTraversableResolver;
+		this.builtinConstraints = builtinConstraints;
 		messageInterpolator( factoryMessageInterpolator );
 		traversableResolver( factoryTraversableResolver );
 	}
@@ -47,6 +50,6 @@
 	}
 
 	public Validator getValidator() {
-		return new ValidatorImpl( constraintValidatorFactory, messageInterpolator );
+		return new ValidatorImpl( constraintValidatorFactory, messageInterpolator, builtinConstraints );
 	}
 }

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorFactoryImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorFactoryImpl.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorFactoryImpl.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -34,6 +34,7 @@
 	private final MessageInterpolator messageInterpolator;
 	private final TraversableResolver traversableResolver;
 	private final ConstraintValidatorFactory constraintValidatorFactory;
+	private final BuiltinConstraints builtinConstraints = new BuiltinConstraints();
 
 	public ValidatorFactoryImpl(ConfigurationState configurationState) {
 		this.messageInterpolator = configurationState.getMessageInterpolator();
@@ -60,6 +61,6 @@
 	 * {@inheritDoc}
 	 */
 	public ValidatorContext usingContext() {
-		return new ValidatorContextImpl( constraintValidatorFactory, messageInterpolator, traversableResolver );
+		return new ValidatorContextImpl( constraintValidatorFactory, messageInterpolator, traversableResolver, builtinConstraints );
 	}
 }

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-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -65,10 +65,12 @@
 
 	private final ConstraintValidatorFactory constraintValidatorFactory;
 	private final MessageInterpolator messageInterpolator;
+	private final BuiltinConstraints builtinConstraints;
 
-	public ValidatorImpl(ConstraintValidatorFactory constraintValidatorFactory, MessageInterpolator messageInterpolator) {
+	public ValidatorImpl(ConstraintValidatorFactory constraintValidatorFactory, MessageInterpolator messageInterpolator, BuiltinConstraints builtinConstraints) {
 		this.constraintValidatorFactory = constraintValidatorFactory;
 		this.messageInterpolator = messageInterpolator;
+		this.builtinConstraints = builtinConstraints;
 	}
 
 	/**
@@ -423,7 +425,7 @@
 		@SuppressWarnings("unchecked")
 		BeanMetaDataImpl<T> metadata = ( BeanMetaDataImpl<T> ) metadataProviders.get( beanClass );
 		if ( metadata == null ) {
-			metadata = new BeanMetaDataImpl<T>( beanClass );
+			metadata = new BeanMetaDataImpl<T>( beanClass, builtinConstraints );
 			metadataProviders.put( beanClass, metadata );
 		}
 		return metadata;

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -18,7 +18,6 @@
 package org.hibernate.validation.util;
 
 import java.beans.Introspector;
-import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Field;
@@ -30,16 +29,13 @@
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import java.lang.reflect.WildcardType;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import javax.validation.Constraint;
-import javax.validation.ConstraintValidator;
 import javax.validation.ValidationException;
 
 import org.slf4j.Logger;
@@ -52,46 +48,14 @@
 public class ReflectionHelper {
 
 	private static final Logger log = LoggerFactory.make();
-	private static final Properties builtInConstraints = new Properties();
 
-	static {
-		URL url = ReflectionHelper.class.getResource( "/org/hibernate/validation/BuiltinConstraintDefinitions.properties" );
-		try {
-			builtInConstraints.load( url.openStream() );
-		}
-		catch ( IOException e ) {
-			throw new ValidationException( "Unable to load defined builtin constraint definitions." );
-		}
-	}
-
 	/**
 	 * Private constructor in order to avoid instantiation.
 	 */
 	private ReflectionHelper() {
 	}
 
-	@SuppressWarnings( "unchecked")
-	//FIXME do make it truely multivalidators
-	//FIXME don't rely on properties files, what's the point
-	public static Class<? extends ConstraintValidator<?,?>>[] getBuiltInConstraints(Annotation annotation) {
-		Class constraint = null;
-		String annotationType = annotation.annotationType().getName();
-		if ( builtInConstraints.containsKey( annotationType ) ) {
-			String constraintImplClassName = null;
-			try {
-				constraintImplClassName = builtInConstraints.getProperty( annotationType );
-				constraint = Class.forName( constraintImplClassName );
-			}
-			catch ( ClassNotFoundException e ) {
-				throw new ValidationException(
-						"Unable to load " + constraintImplClassName + " as default implementation for " + annotationType
-				);
-			}
 
-		}
-		return new Class[] {constraint};
-	}
-
 	/**
 	 * Checks whether the given annotation is a builtin constraint annotation defined as defined by the specs.
 	 *

Deleted: validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/BuiltinConstraintDefinitions.properties
===================================================================
--- validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/BuiltinConstraintDefinitions.properties	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/main/resources/org/hibernate/validation/BuiltinConstraintDefinitions.properties	2009-02-02 15:50:32 UTC (rev 15855)
@@ -1,3 +0,0 @@
-# $Id$
-javax.validation.constraints.NotNull=org.hibernate.validation.constraints.NotNullConstraintValidator
-javax.validation.constraints.Size=org.hibernate.validation.constraints.SizeConstraintValidator
\ No newline at end of file

Modified: validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
===================================================================
--- validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -32,8 +32,6 @@
 
 import org.hibernate.validation.util.annotationfactory.AnnotationDescriptor;
 import org.hibernate.validation.util.annotationfactory.AnnotationFactory;
-import org.hibernate.validation.engine.ResourceBundleMessageInterpolator;
-import org.hibernate.validation.engine.ConstraintDescriptorImpl;
 
 /**
  * Tests for message resolution.
@@ -59,55 +57,63 @@
 
 	@Test
 	public void testSuccessfulInterpolation() {
-		ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl( notNull, new Class<?>[] { } );
+		ConstraintDescriptorImpl descriptor = new ConstraintDescriptorImpl(
+				notNull, new Class<?>[] { }, new BuiltinConstraints()
+		);
 
 		String expected = "replacement worked";
-		String actual = interpolator.interpolate( "{foo}", desciptor, null );
+		String actual = interpolator.interpolate( "{foo}", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "replacement worked replacement worked";
-		actual = interpolator.interpolate( "{foo} {foo}", desciptor, null );
+		actual = interpolator.interpolate( "{foo} {foo}", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "This replacement worked just fine";
-		actual = interpolator.interpolate( "This {foo} just fine", desciptor, null );
+		actual = interpolator.interpolate( "This {foo} just fine", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "{} { replacement worked }";
-		actual = interpolator.interpolate( "{} { {foo} }", desciptor, null );
+		actual = interpolator.interpolate( "{} { {foo} }", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
 	@Test
 	public void testUnSuccessfulInterpolation() {
-		ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl( notNull, new Class<?>[] { } );
+		ConstraintDescriptorImpl descriptor = new ConstraintDescriptorImpl(
+				notNull, new Class<?>[] { }, new BuiltinConstraints()
+		);
 		String expected = "foo";  // missing {}
-		String actual = interpolator.interpolate( "foo", desciptor, null );
+		String actual = interpolator.interpolate( "foo", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "#{foo  {}";
-		actual = interpolator.interpolate( "#{foo  {}", desciptor, null );
+		actual = interpolator.interpolate( "#{foo  {}", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
 	@Test
 	public void testUnkownTokenInterpolation() {
-		ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl( notNull, new Class<?>[] { } );
+		ConstraintDescriptorImpl descriptor = new ConstraintDescriptorImpl(
+				notNull, new Class<?>[] { }, new BuiltinConstraints()
+		);
 		String expected = "{bar}";  // unkown token {}
-		String actual = interpolator.interpolate( "{bar}", desciptor, null );
+		String actual = interpolator.interpolate( "{bar}", descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
 	@Test
 	public void testDefaultInterpolation() {
-		ConstraintDescriptorImpl desciptor = new ConstraintDescriptorImpl( notNull, new Class<?>[] { } );
+		ConstraintDescriptorImpl descriptor = new ConstraintDescriptorImpl(
+				notNull, new Class<?>[] { }, new BuiltinConstraints()
+		);
 		String expected = "may not be null";
-		String actual = interpolator.interpolate( notNull.message(), desciptor, null );
+		String actual = interpolator.interpolate( notNull.message(), descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 
-		desciptor = new ConstraintDescriptorImpl( size, new Class<?>[] { } );
+		descriptor = new ConstraintDescriptorImpl( size, new Class<?>[] { }, new BuiltinConstraints() );
 		expected = "size must be between -2147483648 and 2147483647";  // unkown token {}
-		actual = interpolator.interpolate( size.message(), desciptor, null );
+		actual = interpolator.interpolate( size.message(), descriptor, null );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 

Modified: validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java
===================================================================
--- validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java	2009-02-02 15:43:25 UTC (rev 15854)
+++ validator/trunk/validation-api/src/main/java/javax/validation/ConstraintDescriptor.java	2009-02-02 15:50:32 UTC (rev 15855)
@@ -18,63 +18,63 @@
 package javax.validation;
 
 import java.lang.annotation.Annotation;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.List;
 
+/**
+ * Describes a single constraint and its composing constraints.
+ *
+ * @author Emmanuel Bernard
+ * @author Hardy Ferentschik
+ */
+public interface ConstraintDescriptor {
 	/**
-	 * Describes a single constraint and its composing constraints.
+	 * Returns the annotation describing the constraint declaration.
+	 * If a composing constraint, parameter values are reflecting
+	 * the overridden parameters from the main constraint
 	 *
-	 * @author Emmanuel Bernard
-	 * @author Hardy Ferentschik
+	 * @return The annotation for this constraint.
 	 */
-	public interface ConstraintDescriptor {
-		/**
-		 * Returns the annotation describing the constraint declaration.
-		 * If a composing constraint, parameter values are reflecting
-		 * the overridden parameters from the main constraint
-		 *
-		 * @return The annotation for this constraint.
-		 */
-		Annotation getAnnotation();
+	Annotation getAnnotation();
 
-		/**
-		 * @return The groups the constraint is applied on.
-		 */
-		Set<Class<?>> getGroups();
+	/**
+	 * @return The groups the constraint is applied on.
+	 */
+	Set<Class<?>> getGroups();
 
-		/**
-		 * list of the constraint validation implementation classes
-		 *
-		 * @return list of the constraint validation implementation classes
-		 */
-		List<Class<? extends ConstraintValidator<?,?>>>
-			getConstraintValidatorClasses();
+	/**
+	 * Immutable list of the constraint validation implementation classes.
+	 *
+	 * @return list of the constraint validation implementation classes.
+	 */
+	List<Class<? extends ConstraintValidator<?, ?>>>
+	getConstraintValidatorClasses();
 
-		/**
-		 * Returns a map containing the annotation parameter names as keys and the
-		 * annotation parameter values as value.
-		 * If this constraint is used as part of a composed constraint, parameter
-		 * values are reflecting the overridden parameters from the main constraint.
-		 *
-		 * @return Returns a map containing the annotation paramter names as keys
-		 *         and the annotation parameter values as value.
-		 */
-		Map<String, Object> getParameters();
+	/**
+	 * Returns a map containing the annotation parameter names as keys and the
+	 * annotation parameter values as value.
+	 * If this constraint is used as part of a composed constraint, parameter
+	 * values are reflecting the overridden parameters from the main constraint.
+	 *
+	 * @return Returns a map containing the annotation paramter names as keys
+	 *         and the annotation parameter values as value.
+	 */
+	Map<String, Object> getParameters();
 
-		/**
-		 * Return a set of composing <code>ConstraintDescriptor</code>s where each
-		 * descriptor describes a composing constraint. <code>ConstraintDescriptor</code>
-		 * instances of composing constraints reflect overridden parameter values in
-		 * {@link #getParameters()}  and {@link #getAnnotation()}.
-		 *
-		 * @return a set of <code>ConstraintDescriptor<code> objects or an empty set
-		 *         in case there are no composing constraints.
-		 */
-		Set<ConstraintDescriptor> getComposingConstraints();
+	/**
+	 * Return a set of composing <code>ConstraintDescriptor</code>s where each
+	 * descriptor describes a composing constraint. <code>ConstraintDescriptor</code>
+	 * instances of composing constraints reflect overridden parameter values in
+	 * {@link #getParameters()}  and {@link #getAnnotation()}.
+	 *
+	 * @return a set of <code>ConstraintDescriptor<code> objects or an empty set
+	 *         in case there are no composing constraints.
+	 */
+	Set<ConstraintDescriptor> getComposingConstraints();
 
-		/**
-		 * @return true if the constraint is annotated with @ReportAsViolationFromCompositeConstraint
-		 */
-		boolean isReportAsViolationFromCompositeConstraint();
-	}
\ No newline at end of file
+	/**
+	 * @return true if the constraint is annotated with @ReportAsViolationFromCompositeConstraint
+	 */
+	boolean isReportAsViolationFromCompositeConstraint();
+}
\ No newline at end of file




More information about the hibernate-commits mailing list