Revision: 780
http://stripes.svn.sourceforge.net/stripes/?rev=780&view=rev
Author: tfenne
Date: 2008-01-20 19:23:20 -0800 (Sun, 20 Jan 2008)
Log Message:
-----------
Fix for STS-390: more robust parsing of numbers.
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/validation/ByteTypeConverter.java
trunk/stripes/src/net/sourceforge/stripes/validation/IntegerTypeConverter.java
trunk/stripes/src/net/sourceforge/stripes/validation/LongTypeConverter.java
trunk/stripes/src/net/sourceforge/stripes/validation/NumberTypeConverterSupport.java
trunk/stripes/src/net/sourceforge/stripes/validation/ShortTypeConverter.java
trunk/tests/src/net/sourceforge/stripes/validation/NumberTypeConverterSupportTest.java
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/ByteTypeConverter.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/validation/ByteTypeConverter.java
2008-01-21 02:59:33 UTC (rev 779)
+++ trunk/stripes/src/net/sourceforge/stripes/validation/ByteTypeConverter.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -15,6 +15,7 @@
package net.sourceforge.stripes.validation;
import java.util.Collection;
+import java.text.NumberFormat;
/**
* Basic type converter for converting strings to bytes. Will produce one
error if the String
@@ -49,4 +50,9 @@
return retval;
}
+
+ /** Overridden to return integer instances instead. */
+ protected NumberFormat[] getNumberFormats() {
+ return new NumberFormat[] {
NumberFormat.getIntegerInstance(this.getLocale()) };
+ }
}
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/IntegerTypeConverter.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/validation/IntegerTypeConverter.java
2008-01-21 02:59:33 UTC (rev 779)
+++
trunk/stripes/src/net/sourceforge/stripes/validation/IntegerTypeConverter.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -15,6 +15,7 @@
package net.sourceforge.stripes.validation;
import java.util.Collection;
+import java.text.NumberFormat;
/**
* Basic type converter for converting strings to integers.
@@ -49,4 +50,9 @@
return retval;
}
+
+ /** Overridden to return integer instances instead. */
+ protected NumberFormat[] getNumberFormats() {
+ return new NumberFormat[] {
NumberFormat.getIntegerInstance(this.getLocale()) };
+ }
}
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/LongTypeConverter.java
===================================================================
--- trunk/stripes/src/net/sourceforge/stripes/validation/LongTypeConverter.java
2008-01-21 02:59:33 UTC (rev 779)
+++ trunk/stripes/src/net/sourceforge/stripes/validation/LongTypeConverter.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -15,6 +15,7 @@
package net.sourceforge.stripes.validation;
import java.util.Collection;
+import java.text.NumberFormat;
/**
* Basic type converter for converting strings to integers.
@@ -40,4 +41,9 @@
return retval;
}
+
+ /** Overridden to return integer instances instead. */
+ protected NumberFormat[] getNumberFormats() {
+ return new NumberFormat[] {
NumberFormat.getIntegerInstance(this.getLocale()) };
+ }
}
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/NumberTypeConverterSupport.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/validation/NumberTypeConverterSupport.java
2008-01-21 02:59:33 UTC (rev 779)
+++
trunk/stripes/src/net/sourceforge/stripes/validation/NumberTypeConverterSupport.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -16,6 +16,7 @@
import java.text.NumberFormat;
import java.text.ParseException;
+import java.text.ParsePosition;
import java.util.Collection;
import java.util.Locale;
import java.util.Currency;
@@ -57,9 +58,7 @@
* @return one or more NumberFormats to use in parsing numbers
*/
protected NumberFormat[] getNumberFormats() {
- return new NumberFormat[] {
- NumberFormat.getInstance(this.locale)
- };
+ return new NumberFormat[] { NumberFormat.getInstance(this.locale) };
}
/**
@@ -68,10 +67,12 @@
*/
protected Number parse(String input, Collection<ValidationError> errors) {
input = preprocess(input);
+ ParsePosition pp = new ParsePosition(0);
for (NumberFormat format : this.formats) {
- try { return format.parse(input); }
- catch (ParseException pe) { /* Do nothing. */ }
+ pp.setIndex(0);
+ Number number = format.parse(input, pp);
+ if (number != null && input.length() == pp.getIndex()) return
number;
}
// If we've gotten here we could not parse the number
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/ShortTypeConverter.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/validation/ShortTypeConverter.java
2008-01-21 02:59:33 UTC (rev 779)
+++
trunk/stripes/src/net/sourceforge/stripes/validation/ShortTypeConverter.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -15,6 +15,7 @@
package net.sourceforge.stripes.validation;
import java.util.Collection;
+import java.text.NumberFormat;
/**
* Basic type converter for converting strings to short integers.
@@ -49,4 +50,9 @@
return retval;
}
+
+ /** Overridden to return integer instances instead. */
+ protected NumberFormat[] getNumberFormats() {
+ return new NumberFormat[] {
NumberFormat.getIntegerInstance(this.getLocale()) };
+ }
}
Modified:
trunk/tests/src/net/sourceforge/stripes/validation/NumberTypeConverterSupportTest.java
===================================================================
---
trunk/tests/src/net/sourceforge/stripes/validation/NumberTypeConverterSupportTest.java
2008-01-21 02:59:33 UTC (rev 779)
+++
trunk/tests/src/net/sourceforge/stripes/validation/NumberTypeConverterSupportTest.java
2008-01-21 03:23:20 UTC (rev 780)
@@ -86,4 +86,19 @@
Assert.assertEquals(errors.size(), 1, "We should have gotten a parse
error.");
}
+ @Test(groups="fast")
+ public void testWithBogusTrailingText() {
+ Collection<ValidationError> errors = new ArrayList<ValidationError>();
+ Number number = getConverter().parse("12345six", errors);
+ Assert.assertNull(number);
+ Assert.assertEquals(errors.size(), 1, "We should have gotten a parse
error.");
+ }
+
+ @Test(groups="fast")
+ public void testWithMultipleDecimalPoints() {
+ Collection<ValidationError> errors = new ArrayList<ValidationError>();
+ Number number = getConverter().parse("123.456.789", errors);
+ Assert.assertNull(number);
+ Assert.assertEquals(errors.size(), 1, "We should have gotten a parse
error.");
+ }
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development