You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Howard Lewis Ship <hl...@gmail.com> on 2010/01/02 00:16:24 UTC
Re: svn commit: r895090 - in /tapestry/tapestry5/trunk: ./
tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/
tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/
Oops, forgot to update some copyrights!
On Fri, Jan 1, 2010 at 3:15 PM, <hl...@apache.org> 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: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org