1/* 2 ******************************************************************************* 3 * Copyright (C) 2008-2012, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7package com.ibm.icu.impl.javaspi.text; 8 9import java.text.NumberFormat; 10import java.text.spi.NumberFormatProvider; 11import java.util.Locale; 12 13import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider; 14import com.ibm.icu.impl.jdkadapter.DecimalFormatICU; 15import com.ibm.icu.impl.jdkadapter.NumberFormatICU; 16import com.ibm.icu.util.ULocale; 17 18public class NumberFormatProviderICU extends NumberFormatProvider { 19 20 private final static int NUMBER = 0; 21 private final static int INTEGER = 1; 22 private final static int CURRENCY = 2; 23 private final static int PERCENT = 3; 24 25 @Override 26 public NumberFormat getCurrencyInstance(Locale locale) { 27 return getInstance(CURRENCY, locale); 28 } 29 30 @Override 31 public NumberFormat getIntegerInstance(Locale locale) { 32 return getInstance(INTEGER, locale); 33 } 34 35 @Override 36 public NumberFormat getNumberInstance(Locale locale) { 37 return getInstance(NUMBER, locale); 38 } 39 40 @Override 41 public NumberFormat getPercentInstance(Locale locale) { 42 return getInstance(PERCENT, locale); 43 } 44 45 @Override 46 public Locale[] getAvailableLocales() { 47 return ICULocaleServiceProvider.getAvailableLocales(); 48 } 49 50 private NumberFormat getInstance(int type, Locale locale) { 51 com.ibm.icu.text.NumberFormat icuNfmt; 52 ULocale actual = ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale); 53 switch (type) { 54 case NUMBER: 55 icuNfmt = com.ibm.icu.text.NumberFormat.getNumberInstance(actual); 56 break; 57 case INTEGER: 58 icuNfmt = com.ibm.icu.text.NumberFormat.getIntegerInstance(actual); 59 break; 60 case CURRENCY: 61 icuNfmt = com.ibm.icu.text.NumberFormat.getCurrencyInstance(actual); 62 break; 63 case PERCENT: 64 icuNfmt = com.ibm.icu.text.NumberFormat.getPercentInstance(actual); 65 break; 66 default: 67 return null; 68 } 69 70 if (!(icuNfmt instanceof com.ibm.icu.text.DecimalFormat)) { 71 // icuNfmt must be always DecimalFormat 72 return null; 73 } 74 75 NumberFormat nf = null; 76 if (ICULocaleServiceProvider.useDecimalFormat()) { 77 nf = DecimalFormatICU.wrap((com.ibm.icu.text.DecimalFormat)icuNfmt); 78 } else { 79 nf = NumberFormatICU.wrap(icuNfmt); 80 } 81 82 return nf; 83 } 84} 85