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 2012/01/19 21:50:55 UTC

Re: svn commit: r1174941 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/corelib/pages/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/services/ main/java/org/apache/tapestry5/util/ t

Well, perhaps the right approach would have been to deprecate the
existing class and introduce a EnumValueEncoder2 that uses the
TypeCoercer.

On Thu, Jan 19, 2012 at 6:51 AM, Ulrich Stärk <ul...@spielviel.de> wrote:
> I'm only experiencing this now, otherwise I would have spoken up earlier.
>
> This is a backwards-incompatible change of a public API.
>
> Although the fix is trivial it needs to be documented. We (Tapestry devs) probably didn't encounter
> it earlier because we rely on EnumValueEncoderFactory internally, but that's internal API, while the
> EnumValueEncoder itself isn't.
>
> Uli
>p
> On 23.09.2011 20:28, hlship@apache.org wrote:
>> Author: hlship
>> Date: Fri Sep 23 18:28:50 2011
>> New Revision: 1174941
>>
>> URL: http://svn.apache.org/viewvc?rev=1174941&view=rev
>> Log:
>> TAP5-1331: EnumValueEncoder should identify legal values when a non-matching string is passed to it for conversion
>>
>> Modified:
>>     tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
>>     tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EnumValueEncoderFactory.java
>>     tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
>>     tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
>>     tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PaletteDemo.java
>>     tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java Fri Sep 23 18:28:50 2011
>> @@ -1,4 +1,4 @@
>> -// Copyright 2007, 2008 The Apache Software Foundation
>> +// Copyright 2007, 2008, 2011 The Apache Software Foundation
>>  //
>>  // Licensed under the Apache License, Version 2.0 (the "License");
>>  // you may not use this file except in compliance with the License.
>> @@ -21,6 +21,8 @@ import org.apache.tapestry5.ValueEncoder
>>  import org.apache.tapestry5.annotations.Component;
>>  import org.apache.tapestry5.annotations.Environmental;
>>  import org.apache.tapestry5.corelib.components.*;
>> +import org.apache.tapestry5.ioc.annotations.Inject;
>> +import org.apache.tapestry5.ioc.services.TypeCoercer;
>>  import org.apache.tapestry5.services.BeanBlockContribution;
>>  import org.apache.tapestry5.services.BeanBlockSource;
>>  import org.apache.tapestry5.services.PropertyEditContext;
>> @@ -69,7 +71,7 @@ public class PropertyEditBlocks
>>              parameters = {"value=context.propertyValue", "label=prop:context.label", "clientId=prop:context.propertyid",
>>                      "validate=prop:dateFieldValidator"})
>>      private DateField dateField;
>> -
>> +
>>      @SuppressWarnings("unused")
>>      @Component(
>>              parameters = {"value=context.propertyValue", "label=prop:context.label", "clientId=prop:context.propertyid",
>> @@ -90,6 +92,9 @@ public class PropertyEditBlocks
>>      private TextArea textArea;
>>
>>
>> +    @Inject
>> +    private TypeCoercer typeCoercer;
>> +
>>      public PropertyEditContext getContext()
>>      {
>>          return context;
>> @@ -158,7 +163,7 @@ public class PropertyEditBlocks
>>      @SuppressWarnings("unchecked")
>>      public ValueEncoder getValueEncoderForProperty()
>>      {
>> -        return new EnumValueEncoder(context.getPropertyType());
>> +        return new EnumValueEncoder(typeCoercer, context.getPropertyType());
>>      }
>>
>>      /**
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EnumValueEncoderFactory.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EnumValueEncoderFactory.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EnumValueEncoderFactory.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/EnumValueEncoderFactory.java Fri Sep 23 18:28:50 2011
>> @@ -1,4 +1,4 @@
>> -// Copyright 2007 The Apache Software Foundation
>> +// Copyright 2007, 2011 The Apache Software Foundation
>>  //
>>  // Licensed under the Apache License, Version 2.0 (the "License");
>>  // you may not use this file except in compliance with the License.
>> @@ -15,6 +15,7 @@
>>  package org.apache.tapestry5.internal.services;
>>
>>  import org.apache.tapestry5.ValueEncoder;
>> +import org.apache.tapestry5.ioc.services.TypeCoercer;
>>  import org.apache.tapestry5.services.ValueEncoderFactory;
>>  import org.apache.tapestry5.util.EnumValueEncoder;
>>
>> @@ -25,8 +26,15 @@ import org.apache.tapestry5.util.EnumVal
>>   */
>>  public class EnumValueEncoderFactory<E extends Enum<E>> implements ValueEncoderFactory<E>
>>  {
>> +    private final TypeCoercer typeCoercer;
>> +
>> +    public EnumValueEncoderFactory(TypeCoercer typeCoercer)
>> +    {
>> +        this.typeCoercer = typeCoercer;
>> +    }
>> +
>>      public ValueEncoder<E> create(Class<E> type)
>>      {
>> -        return new EnumValueEncoder<E>(type);
>> +        return new EnumValueEncoder<E>(typeCoercer, type);
>>      }
>>  }
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Fri Sep 23 18:28:50 2011
>> @@ -2198,7 +2198,7 @@ public final class TapestryModule
>>      {
>>          configuration.addInstance(Object.class, TypeCoercedValueEncoderFactory.class);
>>          configuration.add(String.class, new StringValueEncoder());
>> -        configuration.add(Enum.class, new EnumValueEncoderFactory());
>> +        configuration.addInstance(Enum.class, EnumValueEncoderFactory.class);
>>      }
>>
>>      /**
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java Fri Sep 23 18:28:50 2011
>> @@ -1,4 +1,4 @@
>> -// Copyright 2007, 2008, 2010 The Apache Software Foundation
>> +// Copyright 2007, 2008, 2010, 2011 The Apache Software Foundation
>>  //
>>  // Licensed under the Apache License, Version 2.0 (the "License");
>>  // you may not use this file except in compliance with the License.
>> @@ -16,17 +16,22 @@ package org.apache.tapestry5.util;
>>
>>  import org.apache.tapestry5.ValueEncoder;
>>  import org.apache.tapestry5.ioc.internal.util.InternalUtils;
>> +import org.apache.tapestry5.ioc.services.TypeCoercer;
>>
>>  /**
>>   * A value encoder that can be used for arbitrary Enum types. The enum name is stored as the client side value.
>>   */
>>  public class EnumValueEncoder<E extends Enum<E>> implements ValueEncoder<E>
>>  {
>> +    private final TypeCoercer typeCoercer;
>> +
>>      private final Class<E> enumType;
>>
>> -    public EnumValueEncoder(final Class<E> enumType)
>> +    public EnumValueEncoder(TypeCoercer typeCoercer, final Class<E> enumType)
>>      {
>>          assert enumType != null;
>> +
>> +        this.typeCoercer = typeCoercer;
>>          this.enumType = enumType;
>>      }
>>
>> @@ -43,7 +48,7 @@ public class EnumValueEncoder<E extends
>>          if (InternalUtils.isBlank(clientValue))
>>              return null;
>>
>> -        return Enum.valueOf(enumType, clientValue);
>> +        return typeCoercer.coerce(clientValue, enumType);
>>      }
>>
>>  }
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PaletteDemo.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PaletteDemo.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PaletteDemo.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/PaletteDemo.java Fri Sep 23 18:28:50 2011
>> @@ -20,6 +20,7 @@ import org.apache.tapestry5.ValueEncoder
>>  import org.apache.tapestry5.annotations.Persist;
>>  import org.apache.tapestry5.integration.app1.data.ProgrammingLanguage;
>>  import org.apache.tapestry5.ioc.annotations.Inject;
>> +import org.apache.tapestry5.ioc.services.TypeCoercer;
>>  import org.apache.tapestry5.util.EnumSelectModel;
>>  import org.apache.tapestry5.util.EnumValueEncoder;
>>
>> @@ -36,6 +37,9 @@ public class PaletteDemo
>>      @Persist
>>      private boolean reorder;
>>
>> +    @Inject
>> +    private TypeCoercer typeCoercer;
>> +
>>      public boolean isReorder()
>>      {
>>          return reorder;
>> @@ -64,7 +68,7 @@ public class PaletteDemo
>>      @SuppressWarnings("unchecked")
>>      public ValueEncoder getLanguageEncoder()
>>      {
>> -        return new EnumValueEncoder(ProgrammingLanguage.class);
>> +        return new EnumValueEncoder(typeCoercer, ProgrammingLanguage.class);
>>      }
>>
>>      void onActionFromReset()
>>
>> Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java
>> URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java?rev=1174941&r1=1174940&r2=1174941&view=diff
>> ==============================================================================
>> --- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java (original)
>> +++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/SelectZoneDemo.java Fri Sep 23 18:28:50 2011
>> @@ -13,9 +13,6 @@
>>  // limitations under the License.
>>  package org.apache.tapestry5.integration.app1.pages;
>>
>> -import java.util.Arrays;
>> -import java.util.List;
>> -
>>  import org.apache.tapestry5.Block;
>>  import org.apache.tapestry5.SelectModel;
>>  import org.apache.tapestry5.ValueEncoder;
>> @@ -24,9 +21,13 @@ import org.apache.tapestry5.annotations.
>>  import org.apache.tapestry5.integration.app1.data.CarMaker;
>>  import org.apache.tapestry5.ioc.Messages;
>>  import org.apache.tapestry5.ioc.annotations.Inject;
>> +import org.apache.tapestry5.ioc.services.TypeCoercer;
>>  import org.apache.tapestry5.util.EnumSelectModel;
>>  import org.apache.tapestry5.util.EnumValueEncoder;
>>
>> +import java.util.Arrays;
>> +import java.util.List;
>> +
>>  public class SelectZoneDemo
>>  {
>>
>> @@ -49,6 +50,10 @@ public class SelectZoneDemo
>>      @Persist
>>      private List<String> availableModels;
>>
>> +    @Inject
>> +    private TypeCoercer typeCoercer;
>> +
>> +
>>      public Object onValueChanged(final CarMaker maker)
>>      {
>>          availableModels = findAvailableModels(maker);
>> @@ -78,7 +83,7 @@ public class SelectZoneDemo
>>
>>      public ValueEncoder<CarMaker> getMakeEncoder()
>>      {
>> -        return new EnumValueEncoder<CarMaker>(CarMaker.class);
>> +        return new EnumValueEncoder<CarMaker>(typeCoercer, CarMaker.class);
>>      }
>>
>>  }
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: dev-help@tapestry.apache.org
>



-- 
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


Re: svn commit: r1174941 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/corelib/pages/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/services/ main/java/org/apache/tapestry5/util/ t

Posted by Massimo Lusetti <ml...@gmail.com>.
On Thu, Jan 19, 2012 at 9:50 PM, Howard Lewis Ship <hl...@gmail.com> wrote:

> Well, perhaps the right approach would have been to deprecate the
> existing class and introduce a EnumValueEncoder2 that uses the
> TypeCoercer.

TypeCoercer is inner enough that seems a good fit...

-- 
Massimo
http://meridio.blogspot.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org