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;