17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2008-2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.javaspi.text; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.NumberFormat; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.spi.NumberFormatProvider; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.javaspi.ICULocaleServiceProvider; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.jdkadapter.DecimalFormatICU; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.jdkadapter.NumberFormatICU; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class NumberFormatProviderICU extends NumberFormatProvider { 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final static int NUMBER = 0; 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final static int INTEGER = 1; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final static int CURRENCY = 2; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private final static int PERCENT = 3; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @Override 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public NumberFormat getCurrencyInstance(Locale locale) { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return getInstance(CURRENCY, locale); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @Override 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public NumberFormat getIntegerInstance(Locale locale) { 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return getInstance(INTEGER, locale); 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @Override 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public NumberFormat getNumberInstance(Locale locale) { 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return getInstance(NUMBER, locale); 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @Override 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public NumberFormat getPercentInstance(Locale locale) { 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return getInstance(PERCENT, locale); 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert @Override 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public Locale[] getAvailableLocales() { 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return ICULocaleServiceProvider.getAvailableLocales(); 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private NumberFormat getInstance(int type, Locale locale) { 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert com.ibm.icu.text.NumberFormat icuNfmt; 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale actual = ICULocaleServiceProvider.toULocaleNoSpecialVariant(locale); 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert switch (type) { 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case NUMBER: 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert icuNfmt = com.ibm.icu.text.NumberFormat.getNumberInstance(actual); 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case INTEGER: 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert icuNfmt = com.ibm.icu.text.NumberFormat.getIntegerInstance(actual); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case CURRENCY: 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert icuNfmt = com.ibm.icu.text.NumberFormat.getCurrencyInstance(actual); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert case PERCENT: 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert icuNfmt = com.ibm.icu.text.NumberFormat.getPercentInstance(actual); 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert default: 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return null; 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(icuNfmt instanceof com.ibm.icu.text.DecimalFormat)) { 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // icuNfmt must be always DecimalFormat 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return null; 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert NumberFormat nf = null; 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ICULocaleServiceProvider.useDecimalFormat()) { 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert nf = DecimalFormatICU.wrap((com.ibm.icu.text.DecimalFormat)icuNfmt); 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert nf = NumberFormatICU.wrap(icuNfmt); 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return nf; 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 85