2 *******************************************************************************
\r
3 * Copyright (C) 2003-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.text;
\r
10 import java.util.Locale;
\r
11 import java.util.MissingResourceException;
\r
12 import java.util.Set;
\r
14 import com.ibm.icu.impl.ICULocaleService;
\r
15 import com.ibm.icu.impl.ICUResourceBundle;
\r
16 import com.ibm.icu.impl.ICUService;
\r
17 import com.ibm.icu.impl.ICULocaleService.LocaleKey;
\r
18 import com.ibm.icu.impl.ICULocaleService.LocaleKeyFactory;
\r
19 import com.ibm.icu.impl.ICUService.Factory;
\r
20 import com.ibm.icu.impl.ICUService.Key;
\r
21 import com.ibm.icu.text.NumberFormat.NumberFormatFactory;
\r
22 import com.ibm.icu.util.ULocale;
\r
24 class NumberFormatServiceShim extends NumberFormat.NumberFormatShim {
\r
26 Locale[] getAvailableLocales() {
\r
27 if (service.isDefault()) {
\r
28 return ICUResourceBundle.getAvailableLocales();
\r
30 return service.getAvailableLocales();
\r
33 ULocale[] getAvailableULocales() {
\r
34 if (service.isDefault()) {
\r
35 return ICUResourceBundle.getAvailableULocales();
\r
37 return service.getAvailableULocales();
\r
40 private static final class NFFactory extends LocaleKeyFactory {
\r
41 private NumberFormatFactory delegate;
\r
43 NFFactory(NumberFormatFactory delegate) {
\r
44 super(delegate.visible() ? VISIBLE : INVISIBLE);
\r
46 this.delegate = delegate;
\r
49 public Object create(Key key, ICUService srvc) {
\r
50 if (handlesKey(key)) {
\r
51 LocaleKey lkey = (LocaleKey)key;
\r
52 ULocale loc = lkey.canonicalLocale();
\r
53 int kind = lkey.kind();
\r
55 Object result = delegate.createFormat(loc, kind);
\r
56 if (result == null) {
\r
57 result = srvc.getKey(key, null, this);
\r
64 protected Set<String> getSupportedIDs() {
\r
65 return delegate.getSupportedLocaleNames();
\r
69 Object registerFactory(NumberFormatFactory factory) {
\r
70 return service.registerFactory(new NFFactory(factory));
\r
73 boolean unregister(Object registryKey) {
\r
74 return service.unregisterFactory((Factory)registryKey);
\r
77 NumberFormat createInstance(ULocale desiredLocale, int choice) {
\r
79 // use service cache
\r
80 // if (service.isDefault()) {
\r
81 // return NumberFormat.createInstance(desiredLocale, choice);
\r
84 ULocale[] actualLoc = new ULocale[1];
\r
85 NumberFormat fmt = (NumberFormat)service.get(desiredLocale, choice,
\r
88 throw new MissingResourceException("Unable to construct NumberFormat", "", "");
\r
90 fmt = (NumberFormat)fmt.clone();
\r
92 ULocale uloc = actualLoc[0];
\r
93 fmt.setLocale(uloc, uloc); // services make no distinction between actual & valid
\r
97 private static class NFService extends ICULocaleService {
\r
99 super("NumberFormat");
\r
101 class RBNumberFormatFactory extends ICUResourceBundleFactory {
\r
102 protected Object handleCreate(ULocale loc, int kind, ICUService srvc) {
\r
103 return NumberFormat.createInstance(loc, kind);
\r
107 this.registerFactory(new RBNumberFormatFactory());
\r
111 private static ICULocaleService service = new NFService();
\r