[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