]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/main/classes/core/src/com/ibm/icu/text/NumberFormatServiceShim.java
Clean up imports.
[Dictionary.git] / jars / icu4j-52_1 / main / classes / core / src / com / ibm / icu / text / NumberFormatServiceShim.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 2003-2011, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  */
7
8 package com.ibm.icu.text;
9
10 import java.util.Locale;
11 import java.util.MissingResourceException;
12 import java.util.Set;
13
14 import com.ibm.icu.impl.ICULocaleService;
15 import com.ibm.icu.impl.ICULocaleService.LocaleKey;
16 import com.ibm.icu.impl.ICULocaleService.LocaleKeyFactory;
17 import com.ibm.icu.impl.ICUResourceBundle;
18 import com.ibm.icu.impl.ICUService;
19 import com.ibm.icu.impl.ICUService.Factory;
20 import com.ibm.icu.impl.ICUService.Key;
21 import com.ibm.icu.text.NumberFormat.NumberFormatFactory;
22 import com.ibm.icu.util.Currency;
23 import com.ibm.icu.util.ULocale;
24
25 class NumberFormatServiceShim extends NumberFormat.NumberFormatShim {
26
27     Locale[] getAvailableLocales() {
28         if (service.isDefault()) {
29             return ICUResourceBundle.getAvailableLocales();
30         }
31         return service.getAvailableLocales();
32     }
33
34     ULocale[] getAvailableULocales() {
35         if (service.isDefault()) {
36             return ICUResourceBundle.getAvailableULocales();
37         }
38         return service.getAvailableULocales();
39     }
40
41     private static final class NFFactory extends LocaleKeyFactory {
42         private NumberFormatFactory delegate;
43
44         NFFactory(NumberFormatFactory delegate) {
45             super(delegate.visible() ? VISIBLE : INVISIBLE);
46
47             this.delegate = delegate;
48         }
49
50         public Object create(Key key, ICUService srvc) {
51             if (!handlesKey(key) || !(key instanceof LocaleKey)) {
52                 return null;
53             }
54             
55             LocaleKey lkey = (LocaleKey)key;
56             Object result = delegate.createFormat(lkey.canonicalLocale(), lkey.kind());
57             if (result == null) {
58                 result = srvc.getKey(key, null, this);
59             }
60             return result;
61         }
62
63         protected Set<String> getSupportedIDs() {
64             return delegate.getSupportedLocaleNames();
65         }
66     }
67
68     Object registerFactory(NumberFormatFactory factory) {
69         return service.registerFactory(new NFFactory(factory));
70     }
71
72     boolean unregister(Object registryKey) {
73         return service.unregisterFactory((Factory)registryKey);
74     }
75
76     NumberFormat createInstance(ULocale desiredLocale, int choice) {
77
78     // use service cache
79 //          if (service.isDefault()) {
80 //              return NumberFormat.createInstance(desiredLocale, choice);
81 //          }
82
83         ULocale[] actualLoc = new ULocale[1];
84         NumberFormat fmt = (NumberFormat)service.get(desiredLocale, choice,
85                                                      actualLoc);
86         if (fmt == null) {
87             throw new MissingResourceException("Unable to construct NumberFormat", "", "");
88         }
89         fmt = (NumberFormat)fmt.clone();
90
91         // If we are creating a currency type formatter, then we may have to set the currency
92         // explicitly, since the actualLoc may be different than the desiredLocale        
93         if ( choice == NumberFormat.CURRENCYSTYLE ||
94              choice == NumberFormat.ISOCURRENCYSTYLE || 
95              choice == NumberFormat.PLURALCURRENCYSTYLE) {
96             fmt.setCurrency(Currency.getInstance(desiredLocale));
97         }
98
99         ULocale uloc = actualLoc[0];
100         fmt.setLocale(uloc, uloc); // services make no distinction between actual & valid
101         return fmt;
102     }
103
104     private static class NFService extends ICULocaleService {
105         NFService() {
106             super("NumberFormat");
107
108             class RBNumberFormatFactory extends ICUResourceBundleFactory {
109                 protected Object handleCreate(ULocale loc, int kind, ICUService srvc) {
110                     return NumberFormat.createInstance(loc, kind);
111                 }
112             }
113                 
114             this.registerFactory(new RBNumberFormatFactory());
115             markDefault();
116         }
117     }
118     private static ICULocaleService service = new NFService();
119 }