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/01/17 21:09:52 UTC

svn commit: r612958 - in /tapestry/tapestry5/trunk: ./ tapestry-core/src/main/java/org/apache/tapestry/ tapestry-core/src/main/java/org/apache/tapestry/internal/services/ tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ tapestry-cor...

Author: hlship
Date: Thu Jan 17 12:09:49 2008
New Revision: 612958

URL: http://svn.apache.org/viewvc?rev=612958&view=rev
Log:
TAPESTRY-1739: Add byte, short and float Translators

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ByteTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/DoubleTranslator.java
      - copied, changed from r594319, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/FloatTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/StringTranslator.java
      - copied, changed from r594319, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/StringTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImplTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/translator/
Removed:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/StringTranslator.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/translator/DoubleTranslatorTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/translator/IntegerTranslatorTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/translator/LongTranslatorTest.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/translator/StringTranslatorTest.java
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/Translator.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/FieldValidationSupportImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/FieldValidationSupport.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TranslatorDefaultSource.java
    tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/FieldValidationSupportImplTest.java
    tapestry/tapestry5/trunk/tapestry5.ipr

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/Translator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/Translator.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/Translator.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/Translator.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2008 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.
@@ -27,11 +27,11 @@
 public interface Translator<T>
 {
     /**
-     * Converts a server-side value to a client-side string. This allows for formatting of the value
-     * in a way appropriate to the end user. The output client value should be parsable by
-     * {@link #parseClient(String, Messages)}.
+     * Converts a server-side value to a client-side string. This allows for formatting of the value in a way
+     * appropriate to the end user. The output client value should be parsable by {@link #parseClient(String,
+     * Messages)}.
      *
-     * @param value the server side value (which may be null)
+     * @param value the server side value (which will not be null)
      * @return client-side value to present to the user
      */
     String toClient(T value);
@@ -39,7 +39,7 @@
     /**
      * Converts a submitted request value into an appropriate server side value.
      *
-     * @param clientValue (possibly null or the empty string)
+     * @param clientValue to convert to a server value; this will not be the empty string or null
      * @param messages    validator messages assembled by {@link ValidationMessagesSource}
      * @return equivalent server-side value (possibly null)
      * @throws ValidationException if the value can not be parsed

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/FieldValidationSupportImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/FieldValidationSupportImpl.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/FieldValidationSupportImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/FieldValidationSupportImpl.java Thu Jan 17 12:09:49 2008
@@ -18,6 +18,7 @@
 import org.apache.tapestry.corelib.internal.InternalMessages;
 import org.apache.tapestry.internal.util.Holder;
 import org.apache.tapestry.ioc.Messages;
+import org.apache.tapestry.ioc.internal.util.InternalUtils;
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.runtime.ComponentEventException;
 import org.apache.tapestry.services.FieldValidationSupport;
@@ -39,6 +40,8 @@
     @SuppressWarnings({"unchecked"})
     public String toClient(Object value, ComponentResources componentResources, Translator translator)
     {
+        if (value == null) return null;
+
         final Holder<String> resultHolder = Holder.create();
 
         ComponentEventCallback callback = new ComponentEventCallback()
@@ -61,6 +64,7 @@
 
         if (resultHolder.hasValue()) return resultHolder.get();
 
+
         return translator.toClient(value);
 
     }
@@ -68,6 +72,8 @@
     public Object parseClient(String clientValue, ComponentResources componentResources, Translator translator)
             throws ValidationException
     {
+        if (InternalUtils.isBlank(clientValue)) return null;
+
         final Holder<Object> resultHolder = Holder.create();
 
         ComponentEventCallback callback = new ComponentEventCallback()

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImpl.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImpl.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 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.
@@ -30,7 +30,7 @@
         _registry = StrategyRegistry.newInstance(Translator.class, configuration);
     }
 
-    public Translator find(Class valueType)
+    public Translator get(Class valueType)
     {
         return _registry.get(valueType);
     }

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ByteTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ByteTranslator.java?rev=612958&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ByteTranslator.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/ByteTranslator.java Thu Jan 17 12:09:49 2008
@@ -0,0 +1,39 @@
+// Copyright 2008 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.translator;
+
+import org.apache.tapestry.Translator;
+import org.apache.tapestry.ValidationException;
+import org.apache.tapestry.ioc.Messages;
+
+public class ByteTranslator implements Translator<Byte>
+{
+    public String toClient(Byte value)
+    {
+        return value.toString();
+    }
+
+    public Byte parseClient(String clientValue, Messages messages) throws ValidationException
+    {
+        try
+        {
+            return new Byte(clientValue.trim());
+        }
+        catch (NumberFormatException ex)
+        {
+            throw new ValidationException(messages.format("integer-format-exception", clientValue));
+        }
+    }
+}

Copied: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/DoubleTranslator.java (from r594319, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/DoubleTranslator.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/DoubleTranslator.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java&r1=594319&r2=612958&rev=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/DoubleTranslator.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/DoubleTranslator.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 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.
@@ -12,12 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.translator;
+package org.apache.tapestry.internal.translator;
 
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
-import org.apache.tapestry.ioc.internal.util.InternalUtils;
 
 public class DoubleTranslator implements Translator<Double>
 {
@@ -28,9 +27,6 @@
      */
     public Double parseClient(String clientValue, Messages messages) throws ValidationException
     {
-        if (InternalUtils.isBlank(clientValue))
-            return null;
-
         try
         {
             return new Double(clientValue.trim());
@@ -46,6 +42,6 @@
      */
     public String toClient(Double value)
     {
-        return value == null ? "" : value.toString();
+        return value.toString();
     }
 }

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/FloatTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/FloatTranslator.java?rev=612958&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/FloatTranslator.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/FloatTranslator.java Thu Jan 17 12:09:49 2008
@@ -0,0 +1,39 @@
+// Copyright 2008 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.translator;
+
+import org.apache.tapestry.Translator;
+import org.apache.tapestry.ValidationException;
+import org.apache.tapestry.ioc.Messages;
+
+public class FloatTranslator implements Translator<Float>
+{
+    public String toClient(Float value)
+    {
+        return value.toString();
+    }
+
+    public Float parseClient(String clientValue, Messages messages) throws ValidationException
+    {
+        try
+        {
+            return new Float(clientValue.trim());
+        }
+        catch (NumberFormatException ex)
+        {
+            throw new ValidationException(messages.format("number-format-exception", clientValue));
+        }
+    }
+}

Copied: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/StringTranslator.java (from r594319, tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/StringTranslator.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/StringTranslator.java?p2=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/StringTranslator.java&p1=tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/StringTranslator.java&r1=594319&r2=612958&rev=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/translator/StringTranslator.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/translator/StringTranslator.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 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.
@@ -12,12 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package org.apache.tapestry.translator;
+package org.apache.tapestry.internal.translator;
 
 import org.apache.tapestry.Translator;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.ioc.Messages;
-import org.apache.tapestry.ioc.internal.util.InternalUtils;
 
 public class StringTranslator implements Translator<String>
 {
@@ -26,15 +25,15 @@
      */
     public String parseClient(String clientValue, Messages messages) throws ValidationException
     {
-        return InternalUtils.isBlank(clientValue) ? null : clientValue;
+        return clientValue;
     }
 
     /**
-     * Returns the value, or the empty string if value is null.
+     * Returns the value.
      */
     public String toClient(String value)
     {
-        return value == null ? "" : value;
+        return value;
     }
 
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/FieldValidationSupport.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/FieldValidationSupport.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/FieldValidationSupport.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/FieldValidationSupport.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 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.
@@ -20,29 +20,32 @@
 import org.apache.tapestry.ValidationException;
 
 /**
- * Services to help with field {@linkplain org.apache.tapestry.Validator validation} and
- * {@linkplain org.apache.tapestry.Translator translation}. This service encapsulates
- * the logic that mixes normal configured/declared validation/translation with
- * events triggered on the component.
+ * Services to help with field {@linkplain org.apache.tapestry.Validator validation} and {@linkplain
+ * org.apache.tapestry.Translator translation}. This service encapsulates the logic that mixes normal
+ * configured/declared validation/translation with events triggered on the component.
  */
 public interface FieldValidationSupport
 {
     /**
-     * A wrapper around {@link org.apache.tapestry.Translator#toClient(Object)} that first
-     * fires a "toclient" event on the component to see if it can perform the conversion.
+     * A wrapper around {@link org.apache.tapestry.Translator#toClient(Object)} that first fires a "toclient" event on
+     * the component to see if it can perform the conversion. If the value is null, then no event is fired and the
+     * translator is <em>not</em> invoked, the return value is simply null.
      *
      * @param value              to be converted to a client-side string
      * @param componentResources used to fire events on the component
      * @param translator         used if the component does not provide a non-null value
-     * @return the translated value
+     * @return the translated value  or null if the value is null
      */
     String toClient(Object value, ComponentResources componentResources, Translator translator);
 
     /**
      * A wrapper around {@link org.apache.tapestry.Translator#parseClient(String, org.apache.tapestry.ioc.Messages)}.
      * First a "parseclient" event is fired; the translator is only invoked if that returns null.
+     * <p/>
+     * If the client value is null or blank, then no event is fired and the translator is not invoked.  Instead, the
+     * return value is null.
      *
-     * @param clientValue        the value provided by the client (may be null)
+     * @param clientValue        the value provided by the client (not null or blank)
      * @param componentResources used to trigger events
      * @param translator         translator that will do the work if the component event returns null
      * @return the input parsed to an object
@@ -53,10 +56,10 @@
             throws ValidationException;
 
     /**
-     * Performs validation on a parsed value from the client.  Normal validations occur first,
-     * then a "validate" event is triggered on the component.
+     * Performs validation on a parsed value from the client.  Normal validations occur first, then a "validate" event
+     * is triggered on the component.
      *
-     * @param value              parsed value from the client
+     * @param value              parsed value from the client, possibly null
      * @param componentResources used to trigger events
      * @param validator          performs normal validations
      * @throws ValidationException if the value is not valid

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TapestryModule.java Thu Jan 17 12:09:49 2008
@@ -29,6 +29,7 @@
 import org.apache.tapestry.internal.grid.CollectionGridDataSource;
 import org.apache.tapestry.internal.grid.NullDataSource;
 import org.apache.tapestry.internal.services.*;
+import org.apache.tapestry.internal.translator.*;
 import org.apache.tapestry.internal.util.IntegerRange;
 import org.apache.tapestry.ioc.*;
 import static org.apache.tapestry.ioc.IOCConstants.PERTHREAD_SCOPE;
@@ -42,10 +43,6 @@
 import org.apache.tapestry.runtime.Component;
 import org.apache.tapestry.runtime.ComponentResourcesAware;
 import org.apache.tapestry.runtime.RenderCommand;
-import org.apache.tapestry.translator.DoubleTranslator;
-import org.apache.tapestry.translator.IntegerTranslator;
-import org.apache.tapestry.translator.LongTranslator;
-import org.apache.tapestry.translator.StringTranslator;
 import org.apache.tapestry.util.StringToEnumCoercion;
 import org.apache.tapestry.validator.*;
 import org.slf4j.Logger;
@@ -511,20 +508,22 @@
 
 
     /**
-     * Contributes the basic set of default translators: <ul> <li>Integer</li> <li>String</li> <li>Long</li>
-     * <li>Double</li> </li>
+     * Contributes the basic set of default translators: <ul> <li>String</li> <li>Byte</li> <li>Integer</li>
+     * <li>Long</li> <li>Float</li> <li>Double</li> </li>
      */
     public static void contributeTranslatorDefaultSource(MappedConfiguration<Class, Translator> configuration)
     {
-        configuration.add(Integer.class, new IntegerTranslator());
         configuration.add(String.class, new StringTranslator());
+        configuration.add(Byte.class, new ByteTranslator());
+        configuration.add(Integer.class, new IntegerTranslator());
         configuration.add(Long.class, new LongTranslator());
+        configuration.add(Float.class, new FloatTranslator());
         configuration.add(Double.class, new DoubleTranslator());
     }
 
     /**
-     * Contributes the basic set of named translators: <ul> <li>integer</li> <li>string</li> <li>long</li>
-     * <li>double</li> </ul>
+     * Contributes the basic set of named translators: <ul>  <li>string</li>  <li>byte</li> <li>integer</li>
+     * <li>long</li> <li>float</li> <li>double</li> </ul>
      */
     public static void contributeTranslatorSource(MappedConfiguration<String, Translator> configuration)
     {
@@ -533,9 +532,11 @@
         // organized (perhaps they should be joined together into a single service, where we
         // identify a name and a match type).
 
-        configuration.add("integer", new IntegerTranslator());
         configuration.add("string", new StringTranslator());
+        configuration.add("byte", new ByteTranslator());
+        configuration.add("integer", new IntegerTranslator());
         configuration.add("long", new LongTranslator());
+        configuration.add("float", new FloatTranslator());
         configuration.add("double", new DoubleTranslator());
     }
 

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TranslatorDefaultSource.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TranslatorDefaultSource.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TranslatorDefaultSource.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/services/TranslatorDefaultSource.java Thu Jan 17 12:09:49 2008
@@ -1,4 +1,4 @@
-// Copyright 2007 The Apache Software Foundation
+// Copyright 2007, 2008 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.
@@ -18,19 +18,18 @@
 import org.apache.tapestry.Translator;
 
 /**
- * Used by certain form-control element component to obtain a default translator appropriate to the
- * type of property editted by the component.
+ * Used by certain form-control element component to obtain a default translator appropriate to the type of property
+ * editted by the component.
  */
 public interface TranslatorDefaultSource
 {
     /**
-     * Finds a {@link Translator} that is appropriate to the given type, which is usually obtained
-     * via {@link Binding#getBindingType()}. Performs an inheritanced-based search for the best
-     * match.
+     * Finds a {@link Translator} that is appropriate to the given type, which is usually obtained via {@link
+     * Binding#getBindingType()}. Performs an inheritanced-based search for the best match.
      *
      * @param valueType the type of value for which a default translator is needed
      * @return the matching translator
      * @throws IllegalArgumentException if no translator may be found
      */
-    Translator find(Class valueType);
+    Translator get(Class valueType);
 }

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml Thu Jan 17 12:09:49 2008
@@ -37,7 +37,6 @@
             <package name="org.apache.tapestry.services"/>
             <package name="org.apache.tapestry.util"/>
             <package name="org.apache.tapestry.runtime"/>
-            <package name="org.apache.tapestry.translator"/>
             <package name="org.apache.tapestry.validator"/>
         </packages>
     </test>
@@ -53,6 +52,7 @@
             <package name="org.apache.tapestry.internal.bindings"/>
             <package name="org.apache.tapestry.internal.model"/>
             <package name="org.apache.tapestry.internal.test"/>
+            <package name="org.apache.tapestry.internal.translator"/>
         </packages>
     </test>
 </suite>

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/FieldValidationSupportImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/FieldValidationSupportImplTest.java?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/FieldValidationSupportImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/FieldValidationSupportImplTest.java Thu Jan 17 12:09:49 2008
@@ -72,6 +72,42 @@
         verify();
     }
 
+    @Test
+    public void to_client_for_null_value_returns_null_and_bypasses_events_and_translator() throws Exception
+    {
+        ComponentResources resources = mockComponentResources();
+        Translator translator = mockTranslator();
+        ValidationMessagesSource source = mockValidationMessagesSource();
+
+        replay();
+
+
+        FieldValidationSupport support = new FieldValidationSupportImpl(source);
+
+        assertNull(support.parseClient(null, resources, translator));
+
+
+        verify();
+    }
+
+    @Test
+    public void parse_client_for_blank_string_returns_null_and_bypasses_events_and_translator() throws Exception
+    {
+        ComponentResources resources = mockComponentResources();
+        Translator translator = mockTranslator();
+        ValidationException ve = new ValidationException("Just didn't feel right.");
+        ValidationMessagesSource source = mockValidationMessagesSource();
+
+
+        replay();
+
+        FieldValidationSupport support = new FieldValidationSupportImpl(source);
+
+        assertNull(support.parseClient("", resources, translator));
+
+        verify();
+    }
+
     @SuppressWarnings({"ThrowableInstanceNeverThrown"})
     @Test
     public void parse_client_event_handler_throws_validation_exception() throws Exception

Added: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImplTest.java?rev=612958&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImplTest.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/TranslatorDefaultSourceImplTest.java Thu Jan 17 12:09:49 2008
@@ -0,0 +1,138 @@
+// Copyright 2008 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.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.Translator;
+import org.apache.tapestry.ValidationException;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.services.TranslatorDefaultSource;
+import org.apache.tapestry.services.ValidationMessagesSource;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.Locale;
+
+/**
+ * Actually, a test for the source and for all of the built-in translators.
+ */
+public class TranslatorDefaultSourceImplTest extends InternalBaseTestCase
+{
+    private TranslatorDefaultSource _source;
+    private ValidationMessagesSource _messagesSource;
+
+    @BeforeClass
+    public void setup()
+    {
+        _source = getService(TranslatorDefaultSource.class);
+        _messagesSource = getService(ValidationMessagesSource.class);
+    }
+
+    @DataProvider(name = "to_client_data")
+    public Object[][] to_client_data()
+    {
+        return new Object[][]{
+
+                {Byte.class, (byte) 65, "65"},
+
+                {Integer.class, 997, "997"},
+
+                {Long.class, 12345l, "12345"},
+
+                {Double.class, 123.45d, "123.45"},
+
+                {String.class, "abcd", "abcd"},
+
+                {Float.class, (float) -22.7, "-22.7"}
+
+        };
+    }
+
+    @Test(dataProvider = "to_client_data")
+    public void to_client(Class type, Object value, String expected)
+    {
+        Translator t = _source.get(type);
+
+        String actual = t.toClient(value);
+
+        assertEquals(actual, expected);
+    }
+
+    @DataProvider(name = "parse_client_success_data")
+    public Object[][] parse_client_success_data()
+    {
+        return new Object[][]{
+
+                {Byte.class, " 23 ", (byte) 23},
+
+                {Integer.class, " 123 ", 123},
+
+                {Long.class, "  -1234567 ", -1234567l},
+
+                {Double.class, " 3.14 ", 3.14d},
+
+                {String.class, " abcdef ", " abcdef "},
+
+                {Float.class, " 28.95 ", (float) 28.95},
+
+        };
+    }
+
+    @Test(dataProvider = "parse_client_success_data")
+    public void parse_client(Class type, String input, Object expected) throws Exception
+    {
+        Translator t = _source.get(type);
+
+        Object actual = t.parseClient(input, _messagesSource.getValidationMessages(Locale.ENGLISH));
+
+        assertEquals(actual, expected);
+    }
+
+    @DataProvider(name = "parse_client_failure_data")
+    public Object[][] parse_client_failure_data()
+    {
+        return new Object[][]{
+
+                {Byte.class, "fred", "The input value 'fred' is not parseable as an integer value."},
+
+                {Integer.class, "fred", "The input value 'fred' is not parseable as an integer value."},
+
+                {Long.class, "fred", "The input value 'fred' is not parseable as an integer value."},
+
+                {Double.class, "fred", "The input value 'fred' is not parseable as a numeric value."},
+
+                {Float.class, "fred", "The input value 'fred' is not parseable as a numeric value."}
+
+        };
+    }
+
+    @Test(dataProvider = "parse_client_failure_data")
+    public void parse_client_failure(Class type, String input, String expectedMessage)
+    {
+
+        Translator t = _source.get(type);
+
+        try
+        {
+            t.parseClient(input, _messagesSource.getValidationMessages(Locale.ENGLISH));
+            unreachable();
+        }
+        catch (ValidationException ex)
+        {
+            assertEquals(ex.getMessage(), expectedMessage);
+        }
+
+    }
+}

Modified: tapestry/tapestry5/trunk/tapestry5.ipr
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry5.ipr?rev=612958&r1=612957&r2=612958&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry5.ipr (original)
+++ tapestry/tapestry5/trunk/tapestry5.ipr Thu Jan 17 12:09:49 2008
@@ -50,7 +50,7 @@
   </component>
   <component name="CompilerConfiguration">
     <option name="DEFAULT_COMPILER" value="Javac" />
-    <option name="DEPLOY_AFTER_MAKE" value="1" />
+    <option name="DEPLOY_AFTER_MAKE" value="2" />
     <excludeFromCompile>
       <directory url="file://$PROJECT_DIR$/quickstart/src/main/resources" includeSubdirectories="true" />
     </excludeFromCompile>