blob: a786d72d8af7b8e43c054266c644292d48dfb1c9 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl.javaspi.text;
import java.text.NumberFormat;
import java.text.spi.NumberFormatProvider;
import java.util.Locale;
import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
import com.ibm.icu.impl.jdkadapter.DecimalFormatICU;
import com.ibm.icu.impl.jdkadapter.NumberFormatICU;
public class NumberFormatProviderICU extends NumberFormatProvider {
private final int NUMBER = 0;
private final int INTEGER = 1;
private final int CURRENCY = 2;
private final int PERCENT = 3;
@Override
public NumberFormat getCurrencyInstance(Locale locale) {
return getInstance(CURRENCY, locale);
}
@Override
public NumberFormat getIntegerInstance(Locale locale) {
return getInstance(INTEGER, locale);
}
@Override
public NumberFormat getNumberInstance(Locale locale) {
return getInstance(NUMBER, locale);
}
@Override
public NumberFormat getPercentInstance(Locale locale) {
return getInstance(PERCENT, locale);
}
@Override
public Locale[] getAvailableLocales() {
return ICULocaleServiceProvider.getAvailableLocales();
}
private NumberFormat getInstance(int type, Locale locale) {
com.ibm.icu.text.NumberFormat icuNfmt;
Locale actual = ICULocaleServiceProvider.canonicalize(locale);
switch (type) {
case NUMBER:
icuNfmt = com.ibm.icu.text.NumberFormat.getNumberInstance(actual);
break;
case INTEGER:
icuNfmt = com.ibm.icu.text.NumberFormat.getIntegerInstance(actual);
break;
case CURRENCY:
icuNfmt = com.ibm.icu.text.NumberFormat.getCurrencyInstance(actual);
break;
case PERCENT:
icuNfmt = com.ibm.icu.text.NumberFormat.getPercentInstance(actual);
break;
default:
return null;
}
if (!(icuNfmt instanceof com.ibm.icu.text.DecimalFormat)) {
// icuNfmt must be always DecimalFormat
return null;
}
NumberFormat nf = null;
if (ICULocaleServiceProvider.useDecimalFormat()) {
nf = DecimalFormatICU.wrap((com.ibm.icu.text.DecimalFormat)icuNfmt);
} else {
nf = NumberFormatICU.wrap(icuNfmt);
}
com.ibm.icu.text.DecimalFormatSymbols decfs = ICULocaleServiceProvider.getDecimalFormatSymbolsForLocale(actual);
if (decfs != null) {
((com.ibm.icu.text.DecimalFormat)icuNfmt).setDecimalFormatSymbols(decfs);
}
return nf;
}
}