Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/classes/sun/util/locale/provider/TimeZoneNameProviderImpl.java
41161 views
1
/*
2
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
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
7
* published by the Free Software Foundation. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
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
*
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.
24
*/
25
26
package sun.util.locale.provider;
27
28
import java.util.Locale;
29
import java.util.Objects;
30
import java.util.Set;
31
import java.util.TimeZone;
32
import java.util.spi.TimeZoneNameProvider;
33
34
/**
35
* Concrete implementation of the
36
* {@link java.util.spi.TimeZoneNameProvider TimeZoneNameProvider} class
37
* for the JRE LocaleProviderAdapter.
38
*
39
* @author Naoto Sato
40
* @author Masayoshi Okutsu
41
*/
42
public class TimeZoneNameProviderImpl extends TimeZoneNameProvider {
43
private final LocaleProviderAdapter.Type type;
44
private final Set<String> langtags;
45
46
protected TimeZoneNameProviderImpl(LocaleProviderAdapter.Type type, Set<String> langtags) {
47
this.type = type;
48
this.langtags = langtags;
49
}
50
51
/**
52
* Returns an array of all locales for which this locale service provider
53
* can provide localized objects or names.
54
*
55
* @return An array of all locales for which this locale service provider
56
* can provide localized objects or names.
57
*/
58
@Override
59
public Locale[] getAvailableLocales() {
60
return LocaleProviderAdapter.toLocaleArray(langtags);
61
}
62
63
@Override
64
public boolean isSupportedLocale(Locale locale) {
65
return LocaleProviderAdapter.forType(type).isSupportedProviderLocale(locale, langtags);
66
}
67
68
/**
69
* Returns a name for the given time zone ID that's suitable for
70
* presentation to the user in the specified locale. The given time
71
* zone ID is "GMT" or one of the names defined using "Zone" entries
72
* in the "tz database", a public domain time zone database at
73
* <a href="ftp://elsie.nci.nih.gov/pub/">ftp://elsie.nci.nih.gov/pub/</a>.
74
* The data of this database is contained in a file whose name starts with
75
* "tzdata", and the specification of the data format is part of the zic.8
76
* man page, which is contained in a file whose name starts with "tzcode".
77
* <p>
78
* If <code>daylight</code> is true, the method should return a name
79
* appropriate for daylight saving time even if the specified time zone
80
* has not observed daylight saving time in the past.
81
*
82
* @param id a time zone ID string
83
* @param daylight if true, return the daylight saving name.
84
* @param style either {@link java.util.TimeZone#LONG TimeZone.LONG} or
85
* {@link java.util.TimeZone#SHORT TimeZone.SHORT}
86
* @param locale the desired locale
87
* @return the human-readable name of the given time zone in the
88
* given locale, or null if it's not available.
89
* @exception IllegalArgumentException if <code>style</code> is invalid,
90
* or <code>locale</code> isn't one of the locales returned from
91
* {@link java.util.spi.LocaleServiceProvider#getAvailableLocales()
92
* getAvailableLocales()}.
93
* @exception NullPointerException if <code>ID</code> or <code>locale</code>
94
* is null
95
* @see java.util.TimeZone#getDisplayName(boolean, int, java.util.Locale)
96
*/
97
@Override
98
public String getDisplayName(String id, boolean daylight, int style, Locale locale) {
99
String[] names = getDisplayNameArray(id, locale);
100
if (Objects.nonNull(names)) {
101
assert names.length >= 7;
102
int index = daylight ? 3 : 1;
103
if (style == TimeZone.SHORT) {
104
index++;
105
}
106
return names[index];
107
}
108
return null;
109
}
110
111
@Override
112
public String getGenericDisplayName(String id, int style, Locale locale) {
113
String[] names = getDisplayNameArray(id, locale);
114
if (Objects.nonNull(names)) {
115
assert names.length >= 7;
116
return names[(style == TimeZone.LONG) ? 5 : 6];
117
}
118
return null;
119
}
120
121
protected String[] getDisplayNameArray(String id, Locale locale) {
122
Objects.requireNonNull(id);
123
Objects.requireNonNull(locale);
124
125
return (String []) LocaleProviderAdapter.forType(type)
126
.getLocaleResources(locale)
127
.getTimeZoneNames(id);
128
}
129
130
/**
131
* Returns a String[][] as the DateFormatSymbols.getZoneStrings() value for
132
* the given locale.
133
*
134
* @param locale a Locale for time zone names
135
* @return an array of time zone names arrays
136
*/
137
protected String[][] getZoneStrings(Locale locale) {
138
return LocaleProviderAdapter.forType(type).getLocaleResources(locale).getZoneStrings();
139
}
140
}
141
142