author | okutsu |
Mon, 10 Dec 2012 10:52:11 +0900 | |
changeset 14765 | 0987999ed367 |
parent 13583 | dc0017b1a452 |
child 15260 | 7af2d7a87806 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
13583 | 2 |
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. |
2 | 3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 |
* |
|
5 |
* This code is free software; you can redistribute it and/or modify it |
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
|
5506 | 7 |
* published by the Free Software Foundation. Oracle designates this |
2 | 8 |
* particular file as subject to the "Classpath" exception as provided |
5506 | 9 |
* by Oracle in the LICENSE file that accompanied this code. |
2 | 10 |
* |
11 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 |
* version 2 for more details (a copy is included in the LICENSE file that |
|
15 |
* accompanied this code). |
|
16 |
* |
|
17 |
* You should have received a copy of the GNU General Public License version |
|
18 |
* 2 along with this work; if not, write to the Free Software Foundation, |
|
19 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 |
* |
|
5506 | 21 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
22 |
* or visit www.oracle.com if you need additional information or have any |
|
23 |
* questions. |
|
2 | 24 |
*/ |
25 |
||
13583 | 26 |
package sun.util.locale.provider; |
2 | 27 |
|
28 |
import java.lang.ref.SoftReference; |
|
29 |
import java.util.LinkedList; |
|
30 |
import java.util.List; |
|
31 |
import java.util.Locale; |
|
32 |
import java.util.Map; |
|
33 |
import java.util.concurrent.ConcurrentHashMap; |
|
34 |
import java.util.spi.TimeZoneNameProvider; |
|
35 |
import sun.util.calendar.ZoneInfo; |
|
36 |
import sun.util.resources.OpenListResourceBundle; |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
37 |
import sun.util.resources.TimeZoneNamesBundle; |
2 | 38 |
|
39 |
/** |
|
40 |
* Utility class that deals with the localized time zone names |
|
13583 | 41 |
* |
42 |
* @author Naoto Sato |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
43 |
* @author Masayoshi Okutsu |
2 | 44 |
*/ |
45 |
public final class TimeZoneNameUtility { |
|
46 |
||
47 |
/** |
|
48 |
* cache to hold time zone resource bundles. Keyed by Locale |
|
49 |
*/ |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
50 |
private static ConcurrentHashMap<Locale, SoftReference<TimeZoneNamesBundle>> cachedBundles = |
13583 | 51 |
new ConcurrentHashMap<>(); |
2 | 52 |
|
53 |
/** |
|
54 |
* cache to hold time zone localized strings. Keyed by Locale |
|
55 |
*/ |
|
56 |
private static ConcurrentHashMap<Locale, SoftReference<String[][]>> cachedZoneData = |
|
13583 | 57 |
new ConcurrentHashMap<>(); |
2 | 58 |
|
59 |
/** |
|
60 |
* get time zone localized strings. Enumerate all keys. |
|
61 |
*/ |
|
13583 | 62 |
public static String[][] getZoneStrings(Locale locale) { |
2 | 63 |
String[][] zones; |
64 |
SoftReference<String[][]> data = cachedZoneData.get(locale); |
|
65 |
||
66 |
if (data == null || ((zones = data.get()) == null)) { |
|
67 |
zones = loadZoneStrings(locale); |
|
13583 | 68 |
data = new SoftReference<>(zones); |
2 | 69 |
cachedZoneData.put(locale, data); |
70 |
} |
|
71 |
||
72 |
return zones; |
|
73 |
} |
|
74 |
||
13583 | 75 |
private static String[][] loadZoneStrings(Locale locale) { |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
76 |
// If the provider is a TimeZoneNameProviderImpl, call its getZoneStrings |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
77 |
// in order to avoid per-ID retrieval. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
78 |
LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(TimeZoneNameProvider.class, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
79 |
TimeZoneNameProvider provider = adapter.getTimeZoneNameProvider(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
80 |
if (provider instanceof TimeZoneNameProviderImpl) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
81 |
return ((TimeZoneNameProviderImpl)provider).getZoneStrings(locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
82 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
83 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
84 |
// Performs per-ID retrieval. |
13583 | 85 |
List<String[]> zones = new LinkedList<>(); |
2 | 86 |
OpenListResourceBundle rb = getBundle(locale); |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
87 |
for (String key : rb.keySet()) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
88 |
String[] names = retrieveDisplayNamesImpl(key, locale); |
2 | 89 |
if (names != null) { |
90 |
zones.add(names); |
|
91 |
} |
|
92 |
} |
|
93 |
||
94 |
String[][] zonesArray = new String[zones.size()][]; |
|
95 |
return zones.toArray(zonesArray); |
|
96 |
} |
|
97 |
||
98 |
/** |
|
99 |
* Retrieve display names for a time zone ID. |
|
100 |
*/ |
|
13583 | 101 |
public static String[] retrieveDisplayNames(String id, Locale locale) { |
102 |
if (id == null || locale == null) { |
|
103 |
throw new NullPointerException(); |
|
104 |
} |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
105 |
return retrieveDisplayNamesImpl(id, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
106 |
} |
13583 | 107 |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
108 |
/** |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
109 |
* Retrieves a generic time zone display name for a time zone ID. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
110 |
* |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
111 |
* @param id time zone ID |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
112 |
* @param style TimeZone.LONG or TimeZone.SHORT |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
113 |
* @param locale desired Locale |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
114 |
* @return the requested generic time zone display name, or null if not found. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
115 |
*/ |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
116 |
public static String retrieveGenericDisplayName(String id, int style, Locale locale) { |
2 | 117 |
LocaleServiceProviderPool pool = |
118 |
LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class); |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
119 |
return pool.getLocalizedObject(TimeZoneNameGetter.INSTANCE, locale, "generic", style, id); |
2 | 120 |
} |
121 |
||
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
122 |
/** |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
123 |
* Retrieves a standard or daylight-saving time name for the given time zone ID. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
124 |
* |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
125 |
* @param id time zone ID |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
126 |
* @param daylight true for a daylight saving time name, or false for a standard time name |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
127 |
* @param style TimeZone.LONG or TimeZone.SHORT |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
128 |
* @param locale desired Locale |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
129 |
* @return the requested time zone name, or null if not found. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
130 |
*/ |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
131 |
public static String retrieveDisplayName(String id, boolean daylight, int style, Locale locale) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
132 |
LocaleServiceProviderPool pool = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
133 |
LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
134 |
return pool.getLocalizedObject(TimeZoneNameGetter.INSTANCE, locale, daylight ? "dst" : "std", style, id); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
135 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
136 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
137 |
private static String[] retrieveDisplayNamesImpl(String id, Locale locale) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
138 |
LocaleServiceProviderPool pool = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
139 |
LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
140 |
return pool.getLocalizedObject(TimeZoneNameArrayGetter.INSTANCE, locale, id); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
141 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
142 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
143 |
private static TimeZoneNamesBundle getBundle(Locale locale) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
144 |
TimeZoneNamesBundle rb; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
145 |
SoftReference<TimeZoneNamesBundle> data = cachedBundles.get(locale); |
2 | 146 |
|
147 |
if (data == null || ((rb = data.get()) == null)) { |
|
13583 | 148 |
rb = LocaleProviderAdapter.forJRE().getLocaleData().getTimeZoneNames(locale); |
149 |
data = new SoftReference<>(rb); |
|
2 | 150 |
cachedBundles.put(locale, data); |
151 |
} |
|
152 |
||
153 |
return rb; |
|
154 |
} |
|
155 |
||
156 |
/** |
|
157 |
* Obtains a localized time zone strings from a TimeZoneNameProvider |
|
158 |
* implementation. |
|
159 |
*/ |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
160 |
private static class TimeZoneNameArrayGetter |
2 | 161 |
implements LocaleServiceProviderPool.LocalizedObjectGetter<TimeZoneNameProvider, |
162 |
String[]>{ |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
163 |
private static final TimeZoneNameArrayGetter INSTANCE = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
164 |
new TimeZoneNameArrayGetter(); |
2 | 165 |
|
13583 | 166 |
@Override |
2 | 167 |
public String[] getObject(TimeZoneNameProvider timeZoneNameProvider, |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
168 |
Locale locale, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
169 |
String requestID, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
170 |
Object... params) { |
2 | 171 |
assert params.length == 0; |
172 |
||
13583 | 173 |
// First, try to get names with the request ID |
174 |
String[] names = buildZoneStrings(timeZoneNameProvider, locale, requestID); |
|
175 |
||
176 |
if (names == null) { |
|
2 | 177 |
Map<String, String> aliases = ZoneInfo.getAliasTable(); |
178 |
||
179 |
if (aliases != null) { |
|
180 |
// Check whether this id is an alias, if so, |
|
181 |
// look for the standard id. |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
182 |
String canonicalID = aliases.get(requestID); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
183 |
if (canonicalID != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
184 |
names = buildZoneStrings(timeZoneNameProvider, locale, canonicalID); |
2 | 185 |
} |
186 |
if (names == null) { |
|
187 |
// There may be a case that a standard id has become an |
|
188 |
// alias. so, check the aliases backward. |
|
189 |
names = examineAliases(timeZoneNameProvider, locale, |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
190 |
canonicalID == null ? requestID : canonicalID, aliases); |
2 | 191 |
} |
192 |
} |
|
193 |
} |
|
194 |
||
195 |
if (names != null) { |
|
196 |
names[0] = requestID; |
|
197 |
} |
|
198 |
||
199 |
return names; |
|
200 |
} |
|
201 |
||
202 |
private static String[] examineAliases(TimeZoneNameProvider tznp, Locale locale, |
|
203 |
String id, |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
204 |
Map<String, String> aliases) { |
2 | 205 |
if (aliases.containsValue(id)) { |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
206 |
for (Map.Entry<String, String> entry : aliases.entrySet()) { |
2 | 207 |
if (entry.getValue().equals(id)) { |
208 |
String alias = entry.getKey(); |
|
209 |
String[] names = buildZoneStrings(tznp, locale, alias); |
|
210 |
if (names != null) { |
|
211 |
return names; |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
212 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
213 |
names = examineAliases(tznp, locale, alias, aliases); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
214 |
if (names != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
215 |
return names; |
2 | 216 |
} |
217 |
} |
|
218 |
} |
|
219 |
} |
|
220 |
||
221 |
return null; |
|
222 |
} |
|
223 |
||
224 |
private static String[] buildZoneStrings(TimeZoneNameProvider tznp, |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
225 |
Locale locale, String id) { |
2 | 226 |
String[] names = new String[5]; |
227 |
||
228 |
for (int i = 1; i <= 4; i ++) { |
|
229 |
names[i] = tznp.getDisplayName(id, i>=3, i%2, locale); |
|
230 |
if (i >= 3 && names[i] == null) { |
|
231 |
names[i] = names[i-2]; |
|
232 |
} |
|
233 |
} |
|
234 |
||
235 |
if (names[1] == null) { |
|
236 |
// this id seems not localized by this provider |
|
237 |
names = null; |
|
238 |
} |
|
239 |
||
240 |
return names; |
|
241 |
} |
|
242 |
} |
|
13583 | 243 |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
244 |
private static class TimeZoneNameGetter |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
245 |
implements LocaleServiceProviderPool.LocalizedObjectGetter<TimeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
246 |
String> { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
247 |
private static final TimeZoneNameGetter INSTANCE = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
248 |
new TimeZoneNameGetter(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
249 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
250 |
@Override |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
251 |
public String getObject(TimeZoneNameProvider timeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
252 |
Locale locale, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
253 |
String requestID, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
254 |
Object... params) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
255 |
assert params.length == 2; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
256 |
int style = (int) params[0]; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
257 |
String tzid = (String) params[1]; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
258 |
String value = getName(timeZoneNameProvider, locale, requestID, style, tzid); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
259 |
if (value == null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
260 |
Map<String, String> aliases = ZoneInfo.getAliasTable(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
261 |
if (aliases != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
262 |
String canonicalID = aliases.get(tzid); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
263 |
if (canonicalID != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
264 |
value = getName(timeZoneNameProvider, locale, requestID, style, canonicalID); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
265 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
266 |
if (value == null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
267 |
value = examineAliases(timeZoneNameProvider, locale, requestID, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
268 |
canonicalID != null ? canonicalID : tzid, style, aliases); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
269 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
270 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
271 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
272 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
273 |
return value; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
274 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
275 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
276 |
private static String examineAliases(TimeZoneNameProvider tznp, Locale locale, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
277 |
String requestID, String tzid, int style, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
278 |
Map<String, String> aliases) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
279 |
if (aliases.containsValue(tzid)) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
280 |
for (Map.Entry<String, String> entry : aliases.entrySet()) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
281 |
if (entry.getValue().equals(tzid)) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
282 |
String alias = entry.getKey(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
283 |
String name = getName(tznp, locale, requestID, style, alias); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
284 |
if (name != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
285 |
return name; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
286 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
287 |
name = examineAliases(tznp, locale, requestID, alias, style, aliases); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
288 |
if (name != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
289 |
return name; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
290 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
291 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
292 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
293 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
294 |
return null; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
295 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
296 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
297 |
private static String getName(TimeZoneNameProvider timeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
298 |
Locale locale, String requestID, int style, String tzid) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
299 |
String value = null; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
300 |
switch (requestID) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
301 |
case "std": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
302 |
value = timeZoneNameProvider.getDisplayName(tzid, false, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
303 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
304 |
case "dst": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
305 |
value = timeZoneNameProvider.getDisplayName(tzid, true, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
306 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
307 |
case "generic": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
308 |
value = timeZoneNameProvider.getGenericDisplayName(tzid, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
309 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
310 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
311 |
return value; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
312 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
313 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
314 |
|
13583 | 315 |
// No instantiation |
316 |
private TimeZoneNameUtility() { |
|
317 |
} |
|
2 | 318 |
} |