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);
+    }
+
 }


Reply via email to