Author: jkuhnert
Date: Sun May  6 16:44:31 2007
New Revision: 535684

URL: http://svn.apache.org/viewvc?view=rev&rev=535684
Log:
Fixes TAPESTRY-817. Added new BigDecimalTranslator.

Added:
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
   (with props)
    
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
   (with props)
Modified:
    tapestry/tapestry4/trunk/src/site/apt/usersguide/validation.apt
    
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
    
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java

Modified: tapestry/tapestry4/trunk/src/site/apt/usersguide/validation.apt
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/src/site/apt/usersguide/validation.apt?view=diff&rev=535684&r1=535683&r2=535684
==============================================================================
--- tapestry/tapestry4/trunk/src/site/apt/usersguide/validation.apt (original)
+++ tapestry/tapestry4/trunk/src/site/apt/usersguide/validation.apt Sun May  6 
16:44:31 2007
@@ -201,6 +201,8 @@
 *-----------------+-------------------------------------------+
  
{{{../apidocs/org/apache/tapestry/form/translator/NumberTranslator.html}NumberTranslator}}
 | <<< trim=<true/false>,pattern=<any pattern supported by 
{{{http://java.sun.com/j2se/1.4.2/docs/api/java/text/NumberFormat.html}NumberFormat}}>,omitZero=<true/false>
 >>> If true (which is the default for the property), then values that are 0 
are rendered to an empty string, not "0" or "0.00". This is useful in most 
cases where the field is optional; it allows the field to render blank when no 
value is present.
 *-----------------+-------------------------------------------+
+ 
{{{../apidocs/org/apache/tapestry/form/translator/BigDecimalTranslator.html}BigDecimalTranslator}}
 | <<< trim=<true/false>
+*-----------------+-------------------------------------------+
 
 * Extending ValidationDelegate
 

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml?view=diff&rev=535684&r1=535683&r2=535684
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/descriptor/META-INF/tapestry.form.translator.xml
 Sun May  6 16:44:31 2007
@@ -16,43 +16,44 @@
 -->
 
 <module id="tapestry.form.translator" version="4.0.0" 
package="org.apache.tapestry.form.translator">
-  
-  Support for input field translators.
-  
-
-  <configuration-point id="Translators" 
schema-id="hivemind.lib.BeanFactoryContribution">
-    
-    Defines the available translators that can be used to validate user input 
on fields.
-    
-  </configuration-point>
-    
-  <contribution configuration-id="Translators">
-    <bean name="date" class="DateTranslator"/>
-    <bean name="number" class="NumberTranslator"/>
-    <bean name="string" class="StringTranslator"/>
-  </contribution>   
-  
-  <service-point id="TranslatorBeanFactory" 
interface="org.apache.hivemind.lib.BeanFactory">
-    <invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
-      <factory vend-class="Translator" configuration-id="Translators"/>
-    </invoke-factory>
-  </service-point> 
-  
-  <service-point id="TranslatorBindingFactory" 
interface="org.apache.tapestry.binding.BindingFactory">
-    
-    Factory for the "translator:" binding prefix.
-    
-    <invoke-factory>
-      <construct class="TranslatorBindingFactory">
-        <set-service property="translatorBeanFactory" 
service-id="TranslatorBeanFactory"/>
-        <set-object property="valueConverter" 
value="infrastructure:valueConverter"/>  
-      </construct>
-    </invoke-factory>
-    
-  </service-point>
-  
-  <contribution configuration-id="tapestry.bindings.BindingFactories">
-    <binding prefix="translator" service-id="TranslatorBindingFactory"/>
-  </contribution>
-    
+
+    Support for input field translators.
+
+
+    <configuration-point id="Translators" 
schema-id="hivemind.lib.BeanFactoryContribution">
+
+        Defines the available translators that can be used to validate user 
input on fields.
+
+    </configuration-point>
+
+    <contribution configuration-id="Translators">
+        <bean name="date" class="DateTranslator"/>
+        <bean name="number" class="NumberTranslator"/>
+        <bean name="string" class="StringTranslator"/>
+        <bean name="bigdecimal" class="BigDecimalTranslator" />
+    </contribution>
+
+    <service-point id="TranslatorBeanFactory" 
interface="org.apache.hivemind.lib.BeanFactory">
+        <invoke-factory service-id="hivemind.lib.BeanFactoryBuilder">
+            <factory vend-class="Translator" configuration-id="Translators"/>
+        </invoke-factory>
+    </service-point>
+
+    <service-point id="TranslatorBindingFactory" 
interface="org.apache.tapestry.binding.BindingFactory">
+
+        Factory for the "translator:" binding prefix.
+
+        <invoke-factory>
+            <construct class="TranslatorBindingFactory">
+                <set-service property="translatorBeanFactory" 
service-id="TranslatorBeanFactory"/>
+                <set-object property="valueConverter" 
value="infrastructure:valueConverter"/>
+            </construct>
+        </invoke-factory>
+
+    </service-point>
+
+    <contribution configuration-id="tapestry.bindings.BindingFactories">
+        <binding prefix="translator" service-id="TranslatorBindingFactory"/>
+    </contribution>
+
 </module>

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java?view=diff&rev=535684&r1=535683&r2=535684
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
 Sun May  6 16:44:31 2007
@@ -213,7 +213,8 @@
      * stream.
      */
 
-    public void service(IRequestCycle cycle) throws IOException
+    public void service(IRequestCycle cycle)
+            throws IOException
     {
         String path = cycle.getParameter(PATH);
         String md5Digest = cycle.getParameter(DIGEST);
@@ -334,8 +335,8 @@
     
     /** @since 2.2 */
 
-    private void writeAssetContent(IRequestCycle cycle, String resourcePath, 
URLConnection resourceConnection) 
-    throws IOException
+    private void writeAssetContent(IRequestCycle cycle, String resourcePath, 
URLConnection resourceConnection)
+            throws IOException
     {
         // Getting the content type and length is very dependant
         // on support from the application server (represented

Modified: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java?view=diff&rev=535684&r1=535683&r2=535684
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
 (original)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/AbstractTranslator.java
 Sun May  6 16:44:31 2007
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry.form.translator;
 
-import java.util.Locale;
-
 import org.apache.hivemind.HiveMind;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
@@ -27,6 +25,8 @@
 import org.apache.tapestry.valid.ValidationConstants;
 import org.apache.tapestry.valid.ValidatorException;
 
+import java.util.Locale;
+
 /**
  * Abstract [EMAIL PROTECTED] Translator} implementation that provides default 
behavior for trimming, null
  * object, and empty text handling.
@@ -72,8 +72,7 @@
     {
         String value = text == null ? null : (_trim ? text.trim() : text);
 
-        return HiveMind.isBlank(value) ? getValueForEmptyInput()
-                : parseText(field, messages, value);
+        return HiveMind.isBlank(value) ? getValueForEmptyInput() : 
parseText(field, messages, value);
     }
 
     protected abstract String formatObject(IFormComponent field, Locale 
locale, Object object);

Added: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java?view=auto&rev=535684
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
 (added)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
 Sun May  6 16:44:31 2007
@@ -0,0 +1,47 @@
+package org.apache.tapestry.form.translator;
+
+import org.apache.hivemind.ApplicationRuntimeException;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.valid.ValidationConstraint;
+import org.apache.tapestry.valid.ValidationStrings;
+import org.apache.tapestry.valid.ValidatorException;
+
+import java.math.BigDecimal;
+import java.util.Locale;
+
+/**
+ * Translator for [EMAIL PROTECTED] java.math.BigDecimal} objects. 
+ */
+public class BigDecimalTranslator extends AbstractTranslator {
+
+    public BigDecimalTranslator()
+    {
+    }
+
+    // Needed until HIVEMIND-134 fix is available
+    public BigDecimalTranslator(String initializer)
+    {
+        super(initializer);
+    }
+
+    protected String formatObject(IFormComponent field, Locale locale, Object 
object)
+    {
+        if (!BigDecimal.class.isInstance(object))
+            throw new ApplicationRuntimeException("BigDecimalTranslator 
translates values of type BigDecimal, not: " + object.getClass());
+        
+        return object.toString();
+    }
+
+    protected Object parseText(IFormComponent field, ValidationMessages 
messages, String text)
+            throws ValidatorException
+    {
+        try {
+            
+            return new BigDecimal(text);
+        }
+        catch (NumberFormatException e) {
+            throw new ValidatorException(buildMessage(messages, field, 
ValidationStrings.INVALID_NUMBER), ValidationConstraint.NUMBER_FORMAT);
+        }
+    }
+}

Propchange: 
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/BigDecimalTranslator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
URL: 
http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java?view=auto&rev=535684
==============================================================================
--- 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
 (added)
+++ 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
 Sun May  6 16:44:31 2007
@@ -0,0 +1,89 @@
+package org.apache.tapestry.form.translator;
+
+import org.apache.tapestry.form.FormComponentContributorTestCase;
+import org.apache.tapestry.form.IFormComponent;
+import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.valid.ValidationStrings;
+import org.apache.tapestry.valid.ValidatorException;
+import static org.easymock.EasyMock.*;
+import org.testng.annotations.Test;
+
+import java.math.BigDecimal;
+import java.util.Locale;
+
+/**
+ * Tests [EMAIL PROTECTED] BigDecimalTranslator}.
+ */
[EMAIL PROTECTED]
+public class TestBigDecimalTranslator extends FormComponentContributorTestCase 
{
+
+    public void test_Default_Format()
+    {
+        BigDecimalTranslator translator = new BigDecimalTranslator();
+
+        testFormat(translator, new BigDecimal("14.1"), "14.1");
+    }
+
+    public void test_Null_Format()
+    {
+        BigDecimalTranslator translator = new BigDecimalTranslator();
+
+        testFormat(translator, null, "");
+    }
+
+    public void test_Parse_Null()
+            throws Exception
+    {
+        IFormComponent field = newField();
+        ValidationMessages messages = newMock(ValidationMessages.class);
+        BigDecimalTranslator translator = new BigDecimalTranslator();
+
+        replay();
+
+        assert translator.parse(field, messages, null) == null;
+
+        verify();
+    }
+
+    @Test(expectedExceptions = ValidatorException.class)
+    public void test_Parse_Invalid()
+            throws Exception
+    {
+        IFormComponent field = newField("fred");
+        ValidationMessages messages = 
newValidationMessages(Locale.getDefault());
+        BigDecimalTranslator translator = new BigDecimalTranslator();
+
+        expect(messages.formatValidationMessage((String)eq(null), 
eq(ValidationStrings.INVALID_NUMBER), aryEq(new String[] { 
"fred"}))).andReturn("msg");
+
+        replay();
+
+        translator.parse(field, messages, "a23");
+
+        verify();
+    }
+
+    public void test_Parse_Simple()
+            throws Exception
+    {
+        IFormComponent field = newField();
+        ValidationMessages messages = newMock(ValidationMessages.class);
+        BigDecimalTranslator translator = new BigDecimalTranslator();
+
+        replay();
+
+        BigDecimal value = (BigDecimal) translator.parse(field, messages, 
"99999999.9999");
+
+        verify();
+
+        assertEquals(value, new BigDecimal("99999999.9999"));
+    }
+
+    private void testFormat(Translator translator, BigDecimal number, String 
expected)
+    {
+        IFormComponent field = newField();
+
+        String result = translator.format(field, Locale.ENGLISH, number);
+
+        assertEquals(expected, result);
+    }
+}

Propchange: 
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestBigDecimalTranslator.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to