Author: epbernard
Date: 2006-10-20 12:31:39 -0400 (Fri, 20 Oct 2006)
New Revision: 10638
Added:
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/Building.java
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/InterpolationTest.java
Modified:
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java
Log:
ANN-471 lazily resolve default message
ANN-458 left unresolved key unchanged
Modified:
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java
===================================================================
---
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java 2006-10-20
10:07:59 UTC (rev 10637)
+++
branches/Branch_3_2/HibernateExt/metadata/src/java/org/hibernate/validator/interpolator/DefaultMessageInterpolator.java 2006-10-20
16:31:39 UTC (rev 10638)
@@ -63,8 +63,8 @@
if (annotationMessage == null) {
throw new IllegalArgumentException( "Annotation " + clazz + " does not
have an (accessible) message attribute");
}
- interpolateMessage = replace( annotationMessage );
- }
+ //do not resolve the property eagerly to allow validator.apply to work wo interpolator
+ }
private String replace(String message) {
StringTokenizer tokens = new StringTokenizer( message, "#{}", true );
@@ -104,11 +104,8 @@
string = defaultMessageBundle.getString( token );
}
catch( MissingResourceException e) {
- throw new MissingResourceException(
- "Can't find resource in validator bundles, key " + token,
- defaultMessageBundle.getClass().getName(),
- token
- );
+ //return the unchanged string
+ buf.append('{').append(token).append('}');
}
}
if ( string != null ) buf.append( replace( string ) );
@@ -121,7 +118,10 @@
public String interpolate(String message, Validator validator, MessageInterpolator
defaultInterpolator) {
if ( annotationMessage.equals( message ) ) {
//short cut
- return interpolateMessage;
+ if (interpolateMessage == null) {
+ interpolateMessage = replace( annotationMessage );
+ }
+ return interpolateMessage;
}
else {
//TODO keep them in a weak hash map, but this might not even be useful
Added:
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/Building.java
===================================================================
---
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/Building.java 2006-10-20
10:07:59 UTC (rev 10637)
+++
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/Building.java 2006-10-20
16:31:39 UTC (rev 10638)
@@ -0,0 +1,38 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import org.hibernate.validator.NotNull;
+import org.hibernate.validator.Length;
+
+/**
+ * @author Emmanuel Bernard
+ */
+@Entity
+public class Building {
+ @Id
+ @GeneratedValue private Long id;
+
+ @Length(min=1, message = "{notpresent.Key} and #{key.notPresent} and
{key.notPresent2} {min}")
+ private String address;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+}
Modified:
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java
===================================================================
---
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java 2006-10-20
10:07:59 UTC (rev 10637)
+++
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/EmbeddedObjectTest.java 2006-10-20
16:31:39 UTC (rev 10638)
@@ -3,8 +3,15 @@
import org.hibernate.Session;
import org.hibernate.Transaction;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.cfg.Configuration;
import org.hibernate.test.annotations.TestCase;
import org.hibernate.validator.ClassValidator;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.event.ValidatePreInsertEventListener;
+import org.hibernate.validator.event.ValidatePreUpdateEventListener;
+import org.hibernate.validator.test.PrefixMessageInterpolator;
/**
* @author Emmanuel Bernard
@@ -34,4 +41,11 @@
CreditCard.class
};
}
+
+ protected void configure(Configuration cfg) {
+ cfg.getEventListeners()
+ .setPreInsertEventListeners( new PreInsertEventListener[]{new
ValidatePreInsertEventListener()} );
+ cfg.getEventListeners()
+ .setPreUpdateEventListeners( new PreUpdateEventListener[]{new
ValidatePreUpdateEventListener()} );
+ }
}
Added:
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/InterpolationTest.java
===================================================================
---
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/InterpolationTest.java 2006-10-20
10:07:59 UTC (rev 10637)
+++
branches/Branch_3_2/HibernateExt/metadata/src/test/org/hibernate/validator/test/haintegration/InterpolationTest.java 2006-10-20
16:31:39 UTC (rev 10638)
@@ -0,0 +1,70 @@
+//$Id: $
+package org.hibernate.validator.test.haintegration;
+
+import java.util.MissingResourceException;
+
+import org.hibernate.test.annotations.TestCase;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.event.PreInsertEventListener;
+import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.validator.InvalidStateException;
+import org.hibernate.validator.Environment;
+import org.hibernate.validator.event.ValidatePreInsertEventListener;
+import org.hibernate.validator.event.ValidatePreUpdateEventListener;
+import org.hibernate.validator.test.PrefixMessageInterpolator;
+
+/**
+ * @author Emmanuel Bernard
+ */
+public class InterpolationTest extends TestCase {
+ public void testMissingKey() {
+ Session s = openSession();
+ Transaction tx = s.beginTransaction();
+ Building b = new Building();
+ b.setAddress( "2323 Younge St");
+ try {
+ s.persist( b );
+ s.flush();
+ }
+ catch (MissingResourceException e) {
+ fail("message should be interpolated lazily in
DefaultMessageInterpolator");
+ }
+ tx.rollback();
+ s.close();
+
+ s = openSession();
+ tx = s.beginTransaction();
+ b = new Building();
+ b.setAddress("");
+ boolean failure = false;
+ try {
+ s.persist( b );
+ s.flush();
+ fail("Insert should fail");
+ }
+ catch (InvalidStateException e) {
+ assertEquals( "Missing key should be left unchanged",
+ "{notpresent.Key} and #{key.notPresent} and {key.notPresent2}
1",
+ e.getInvalidValues()[0].getMessage() );
+ failure = true;
+ }
+ assertTrue( "No invalid state found", failure );
+ tx.rollback();
+ s.close();
+ }
+
+ protected Class[] getMappings() {
+ return new Class[] {
+ Building.class
+ };
+ }
+
+ protected void configure(Configuration cfg) {
+ cfg.getEventListeners()
+ .setPreInsertEventListeners( new PreInsertEventListener[]{new
ValidatePreInsertEventListener()} );
+ cfg.getEventListeners()
+ .setPreUpdateEventListeners( new PreUpdateEventListener[]{new
ValidatePreUpdateEventListener()} );
+ }
+}
Show replies by date