[hibernate-commits] Hibernate SVN: r16150 - validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Mar 12 16:41:55 EDT 2009


Author: epbernard
Date: 2009-03-12 16:41:54 -0400 (Thu, 12 Mar 2009)
New Revision: 16150

Added:
   validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MessageInterpolatorContext.java
Modified:
   beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.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/ResourceBundleMessageInterpolator.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java
   validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java
Log:
BVAL-136 Add Context object for MessageInterpolator

Modified: beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java
===================================================================
--- beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java	2009-03-12 19:55:18 UTC (rev 16149)
+++ beanvalidation/trunk/validation-api/src/main/java/javax/validation/MessageInterpolator.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -33,28 +33,39 @@
 	 * See the implementation documentation for more detail.
 	 *
 	 * @param message The message to interpolate.
-	 * @param constraintDescriptor The constraint descriptor.
-	 * @param value The object being validated
+	 * @param context contextual information related to the interpolation
 	 *
 	 * @return Interpolated error message.
 	 */
 	String interpolate(String message,
-					   ConstraintDescriptor<?> constraintDescriptor,
-					   Object value);
+					   Context context);
 
 	/**
 	 * Interpolate the message from the constraint parameters and the actual validated object.
 	 * The Locale used is provided as a parameter
 	 *
 	 * @param message The message to interpolate.
-	 * @param constraintDescriptor The constraint descriptor.
-	 * @param value The object being validated
+	 * @param context contextual information related to the interpolation
 	 * @param locale the locale targeted for the message
 	 *
 	 * @return Interpolated error message.
 	 */
 	String interpolate(String message,
-					   ConstraintDescriptor<?> constraintDescriptor,
-					   Object value,
+					   Context context,
 					   Locale locale);
+
+	/**
+	 * Informations related to the interpolation context
+	 */
+	static interface Context {
+		/**
+		 * @return ConstraintDescriptor corresponding to the constraint being validated
+		 */
+		ConstraintDescriptor<?> getConstraintDescriptor();
+
+		/**
+		 * @return value being validated
+		 */
+		Object getValidatedValue();
+	}
 }

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-03-12 19:55:18 UTC (rev 16149)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ExecutionContext.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -85,7 +85,7 @@
 	/**
 	 * The message resolver which should be used in this context.
 	 */
-	private final MessageInterpolator messageResolver;
+	private final MessageInterpolator messageInterpolator;
 
 	/**
 	 * The constraint factory which should be used in this context.
@@ -97,13 +97,13 @@
 	 */
 	private final TraversableResolver traversableResolver;
 
-	public ExecutionContext(T object, MessageInterpolator messageResolver, ConstraintValidatorFactory constraintValidatorFactory, TraversableResolver traversableResolver) {
-		this( object, object, messageResolver, constraintValidatorFactory, traversableResolver );
+	public ExecutionContext(T object, MessageInterpolator messageInterpolator, ConstraintValidatorFactory constraintValidatorFactory, TraversableResolver traversableResolver) {
+		this( object, object, messageInterpolator, constraintValidatorFactory, traversableResolver );
 	}
 
-	public ExecutionContext(T rootBean, Object object, MessageInterpolator messageResolver, ConstraintValidatorFactory constraintValidatorFactory, TraversableResolver traversableResolver) {
+	public ExecutionContext(T rootBean, Object object, MessageInterpolator messageInterpolator, ConstraintValidatorFactory constraintValidatorFactory, TraversableResolver traversableResolver) {
 		this.rootBean = rootBean;
-		this.messageResolver = messageResolver;
+		this.messageInterpolator = messageInterpolator;
 		this.constraintValidatorFactory = constraintValidatorFactory;
 		this.traversableResolver = traversableResolver;
 
@@ -282,10 +282,9 @@
 	public ConstraintViolationImpl<T> createConstraintViolation(Object value, ErrorMessage error) {
 		ConstraintDescriptor descriptor = currentValidatedProperty.getConstraintDescriptor();
 		String messageTemplate = error.getMessage();
-		String interpolatedMessage = messageResolver.interpolate(
+		String interpolatedMessage = messageInterpolator.interpolate(
 				messageTemplate,
-				descriptor,
-				peekCurrentBean()
+				new MessageInterpolatorContext( descriptor, peekCurrentBean() )
 		);
 		return new ConstraintViolationImpl<T>(
 				messageTemplate,

Added: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MessageInterpolatorContext.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MessageInterpolatorContext.java	                        (rev 0)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/MessageInterpolatorContext.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -0,0 +1,27 @@
+package org.hibernate.validation.engine;
+
+import javax.validation.MessageInterpolator;
+import javax.validation.ConstraintDescriptor;
+
+/**
+ * Takes mandatory elements in the constructor
+ *
+ * @author Emmanuel Bernard
+ */
+public class MessageInterpolatorContext implements MessageInterpolator.Context {
+	private final ConstraintDescriptor<?> constraintDescriptor;
+	private final Object validatedValue;
+
+	public MessageInterpolatorContext(ConstraintDescriptor<?> constraintDescriptor, Object validatedValue) {
+		this.constraintDescriptor = constraintDescriptor;
+		this.validatedValue = validatedValue;
+	}
+
+	public ConstraintDescriptor<?> getConstraintDescriptor() {
+		return constraintDescriptor;
+	}
+
+	public Object getValidatedValue() {
+		return validatedValue;
+	}
+}

Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolator.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolator.java	2009-03-12 19:55:18 UTC (rev 16149)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolator.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -24,7 +24,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import javax.validation.ConstraintDescriptor;
 import javax.validation.MessageInterpolator;
 
 import org.slf4j.Logger;
@@ -87,17 +86,17 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value) {
+	public String interpolate(String message, Context context) {
 		// probably no need for caching, but it could be done by parameters since the map
 		// is immutable and uniquely built per Validation definition, the comparaison has to be based on == and not equals though
-		return interpolateMessage( message, constraintDescriptor.getParameters(), defaultLocale );
+		return interpolateMessage( message, context.getConstraintDescriptor().getParameters(), defaultLocale );
 	}
 
 	/**
 	 * {@inheritDoc}
 	 */
-	public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value, Locale locale) {
-		return interpolateMessage( message, constraintDescriptor.getParameters(), locale );
+	public String interpolate(String message, Context context, Locale locale) {
+		return interpolateMessage( message, context.getConstraintDescriptor().getParameters(), locale );
 	}
 
 	/**

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-03-12 19:55:18 UTC (rev 16149)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/bootstrap/ValidationTest.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -115,11 +115,11 @@
 		configuration = Validation.byDefaultProvider().configure();
 		configuration.messageInterpolator(
 				new MessageInterpolator() {
-					public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value) {
+					public String interpolate(String message, Context context) {
 						return "my custom message";
 					}
 
-					public String interpolate(String message, ConstraintDescriptor<?> constraintDescriptor, Object value, Locale locale) {
+					public String interpolate(String message, Context context, Locale locale) {
 						throw new UnsupportedOperationException( "No specific locale is possible" );
 					}
 				}

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-03-12 19:55:18 UTC (rev 16149)
+++ validator/trunk/hibernate-validator/src/test/java/org/hibernate/validation/engine/ResourceBundleMessageInterpolatorTest.java	2009-03-12 20:41:54 UTC (rev 16150)
@@ -27,6 +27,7 @@
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 import javax.validation.constraints.Max;
+import javax.validation.MessageInterpolator;
 
 import static org.junit.Assert.assertEquals;
 import org.junit.Before;
@@ -63,21 +64,21 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator( new TestResourceBundle() );
-
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 		String expected = "replacement worked";
-		String actual = interpolator.interpolate( "{foo}", descriptor, null );
+		String actual = interpolator.interpolate( "{foo}", context );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "replacement worked replacement worked";
-		actual = interpolator.interpolate( "{foo} {foo}", descriptor, null );
+		actual = interpolator.interpolate( "{foo} {foo}", context );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "This replacement worked just fine";
-		actual = interpolator.interpolate( "This {foo} just fine", descriptor, null );
+		actual = interpolator.interpolate( "This {foo} just fine", context );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "{} { replacement worked }";
-		actual = interpolator.interpolate( "{} { {foo} }", descriptor, null );
+		actual = interpolator.interpolate( "{} { {foo} }", context );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -88,13 +89,14 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator( new TestResourceBundle() );
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 
 		String expected = "foo";  // missing {}
-		String actual = interpolator.interpolate( "foo", descriptor, null );
+		String actual = interpolator.interpolate( "foo", context );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		expected = "#{foo  {}";
-		actual = interpolator.interpolate( "#{foo  {}", descriptor, null );
+		actual = interpolator.interpolate( "#{foo  {}", context );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -105,9 +107,10 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator( new TestResourceBundle() );
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 
 		String expected = "{bar}";  // unkown token {}
-		String actual = interpolator.interpolate( "{bar}", descriptor, null );
+		String actual = interpolator.interpolate( "{bar}", context );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -118,16 +121,18 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator( new TestResourceBundle() );
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 
 		String expected = "may not be null";
-		String actual = interpolator.interpolate( notNull.message(), descriptor, null );
+		String actual = interpolator.interpolate( notNull.message(), context );
 		assertEquals( "Wrong substitution", expected, actual );
 
 		ConstraintDescriptorImpl<Size> sizeDescriptor = new ConstraintDescriptorImpl<Size>(
 				size, new Class<?>[] { }, new ConstraintHelper()
 		);
 		expected = "size must be between 0 and 2147483647";  // unkown token {}
-		actual = interpolator.interpolate( size.message(), sizeDescriptor, null );
+		context = new MessageInterpolatorContext( sizeDescriptor, null );
+		actual = interpolator.interpolate( size.message(), context );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -140,7 +145,8 @@
 		interpolator = new ResourceBundleMessageInterpolator();
 
 		String expected = "kann nicht null sein";
-		String actual = interpolator.interpolate( notNull.message(), descriptor, null, Locale.GERMAN );
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
+		String actual = interpolator.interpolate( notNull.message(), context, Locale.GERMAN );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -151,9 +157,10 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator();
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 
 		String expected = "may not be null";
-		String actual = interpolator.interpolate( notNull.message(), descriptor, null, Locale.JAPAN );
+		String actual = interpolator.interpolate( notNull.message(), context, Locale.JAPAN );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -164,9 +171,10 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator();
+		MessageInterpolator.Context context = new MessageInterpolatorContext( descriptor, null );
 
 		String expected = "no puede ser null";
-		String actual = interpolator.interpolate( notNull.message(), descriptor, null, new Locale( "es", "ES" ) );
+		String actual = interpolator.interpolate( notNull.message(), context, new Locale( "es", "ES" ) );
 		assertEquals( "Wrong substitution", expected, actual );
 	}
 
@@ -186,9 +194,10 @@
 		);
 
 		interpolator = new ResourceBundleMessageInterpolator( new TestResourceBundle() );
+		MessageInterpolator.Context context = new MessageInterpolatorContext( constraintDescriptor, null );
 
 		String expected = "{replace.in.default.bundle2}";
-		String actual = interpolator.interpolate( max.message(), constraintDescriptor, null );
+		String actual = interpolator.interpolate( max.message(), context );
 		assertEquals( "Within default bundle replacement parameter evauation should not be recursive!", expected, actual );
 	}
 




More information about the hibernate-commits mailing list