Oops, forgot to update some copyrights! On Fri, Jan 1, 2010 at 3:15 PM, <[email protected]> wrote: > Author: hlship > Date: Fri Jan 1 23:15:08 2010 > New Revision: 895090 > > URL: http://svn.apache.org/viewvc?rev=895090&view=rev > Log: > TAP5-944: When a ValueEncoder is unable to convert an id to a entity, it > should wrap the underlying type coercion exception to describe the input and > expected output type > > Modified: > tapestry/tapestry5/trunk/.gitignore > > tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java > > tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java > > Modified: tapestry/tapestry5/trunk/.gitignore > URL: > http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/.gitignore?rev=895090&r1=895089&r2=895090&view=diff > ============================================================================== > --- tapestry/tapestry5/trunk/.gitignore (original) > +++ tapestry/tapestry5/trunk/.gitignore Fri Jan 1 23:15:08 2010 > @@ -7,3 +7,4 @@ > *.iws > target > test-output > +temp-testng*.xml > \ No newline at end of file > > Modified: > tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java > URL: > http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java?rev=895090&r1=895089&r2=895090&view=diff > ============================================================================== > --- > tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java > (original) > +++ > tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java > Fri Jan 1 23:15:08 2010 > @@ -41,8 +41,8 @@ > > private final Logger logger; > > - public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass > persistentClass, Session session, > - PropertyAccess propertyAccess, > TypeCoercer typeCoercer, Logger logger) > + public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass > persistentClass, > + Session session, PropertyAccess propertyAccess, TypeCoercer > typeCoercer, Logger logger) > { > this.entityClass = entityClass; > this.session = session; > @@ -53,20 +53,23 @@ > > idPropertyName = property.getName(); > > - propertyAdapter = > propertyAccess.getAdapter(this.entityClass).getPropertyAdapter(idPropertyName); > + propertyAdapter = > propertyAccess.getAdapter(this.entityClass).getPropertyAdapter( > + idPropertyName); > } > > - > public String toClient(E value) > { > - if (value == null) return null; > + if (value == null) > + return null; > > Object id = propertyAdapter.get(value); > > if (id == null) > - throw new IllegalStateException(String.format( > - "Entity %s has an %s property of null; this probably > means that it has not been persisted yet.", > - value, idPropertyName)); > + throw new IllegalStateException( > + String > + .format( > + "Entity %s has an %s property of null; > this probably means that it has not been persisted yet.", > + value, idPropertyName)); > > return typeCoercer.coerce(id, String.class); > } > @@ -74,9 +77,23 @@ > @SuppressWarnings("unchecked") > public E toValue(String clientValue) > { > - if (InternalUtils.isBlank(clientValue)) return null; > + if (InternalUtils.isBlank(clientValue)) > + return null; > + > + Object id = null; > + > + try > + { > > - Object id = typeCoercer.coerce(clientValue, > propertyAdapter.getType()); > + id = typeCoercer.coerce(clientValue, propertyAdapter.getType()); > + } > + catch (Exception ex) > + { > + throw new RuntimeException(String.format( > + "Exception converting '%s' to instance of %s (id type > for entity %s): %s", > + clientValue, propertyAdapter.getType().getName(), > entityClass.getName(), > + InternalUtils.toMessage(ex)), ex); > + } > > Serializable ser = Defense.cast(id, Serializable.class, "id"); > > @@ -84,8 +101,10 @@ > > if (result == null) > { > - // We don't identify the entity type in the message because the > logger is based on the entity type. > - logger.error(String.format("Unable to convert client value '%s' > into an entity instance.", clientValue)); > + // We don't identify the entity type in the message because the > logger is based on the > + // entity type. > + logger.error(String.format( > + "Unable to convert client value '%s' into an entity > instance.", clientValue)); > } > > return result; > > Modified: > tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java > URL: > http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java?rev=895090&r1=895089&r2=895090&view=diff > ============================================================================== > --- > tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java > (original) > +++ > tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java > Fri Jan 1 23:15:08 2010 > @@ -68,7 +68,6 @@ > HibernateEntityValueEncoder<SampleEntity> encoder = new > HibernateEntityValueEncoder<SampleEntity>( > SampleEntity.class, persistentClass, session, access, > typeCoercer, logger); > > - > try > { > encoder.toClient(entity); > @@ -76,8 +75,9 @@ > } > catch (IllegalStateException ex) > { > - assertMessageContains(ex, "Entity > org.apache.tapestry5.internal.hibernate.SampleEntity", > - "has an id property of null"); > + assertMessageContains(ex, > + "Entity > org.apache.tapestry5.internal.hibernate.SampleEntity", > + "has an id property of null"); > } > > verify(); > @@ -104,11 +104,42 @@ > HibernateEntityValueEncoder<SampleEntity> encoder = new > HibernateEntityValueEncoder<SampleEntity>( > SampleEntity.class, persistentClass, session, access, > typeCoercer, logger); > > - > assertNull(encoder.toValue("12345")); > > verify(); > + } > + > + �...@test > + public void to_value_bad_type_coercion() > + { > + Session session = mockSession(); > + Logger logger = mockLogger(); > + > + replay(); > > + RootClass persistentClass = new RootClass(); > + Property idProperty = new Property(); > + idProperty.setName("id"); > + persistentClass.setIdentifierProperty(idProperty); > + > + HibernateEntityValueEncoder<SampleEntity> encoder = new > HibernateEntityValueEncoder<SampleEntity>( > + SampleEntity.class, persistentClass, session, access, > typeCoercer, logger); > + > + try > + { > + encoder.toValue("xyz"); > + unreachable(); > + } > + catch (RuntimeException ex) > + { > + assertMessageContains( > + ex, > + "Exception converting 'xyz' to instance of > java.lang.Long (id type for entity > org.apache.tapestry5.internal.hibernate.SampleEntity)"); > + } > + > + assertNull(encoder.toValue("")); > + > + verify(); > } > > protected final Session mockSession() > > >
-- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
