You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/05/12 01:37:52 UTC
svn commit: r537315 - in /tapestry/tapestry4/trunk/tapestry-framework/src:
java/org/apache/tapestry/form/translator/ java/org/apache/tapestry/valid/
test/org/apache/tapestry/form/translator/
Author: jkuhnert
Date: Fri May 11 16:37:51 2007
New Revision: 537315
URL: http://svn.apache.org/viewvc?view=rev&rev=537315
Log:
Fixes TAPESTRY-1071. The NumberTranslator default client side contributions were incorrectly specifying a grouping separator when the pattern/locale didn't specify using one. Fix contributed by Marcus Schulte.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java?view=diff&rev=537315&r1=537314&r2=537315
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java Fri May 11 16:37:51 2007
@@ -14,11 +14,6 @@
package org.apache.tapestry.form.translator;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.Format;
-import java.util.Locale;
-
import org.apache.hivemind.util.PropertyUtils;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
@@ -30,6 +25,11 @@
import org.apache.tapestry.valid.ValidationConstraint;
import org.apache.tapestry.valid.ValidationStrings;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.Format;
+import java.util.Locale;
+
/**
* A {@link java.text.DecimalFormat}-based {@link Translator} implementation.
*
@@ -104,7 +104,7 @@
protected Object[] getMessageParameters(Locale locale, String label)
{
String pattern = getDecimalFormat(locale).toLocalizedPattern();
-
+
return new Object[] { label, pattern };
}
@@ -128,13 +128,14 @@
JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
DecimalFormat format = getDecimalFormat(context.getLocale());
-
+
cons.accumulate(field.getClientId(),
new JSONLiteral("[dojo.validate.isRealNumber,{"
+ "places:" + format.getMaximumFractionDigits() + ","
+ "decimal:"
+ JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator())
- + ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+ + (format.isGroupingUsed() ? ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+ : "")
+ "}]"));
accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, message);
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java?view=diff&rev=537315&r1=537314&r2=537315
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java Fri May 11 16:37:51 2007
@@ -63,8 +63,7 @@
* Indicates a general error in the format of a string that is to be interpreted as a number.
*/
- public static final ValidationConstraint NUMBER_FORMAT = new ValidationConstraint(
- "NUMBER_FORMAT");
+ public static final ValidationConstraint NUMBER_FORMAT = new ValidationConstraint("NUMBER_FORMAT");
/**
* Indicates that the value was too small (for a Date, too early).
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java?view=diff&rev=537315&r1=537314&r2=537315
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java Fri May 11 16:37:51 2007
@@ -14,11 +14,6 @@
package org.apache.tapestry.form.translator;
-import static org.easymock.EasyMock.expect;
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.form.FormComponentContributorContext;
@@ -29,8 +24,12 @@
import org.apache.tapestry.valid.ValidationConstraint;
import org.apache.tapestry.valid.ValidationStrings;
import org.apache.tapestry.valid.ValidatorException;
+import static org.easymock.EasyMock.expect;
import org.testng.annotations.Test;
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
/**
* Tests for {@link org.apache.tapestry.form.translator.NumberTranslator}
*
@@ -254,6 +253,38 @@
verify();
assertEquals(json.toString(),
+ "{\"constraints\":{\"numberField\":" +
+ "[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
+ "\"numberField\":{\"constraints\":[\"invalid number message\"]}}");
+ }
+
+ public void test_Render_Grouping_Separator()
+ {
+ NumberTranslator translator = new NumberTranslator();
+ translator.setPattern("###,##");
+ IFormComponent field = newField("Number Field", "numberField", 1);
+
+ JSONObject json = new JSONObject();
+
+ IMarkupWriter writer = newWriter();
+ IRequestCycle cycle = newCycle();
+
+ FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
+
+ expect(context.getProfile()).andReturn(json);
+
+ trainGetLocale(context, Locale.US);
+
+ trainBuildMessage(context, null, ValidationStrings.INVALID_NUMBER, new String[] { "Number Field", "#,##" },
+ "invalid number message");
+
+ replay();
+
+ translator.renderContribution(writer, cycle, context, field);
+
+ verify();
+
+ assertEquals(json.toString(),
"{\"constraints\":{\"numberField\":[[dojo.validate.isRealNumber," +
"{places:0,decimal:\".\",separator:\",\"}]]},\"numberField\":" +
"{\"constraints\":[\"invalid number message\"]}}");
@@ -293,9 +324,9 @@
verify();
assertEquals(json.toString(),
- "{\"constraints\":{\"myfield\":[[dojo.validate.isRealNumber," +
- "{places:0,decimal:\".\",separator:\",\"}]]},\"myfield\":" +
- "{\"constraints\":[\"Blah Blah \'Field Name\' Blah.\"]}}");
+ "{\"constraints\":" +
+ "{\"myfield\":[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
+ "\"myfield\":{\"constraints\":[\"Blah Blah 'Field Name' Blah.\"]}}");
}
public void test_Trim_Render_Contribution()
@@ -328,8 +359,9 @@
verify();
assertEquals(json.toString(),
- "{\"trim\":[\"myfield\"],\"constraints\":{\"myfield\":" +
- "[[dojo.validate.isRealNumber,{places:0,decimal:\".\",separator:\",\"}]]}," +
+ "{\"trim\":[\"myfield\"]," +
+ "\"constraints\":{\"myfield\":" +
+ "[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
"\"myfield\":{\"constraints\":[\"invalid number message\"]}}");
}