You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/03/14 22:26:16 UTC

svn commit: r637271 - /tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java

Author: hlship
Date: Fri Mar 14 14:26:16 2008
New Revision: 637271

URL: http://svn.apache.org/viewvc?rev=637271&view=rev
Log:
TAPESTRY-2260: Null relationships cause an NPE inside Hibernate when being value encoded by RadioGroup

Modified:
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java

Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java?rev=637271&r1=637270&r2=637271&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry/internal/hibernate/HibernateEntityValueEncoder.java Fri Mar 14 14:26:16 2008
@@ -14,46 +14,55 @@
 
 package org.apache.tapestry.internal.hibernate;
 
-import java.io.Serializable;
-
 import org.apache.tapestry.ValueEncoder;
 import org.apache.tapestry.ioc.internal.util.Defense;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
 import org.apache.tapestry.ioc.services.TypeCoercer;
 import org.hibernate.Session;
 import org.hibernate.mapping.PersistentClass;
 import org.hibernate.mapping.Property;
 import org.hibernate.property.Getter;
 
+import java.io.Serializable;
+
 public final class HibernateEntityValueEncoder<E> implements ValueEncoder<E> {
-	private final Class<E> _entityClass;
-	private final PersistentClass _persistentClass;
-	private final Session _session;
-	private final TypeCoercer _typeCoercer;
-	private final Getter _idGetter;
-	
-	public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass persistentClass, Session session, TypeCoercer typeCoercer) {
-		super();
-		_entityClass = entityClass;
-		_persistentClass = persistentClass;
-		_session = session;
-		_typeCoercer = typeCoercer;
-		
-		Property property = _persistentClass.getIdentifierProperty();
-		_idGetter = property.getPropertyAccessor(_entityClass).getGetter(_entityClass, property.getName());
-	}
-		
-	public String toClient(E value) {
-		Object id = _idGetter.get(value);
-		return _typeCoercer.coerce(id, String.class);
-	}
-
-	@SuppressWarnings("unchecked")
-	public E toValue(String clientValue) {
-		Class<?> idType = _idGetter.getReturnType();
-		
-		Object id = _typeCoercer.coerce(clientValue, idType);
-		Serializable ser = Defense.cast(id, Serializable.class, "id");
-		return (E)_session.get(_entityClass, ser);
-	}
-	
+    private final Class<E> _entityClass;
+    private final PersistentClass _persistentClass;
+    private final Session _session;
+    private final TypeCoercer _typeCoercer;
+    private final Getter _idGetter;
+
+    public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass persistentClass, Session session, TypeCoercer typeCoercer) {
+        super();
+        _entityClass = entityClass;
+        _persistentClass = persistentClass;
+        _session = session;
+        _typeCoercer = typeCoercer;
+
+        Property property = _persistentClass.getIdentifierProperty();
+        _idGetter = property.getPropertyAccessor(_entityClass).getGetter(_entityClass, property.getName());
+    }
+
+    public String toClient(E value) {
+
+        if (value == null) return null;
+
+        Object id = _idGetter.get(value);
+
+        return _typeCoercer.coerce(id, String.class);
+    }
+
+    @SuppressWarnings("unchecked")
+    public E toValue(String clientValue) {
+
+        if (InternalUtils.isBlank(clientValue)) return null;
+
+
+        Class<?> idType = _idGetter.getReturnType();
+
+        Object id = _typeCoercer.coerce(clientValue, idType);
+        Serializable ser = Defense.cast(id, Serializable.class, "id");
+        return (E) _session.get(_entityClass, ser);
+    }
+
 }