]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/text/NumberFormatServiceShim.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / text / NumberFormatServiceShim.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2003-2010, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  */\r
7 \r
8 package com.ibm.icu.text;\r
9 \r
10 import java.util.Locale;\r
11 import java.util.MissingResourceException;\r
12 import java.util.Set;\r
13 \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
23 \r
24 class NumberFormatServiceShim extends NumberFormat.NumberFormatShim {\r
25 \r
26     Locale[] getAvailableLocales() {\r
27         if (service.isDefault()) {\r
28             return ICUResourceBundle.getAvailableLocales();\r
29         }\r
30         return service.getAvailableLocales();\r
31     }\r
32 \r
33     ULocale[] getAvailableULocales() {\r
34         if (service.isDefault()) {\r
35             return ICUResourceBundle.getAvailableULocales();\r
36         }\r
37         return service.getAvailableULocales();\r
38     }\r
39 \r
40     private static final class NFFactory extends LocaleKeyFactory {\r
41         private NumberFormatFactory delegate;\r
42 \r
43         NFFactory(NumberFormatFactory delegate) {\r
44             super(delegate.visible() ? VISIBLE : INVISIBLE);\r
45 \r
46             this.delegate = delegate;\r
47         }\r
48 \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
54 \r
55                 Object result = delegate.createFormat(loc, kind);\r
56                 if (result == null) {\r
57                     result = srvc.getKey(key, null, this);\r
58                 }\r
59                 return result;\r
60             }\r
61             return null;\r
62         }\r
63 \r
64         protected Set<String> getSupportedIDs() {\r
65             return delegate.getSupportedLocaleNames();\r
66         }\r
67     }\r
68 \r
69     Object registerFactory(NumberFormatFactory factory) {\r
70         return service.registerFactory(new NFFactory(factory));\r
71     }\r
72 \r
73     boolean unregister(Object registryKey) {\r
74         return service.unregisterFactory((Factory)registryKey);\r
75     }\r
76 \r
77     NumberFormat createInstance(ULocale desiredLocale, int choice) {\r
78 \r
79     // use service cache\r
80 //          if (service.isDefault()) {\r
81 //              return NumberFormat.createInstance(desiredLocale, choice);\r
82 //          }\r
83 \r
84         ULocale[] actualLoc = new ULocale[1];\r
85         NumberFormat fmt = (NumberFormat)service.get(desiredLocale, choice,\r
86                                                      actualLoc);\r
87         if (fmt == null) {\r
88             throw new MissingResourceException("Unable to construct NumberFormat", "", "");\r
89         }\r
90         fmt = (NumberFormat)fmt.clone();\r
91 \r
92         ULocale uloc = actualLoc[0];\r
93         fmt.setLocale(uloc, uloc); // services make no distinction between actual & valid\r
94         return fmt;\r
95     }\r
96 \r
97     private static class NFService extends ICULocaleService {\r
98         NFService() {\r
99             super("NumberFormat");\r
100 \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
104                 }\r
105             }\r
106                 \r
107             this.registerFactory(new RBNumberFormatFactory());\r
108             markDefault();\r
109         }\r
110     }\r
111     private static ICULocaleService service = new NFService();\r
112 }\r