2 *******************************************************************************
\r
3 * Copyright (C) 2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl.javaspi.text;
\r
9 import java.text.NumberFormat;
\r
10 import java.text.spi.NumberFormatProvider;
\r
11 import java.util.Locale;
\r
13 import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
\r
14 import com.ibm.icu.impl.jdkadapter.DecimalFormatICU;
\r
15 import com.ibm.icu.impl.jdkadapter.NumberFormatICU;
\r
17 public class NumberFormatProviderICU extends NumberFormatProvider {
\r
19 private final int NUMBER = 0;
\r
20 private final int INTEGER = 1;
\r
21 private final int CURRENCY = 2;
\r
22 private final int PERCENT = 3;
\r
25 public NumberFormat getCurrencyInstance(Locale locale) {
\r
26 return getInstance(CURRENCY, locale);
\r
30 public NumberFormat getIntegerInstance(Locale locale) {
\r
31 return getInstance(INTEGER, locale);
\r
35 public NumberFormat getNumberInstance(Locale locale) {
\r
36 return getInstance(NUMBER, locale);
\r
40 public NumberFormat getPercentInstance(Locale locale) {
\r
41 return getInstance(PERCENT, locale);
\r
45 public Locale[] getAvailableLocales() {
\r
46 return ICULocaleServiceProvider.getAvailableLocales();
\r
49 private NumberFormat getInstance(int type, Locale locale) {
\r
50 com.ibm.icu.text.NumberFormat icuNfmt;
\r
51 Locale actual = ICULocaleServiceProvider.canonicalize(locale);
\r
54 icuNfmt = com.ibm.icu.text.NumberFormat.getNumberInstance(actual);
\r
57 icuNfmt = com.ibm.icu.text.NumberFormat.getIntegerInstance(actual);
\r
60 icuNfmt = com.ibm.icu.text.NumberFormat.getCurrencyInstance(actual);
\r
63 icuNfmt = com.ibm.icu.text.NumberFormat.getPercentInstance(actual);
\r
69 if (!(icuNfmt instanceof com.ibm.icu.text.DecimalFormat)) {
\r
70 // icuNfmt must be always DecimalFormat
\r
74 NumberFormat nf = null;
\r
75 if (ICULocaleServiceProvider.useDecimalFormat()) {
\r
76 nf = DecimalFormatICU.wrap((com.ibm.icu.text.DecimalFormat)icuNfmt);
\r
78 nf = NumberFormatICU.wrap(icuNfmt);
\r
81 com.ibm.icu.text.DecimalFormatSymbols decfs = ICULocaleServiceProvider.getDecimalFormatSymbolsForLocale(actual);
\r
82 if (decfs != null) {
\r
83 ((com.ibm.icu.text.DecimalFormat)icuNfmt).setDecimalFormatSymbols(decfs);
\r