View Javadoc

1   /*
2    * $Id: NumberTools.java,v 1.3 2007/07/05 13:36:19 oeuillot Exp $
3    */
4   package org.rcfaces.core.internal.tools;
5   
6   import java.text.DecimalFormat;
7   import java.text.DecimalFormatSymbols;
8   import java.text.NumberFormat;
9   import java.util.Collections;
10  import java.util.HashMap;
11  import java.util.Locale;
12  import java.util.Map;
13  
14  import org.rcfaces.core.internal.Constants;
15  import org.rcfaces.core.internal.renderkit.IComponentRenderContext;
16  
17  /**
18   * 
19   * @author Olivier Oeuillot (latest modification by $Author: oeuillot $)
20   * @version $Revision: 1.3 $ $Date: 2007/07/05 13:36:19 $
21   */
22  public class NumberTools {
23      private static final String REVISION = "$Revision: 1.3 $";
24  
25      private static final Map decimalFormatSymbolsByLocale;
26      static {
27          if (Constants.CACHED_LOCALE_FORMATS) {
28              decimalFormatSymbolsByLocale = new HashMap(32);
29          }
30      }
31  
32      public static String getDefaultNumberFormatPattern(Locale locale) {
33          return LocaleTools.getDefaultPattern(locale, LocaleTools.NUMBER_TYPE);
34      }
35  
36      public static String getDefaultIntegerFormatPattern(Locale locale) {
37          return LocaleTools.getDefaultPattern(locale, LocaleTools.INTEGER_TYPE);
38      }
39  
40      public static String getDefaultPercentFormatPattern(Locale locale) {
41          return LocaleTools.getDefaultPattern(locale, LocaleTools.PERCENT_TYPE);
42      }
43  
44      public static String getDefaultCurrencyFormatPattern(Locale locale) {
45          return LocaleTools.getDefaultPattern(locale, LocaleTools.CURRENCY_TYPE);
46      }
47  
48      public static String normalizeNumberFormat(
49              IComponentRenderContext componentRenderContext, String format) {
50          return LocaleTools.normalizeFormat(componentRenderContext, format,
51                  LocaleTools.NUMBER_TYPE, Collections.EMPTY_MAP);
52      }
53  
54      public static DecimalFormatSymbols getDefaultDecimalFormatSymbols() {
55          return getDecimalFormatSymbols(Locale.ENGLISH);
56      }
57  
58      public static DecimalFormatSymbols getDecimalFormatSymbols(Locale locale) {
59          if (Constants.CACHED_LOCALE_FORMATS == false) {
60              NumberFormat decimalFormat = NumberFormat.getInstance(locale);
61  
62              if ((decimalFormat instanceof DecimalFormat) == false) {
63                  decimalFormat = NumberFormat.getInstance(Locale.ENGLISH);
64              }
65  
66              return ((DecimalFormat) decimalFormat).getDecimalFormatSymbols();
67          }
68  
69          DecimalFormatSymbols symbols;
70          synchronized (decimalFormatSymbolsByLocale) {
71              symbols = (DecimalFormatSymbols) decimalFormatSymbolsByLocale
72                      .get(locale);
73  
74              if (symbols != null) {
75                  return symbols;
76              }
77  
78              NumberFormat decimalFormat = NumberFormat.getInstance(locale);
79  
80              if ((decimalFormat instanceof DecimalFormat) == false) {
81                  decimalFormat = NumberFormat.getInstance(Locale.ENGLISH);
82              }
83  
84              symbols = ((DecimalFormat) decimalFormat).getDecimalFormatSymbols();
85  
86              decimalFormatSymbolsByLocale.put(locale, symbols);
87          }
88  
89          return symbols;
90      }
91  
92  }