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

Reply via email to