Update of /var/cvs/src/org/mmbase/datatypes
In directory james.mmbase.org:/tmp/cvs-serv4958

Modified Files:
        NumberDataType.java 
Log Message:
some more work for MMB-1700


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/datatypes
See also: http://www.mmbase.org/jira/browse/MMB-1700


Index: NumberDataType.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/datatypes/NumberDataType.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- NumberDataType.java 9 Aug 2008 09:18:55 -0000       1.27
+++ NumberDataType.java 11 Aug 2008 15:51:02 -0000      1.28
@@ -9,21 +9,24 @@
 */
 package org.mmbase.datatypes;
 
-import java.text.NumberFormat;
-import java.text.ParseException;
+import java.text.*;
+
 import java.util.Locale;
 
 import org.mmbase.bridge.*;
 import org.mmbase.util.Casting;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
 
 /**
  * A DataType representing some kind of numeric value, like a floating point 
number or an integer number.
  *
  * @author Pierre van Rooden
- * @version $Id: NumberDataType.java,v 1.27 2008/08/09 09:18:55 michiel Exp $
+ * @version $Id: NumberDataType.java,v 1.28 2008/08/11 15:51:02 michiel Exp $
  * @since MMBase-1.8
  */
 abstract public class NumberDataType<E extends Number&Comparable<E>> extends 
ComparableDataType<E> {
+    private static final Logger log = 
Logging.getLoggerInstance(NumberDataType.class);
 
     private static final long serialVersionUID = 1L;
     /**
@@ -38,11 +41,12 @@
          if (preCast instanceof String) {
              Locale l = cloud.getLocale();
              NumberFormat nf = NumberFormat.getNumberInstance(l);
-             try {
-                 return nf.parse((String) preCast);
-             } catch (ParseException pe) {
-                 throw new CastException("Not a number: " + preCast);
-             }
+             ParsePosition p = new ParsePosition(0);
+             String s = (String) preCast;
+             Number number =  nf.parse(s, p);
+             log.info("Parsing " + preCast + " -> " + number);
+             if (p.getIndex() < s.length()) throw new CastException("Not a 
number: " + preCast);
+             return number;
          }
          return Casting.toDouble(preCast); // this makes it e.g. possible to 
report that 1e20 is too big for an integer.
      }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to