You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/07/09 01:45:55 UTC

svn commit: r675057 - in /velocity/tools/trunk/src/main/java/org/apache/velocity/tools: ConversionUtils.java config/Data.java generic/ConversionTool.java

Author: nbubna
Date: Tue Jul  8 16:45:55 2008
New Revision: 675057

URL: http://svn.apache.org/viewvc?rev=675057&view=rev
Log:
make ConversionUtils.toNumber(Object) behave intuitively

Modified:
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/Data.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/ConversionTool.java

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java?rev=675057&r1=675056&r2=675057&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java Tue Jul  8 16:45:55 2008
@@ -180,12 +180,26 @@
      * Attempts to convert an unidentified {@link Object} into a {@link Number},
      * just short of turning it into a string and parsing it.  In other words,
      * this will convert to {@link Number} from a {@link Number}, {@link Calendar},
-     * or {@link Date}.  If it can't do that, it will return {@code null}.
-     *
+     * or {@link Date}.  If it can't do that, it will get the string value and have 
+     * {@link #toNumber(String,String,Locale)} try to parse it using the
+     * default Locale and format.
+     
      * @param obj - the object to convert
      */
     public static Number toNumber(Object obj)
     {
+        return toNumber(obj, true);
+    }
+
+    /**
+     * Just like {@link #toNumber(Object)} except that you can tell
+     * this to attempt parsing the object as a String by passing {@code true}
+     * as the second parameter.  If you do so, then it will have
+     * {@link #toNumber(String,String,Locale)} try to parse it using the
+     * default Locale and format.
+     */
+    public static Number toNumber(Object obj, boolean handleStrings)
+    {
         if (obj == null)
         {
             return null;
@@ -203,6 +217,11 @@
             Date date = ((Calendar)obj).getTime();
             return Long.valueOf(date.getTime());
         }
+        if (handleStrings)
+        {
+            // try parsing with default format and locale
+            return toNumber(obj.toString(), "default", Locale.getDefault());
+        }
         return null;
     }
 
@@ -248,7 +267,7 @@
     public static Number toNumber(Object value, String format, Locale locale)
     {
         // first try the easy stuff
-        Number number = toNumber(value);
+        Number number = toNumber(value, false);
         if (number != null)
         {
             return number;

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/Data.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/Data.java?rev=675057&r1=675056&r2=675057&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/Data.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/Data.java Tue Jul  8 16:45:55 2008
@@ -466,34 +466,25 @@
 
     protected static class NumberConverter implements Converter
     {
-
-        /* use english locale by default for numbers */
-        private static Locale configLocale = new Locale("en");
-        
         public Object convert(Class type, Object obj)
         {
             Number num = ConversionUtils.toNumber(obj);
             if (num == null)
             {
-                String value = String.valueOf(obj);
-                num = ConversionUtils.toNumber(value, "default", configLocale);
-                if (num == null)
+                throw new IllegalArgumentException("Could not convert "+obj+" to a number");
+            }
+            // now, let's return integers for integer values
+            else if (obj.toString().indexOf('.') < 0)
+            {
+                // unless, of course, we need a long
+                if (num.doubleValue() > Integer.MAX_VALUE ||
+                    num.doubleValue() < Integer.MIN_VALUE)
                 {
-                    throw new IllegalArgumentException("Could not convert "+obj+" to a number");
+                    num = Long.valueOf(num.longValue());
                 }
-                // now, let's return integers for integer values
-                else if (value.indexOf('.') < 0)
+                else
                 {
-                    // unless, of course, we need a long
-                    if (num.doubleValue() > Integer.MAX_VALUE ||
-                        num.doubleValue() < Integer.MIN_VALUE)
-                    {
-                        num = Long.valueOf(num.longValue());
-                    }
-                    else
-                    {
-                        num = Integer.valueOf(num.intValue());
-                    }
+                    num = Integer.valueOf(num.intValue());
                 }
             }
             return num;

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/ConversionTool.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/ConversionTool.java?rev=675057&r1=675056&r2=675057&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/ConversionTool.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/generic/ConversionTool.java Tue Jul  8 16:45:55 2008
@@ -227,7 +227,8 @@
      */
     public Number toNumber(Object value)
     {
-        Number number = ConversionUtils.toNumber(value);
+        // don't do string conversion yet
+        Number number = ConversionUtils.toNumber(value, false);
         if (number != null)
         {
             return number;