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