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