You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by cb...@apache.org on 2010/09/10 12:49:22 UTC

svn commit: r995743 - /velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.java

Author: cbrisson
Date: Fri Sep 10 10:49:21 2010
New Revision: 995743

URL: http://svn.apache.org/viewvc?rev=995743&view=rev
Log:
Added a custom number formats cache in ConversionUtils

Modified:
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/ConversionUtils.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=995743&r1=995742&r2=995743&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 Fri Sep 10 10:49:21 2010
@@ -32,6 +32,8 @@ import java.util.Date;
 import java.util.Calendar;
 import java.util.Locale;
 import java.util.TimeZone;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Utility methods for parsing or otherwise converting between types.
@@ -50,6 +52,9 @@ public class ConversionUtils
     //NOTE: '3' belongs to a non-public "scientific" style
     private static final int STYLE_INTEGER      = 4;
 
+    // cache custom formats
+    private static ConcurrentMap<String,NumberFormat> customFormatsCache = new ConcurrentHashMap<String,NumberFormat>();
+
     private ConversionUtils() {}
 
     public ConversionUtils getInstance()
@@ -83,7 +88,13 @@ public class ConversionUtils
         if (style < 0)
         {
             // we have a custom format
-            nf = new DecimalFormat(format, new DecimalFormatSymbols(locale));
+            String cacheKey = format + "%" + locale.toString();
+            nf = customFormatsCache.get(cacheKey);
+            if( nf == null )
+            {
+                nf = new DecimalFormat(format, new DecimalFormatSymbols(locale));
+                customFormatsCache.put(cacheKey,nf);
+            }
         }
         else
         {