author | naoto |
Tue, 21 May 2019 13:40:56 -0700 | |
changeset 54968 | c13b1382aa30 |
parent 49904 | cadca99d52e7 |
permissions | -rw-r--r-- |
2 | 1 |
/* |
49904
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
2 |
* Copyright (c) 2005, 2018, 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; |
|
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
33 |
import java.util.Objects; |
48251
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
34 |
import java.util.Optional; |
15260 | 35 |
import java.util.Set; |
2 | 36 |
import java.util.concurrent.ConcurrentHashMap; |
37 |
import java.util.spi.TimeZoneNameProvider; |
|
38 |
import sun.util.calendar.ZoneInfo; |
|
48251
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
39 |
import sun.util.cldr.CLDRLocaleProviderAdapter; |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
40 |
import static sun.util.locale.provider.LocaleProviderAdapter.Type; |
2 | 41 |
|
42 |
/** |
|
43 |
* Utility class that deals with the localized time zone names |
|
13583 | 44 |
* |
45 |
* @author Naoto Sato |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
46 |
* @author Masayoshi Okutsu |
2 | 47 |
*/ |
48 |
public final class TimeZoneNameUtility { |
|
49 |
||
50 |
/** |
|
15260 | 51 |
* cache to hold time zone localized strings. Keyed by Locale |
2 | 52 |
*/ |
33310
2701a9854bb5
8134720: Lazy initialization support for currency names in DecimalFormatSymbols
naoto
parents:
32015
diff
changeset
|
53 |
private static final ConcurrentHashMap<Locale, SoftReference<String[][]>> cachedZoneData = |
13583 | 54 |
new ConcurrentHashMap<>(); |
2 | 55 |
|
56 |
/** |
|
15260 | 57 |
* Cache for managing display names per timezone per locale |
58 |
* The structure is: |
|
59 |
* Map(key=id, value=SoftReference(Map(key=locale, value=displaynames))) |
|
2 | 60 |
*/ |
15260 | 61 |
private static final Map<String, SoftReference<Map<Locale, String[]>>> cachedDisplayNames = |
13583 | 62 |
new ConcurrentHashMap<>(); |
2 | 63 |
|
64 |
/** |
|
65 |
* get time zone localized strings. Enumerate all keys. |
|
66 |
*/ |
|
13583 | 67 |
public static String[][] getZoneStrings(Locale locale) { |
2 | 68 |
String[][] zones; |
69 |
SoftReference<String[][]> data = cachedZoneData.get(locale); |
|
70 |
||
71 |
if (data == null || ((zones = data.get()) == null)) { |
|
72 |
zones = loadZoneStrings(locale); |
|
13583 | 73 |
data = new SoftReference<>(zones); |
2 | 74 |
cachedZoneData.put(locale, data); |
75 |
} |
|
76 |
||
77 |
return zones; |
|
78 |
} |
|
79 |
||
13583 | 80 |
private static String[][] loadZoneStrings(Locale locale) { |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
81 |
// If the provider is a TimeZoneNameProviderImpl, call its getZoneStrings |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
82 |
// in order to avoid per-ID retrieval. |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
83 |
LocaleProviderAdapter adapter = LocaleProviderAdapter.getAdapter(TimeZoneNameProvider.class, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
84 |
TimeZoneNameProvider provider = adapter.getTimeZoneNameProvider(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
85 |
if (provider instanceof TimeZoneNameProviderImpl) { |
32015 | 86 |
String[][] zoneStrings = ((TimeZoneNameProviderImpl)provider).getZoneStrings(locale); |
87 |
||
88 |
if (zoneStrings.length == 0 && locale.equals(Locale.ROOT)) { |
|
89 |
// Unlike other *Name provider, zoneStrings search won't do the fallback |
|
90 |
// name search. If the ResourceBundle found for the root locale contains no |
|
91 |
// zoneStrings, just use the one for English, assuming English bundle |
|
92 |
// contains all the tzids and their names. |
|
93 |
zoneStrings= getZoneStrings(Locale.ENGLISH); |
|
94 |
} |
|
95 |
||
96 |
return zoneStrings; |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
97 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
98 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
99 |
// Performs per-ID retrieval. |
15260 | 100 |
Set<String> zoneIDs = LocaleProviderAdapter.forJRE().getLocaleResources(locale).getZoneIDs(); |
13583 | 101 |
List<String[]> zones = new LinkedList<>(); |
15260 | 102 |
for (String key : zoneIDs) { |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
103 |
String[] names = retrieveDisplayNamesImpl(key, locale); |
2 | 104 |
if (names != null) { |
105 |
zones.add(names); |
|
106 |
} |
|
107 |
} |
|
108 |
||
109 |
String[][] zonesArray = new String[zones.size()][]; |
|
110 |
return zones.toArray(zonesArray); |
|
111 |
} |
|
112 |
||
113 |
/** |
|
114 |
* Retrieve display names for a time zone ID. |
|
115 |
*/ |
|
13583 | 116 |
public static String[] retrieveDisplayNames(String id, Locale locale) { |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
117 |
Objects.requireNonNull(id); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
118 |
Objects.requireNonNull(locale); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
119 |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
120 |
return retrieveDisplayNamesImpl(id, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
121 |
} |
13583 | 122 |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
123 |
/** |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
124 |
* 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
|
125 |
* |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
126 |
* @param id time zone ID |
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 generic time zone display 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 retrieveGenericDisplayName(String id, int style, Locale locale) { |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
132 |
String[] names = retrieveDisplayNamesImpl(id, locale); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
133 |
if (Objects.nonNull(names)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
134 |
return names[6 - style]; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
135 |
} else { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
136 |
return null; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
137 |
} |
2 | 138 |
} |
139 |
||
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
140 |
/** |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
141 |
* 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
|
142 |
* |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
143 |
* @param id time zone ID |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
144 |
* @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
|
145 |
* @param style TimeZone.LONG or TimeZone.SHORT |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
146 |
* @param locale desired Locale |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
147 |
* @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
|
148 |
*/ |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
149 |
public static String retrieveDisplayName(String id, boolean daylight, int style, Locale locale) { |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
150 |
String[] names = retrieveDisplayNamesImpl(id, locale); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
151 |
if (Objects.nonNull(names)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
152 |
return names[(daylight ? 4 : 2) - style]; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
153 |
} else { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
154 |
return null; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
155 |
} |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
156 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
157 |
|
48251
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
158 |
/** |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
159 |
* Converts the time zone id from LDML's 5-letter id to tzdb's id |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
160 |
* |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
161 |
* @param shortID time zone short ID defined in LDML |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
162 |
* @return the tzdb's time zone ID |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
163 |
*/ |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
164 |
public static Optional<String> convertLDMLShortID(String shortID) { |
49904
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
165 |
return canonicalTZID(shortID); |
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
166 |
} |
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
167 |
|
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
168 |
/** |
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
169 |
* Returns the canonical ID for the given ID |
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
170 |
*/ |
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
171 |
public static Optional<String> canonicalTZID(String id) { |
48251
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
172 |
return ((CLDRLocaleProviderAdapter)LocaleProviderAdapter.forType(Type.CLDR)) |
49904
cadca99d52e7
8181157: CLDR Timezone name fallback implementation
naoto
parents:
48251
diff
changeset
|
173 |
.canonicalTZID(id); |
48251
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
174 |
} |
57148c79bd75
8176841: Additional Unicode Language-Tag Extensions
naoto
parents:
47216
diff
changeset
|
175 |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
176 |
private static String[] retrieveDisplayNamesImpl(String id, Locale locale) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
177 |
LocaleServiceProviderPool pool = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
178 |
LocaleServiceProviderPool.getPool(TimeZoneNameProvider.class); |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
179 |
String[] names; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
180 |
Map<Locale, String[]> perLocale = null; |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
181 |
|
15260 | 182 |
SoftReference<Map<Locale, String[]>> ref = cachedDisplayNames.get(id); |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
183 |
if (Objects.nonNull(ref)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
184 |
perLocale = ref.get(); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
185 |
if (Objects.nonNull(perLocale)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
186 |
names = perLocale.get(locale); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
187 |
if (Objects.nonNull(names)) { |
15260 | 188 |
return names; |
189 |
} |
|
190 |
} |
|
2 | 191 |
} |
192 |
||
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
193 |
// build names array |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
194 |
names = new String[7]; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
195 |
names[0] = id; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
196 |
for (int i = 1; i <= 6; i ++) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
197 |
names[i] = pool.getLocalizedObject(TimeZoneNameGetter.INSTANCE, locale, |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
198 |
i<5 ? (i<3 ? "std" : "dst") : "generic", i%2, id); |
15260 | 199 |
} |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
200 |
|
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
201 |
if (Objects.isNull(perLocale)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
202 |
perLocale = new ConcurrentHashMap<>(); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
203 |
} |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
204 |
perLocale.put(locale, names); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
205 |
ref = new SoftReference<>(perLocale); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
206 |
cachedDisplayNames.put(id, ref); |
15260 | 207 |
return names; |
2 | 208 |
} |
209 |
||
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
210 |
|
2 | 211 |
/** |
212 |
* Obtains a localized time zone strings from a TimeZoneNameProvider |
|
213 |
* implementation. |
|
214 |
*/ |
|
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
215 |
private static class TimeZoneNameGetter |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
216 |
implements LocaleServiceProviderPool.LocalizedObjectGetter<TimeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
217 |
String> { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
218 |
private static final TimeZoneNameGetter INSTANCE = |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
219 |
new TimeZoneNameGetter(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
220 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
221 |
@Override |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
222 |
public String getObject(TimeZoneNameProvider timeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
223 |
Locale locale, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
224 |
String requestID, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
225 |
Object... params) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
226 |
assert params.length == 2; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
227 |
int style = (int) params[0]; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
228 |
String tzid = (String) params[1]; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
229 |
String value = getName(timeZoneNameProvider, locale, requestID, style, tzid); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
230 |
if (value == null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
231 |
Map<String, String> aliases = ZoneInfo.getAliasTable(); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
232 |
if (aliases != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
233 |
String canonicalID = aliases.get(tzid); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
234 |
if (canonicalID != null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
235 |
value = getName(timeZoneNameProvider, locale, requestID, style, canonicalID); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
236 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
237 |
if (value == null) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
238 |
value = examineAliases(timeZoneNameProvider, locale, requestID, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
239 |
canonicalID != null ? canonicalID : tzid, style, aliases); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
240 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
241 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
242 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
243 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
244 |
return value; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
245 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
246 |
|
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
247 |
private static String examineAliases(TimeZoneNameProvider tznp, Locale locale, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
248 |
String requestID, String tzid, int style, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
249 |
Map<String, String> aliases) { |
29926
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
250 |
for (Map.Entry<String, String> entry : aliases.entrySet()) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
251 |
if (entry.getValue().equals(tzid)) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
252 |
String alias = entry.getKey(); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
253 |
String name = getName(tznp, locale, requestID, style, alias); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
254 |
if (name != null) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
255 |
return name; |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
256 |
} |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
257 |
name = examineAliases(tznp, locale, requestID, alias, style, aliases); |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
258 |
if (name != null) { |
2eceae3716d9
8076287: Performance degradation observed with TimeZone Benchmark
naoto
parents:
25859
diff
changeset
|
259 |
return name; |
14765
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
260 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
261 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
262 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
263 |
return null; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
264 |
} |
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 |
private static String getName(TimeZoneNameProvider timeZoneNameProvider, |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
267 |
Locale locale, String requestID, int style, String tzid) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
268 |
String value = null; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
269 |
switch (requestID) { |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
270 |
case "std": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
271 |
value = timeZoneNameProvider.getDisplayName(tzid, false, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
272 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
273 |
case "dst": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
274 |
value = timeZoneNameProvider.getDisplayName(tzid, true, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
275 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
276 |
case "generic": |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
277 |
value = timeZoneNameProvider.getGenericDisplayName(tzid, style, locale); |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
278 |
break; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
279 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
280 |
return value; |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
281 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
282 |
} |
0987999ed367
8000983: Support narrow display names for calendar fields
okutsu
parents:
13583
diff
changeset
|
283 |
|
13583 | 284 |
// No instantiation |
285 |
private TimeZoneNameUtility() { |
|
286 |
} |
|
2 | 287 |
} |