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