[hibernate-commits] Hibernate SVN: r10638 - in branches/Branch_3_2/HibernateExt/metadata/src: java/org/hibernate/validator/interpolator test/org/hibernate/validator/test/haintegration

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Oct 20 12:31:42 EDT 2006


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
+ */
+ at 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()} );
+	}
+}




More information about the hibernate-commits mailing list