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/AuxLocaleProviderAdapter.java
41161 views
1
/*
2
* Copyright (c) 2012, 2021, 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.security.AccessController;
29
import java.security.PrivilegedAction;
30
import java.text.spi.BreakIteratorProvider;
31
import java.text.spi.CollatorProvider;
32
import java.text.spi.DateFormatProvider;
33
import java.text.spi.DateFormatSymbolsProvider;
34
import java.text.spi.DecimalFormatSymbolsProvider;
35
import java.text.spi.NumberFormatProvider;
36
import java.util.ArrayList;
37
import java.util.Arrays;
38
import java.util.List;
39
import java.util.Locale;
40
import java.util.concurrent.ConcurrentHashMap;
41
import java.util.concurrent.ConcurrentMap;
42
import java.util.spi.CalendarDataProvider;
43
import java.util.spi.CalendarNameProvider;
44
import java.util.spi.CurrencyNameProvider;
45
import java.util.spi.LocaleNameProvider;
46
import java.util.spi.LocaleServiceProvider;
47
import java.util.spi.TimeZoneNameProvider;
48
import sun.text.spi.JavaTimeDateTimePatternProvider;
49
import sun.util.spi.CalendarProvider;
50
51
/**
52
* An abstract parent class for the
53
* HostLocaleProviderAdapter/SPILocaleProviderAdapter.
54
*
55
* @author Naoto Sato
56
* @author Masayoshi Okutsu
57
*/
58
public abstract class AuxLocaleProviderAdapter extends LocaleProviderAdapter {
59
/**
60
* SPI implementations map
61
*/
62
private final ConcurrentMap<Class<? extends LocaleServiceProvider>, LocaleServiceProvider> providersMap =
63
new ConcurrentHashMap<>();
64
65
/**
66
* Getter method for Locale Service Providers
67
*/
68
@Override
69
public <P extends LocaleServiceProvider> P getLocaleServiceProvider(Class<P> c) {
70
@SuppressWarnings("unchecked")
71
P lsp = (P) providersMap.get(c);
72
if (lsp == null) {
73
lsp = findInstalledProvider(c);
74
providersMap.putIfAbsent(c, lsp == null ? NULL_PROVIDER : lsp);
75
}
76
77
return lsp;
78
}
79
80
/**
81
* Real body to find an implementation for each SPI.
82
*
83
* @param <P>
84
* @param c
85
* @return
86
*/
87
protected abstract <P extends LocaleServiceProvider> P findInstalledProvider(final Class<P> c);
88
89
@Override
90
public BreakIteratorProvider getBreakIteratorProvider() {
91
return getLocaleServiceProvider(BreakIteratorProvider.class);
92
}
93
94
@Override
95
public CollatorProvider getCollatorProvider() {
96
return getLocaleServiceProvider(CollatorProvider.class);
97
}
98
99
@Override
100
public DateFormatProvider getDateFormatProvider() {
101
return getLocaleServiceProvider(DateFormatProvider.class);
102
}
103
104
@Override
105
public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
106
return getLocaleServiceProvider(DateFormatSymbolsProvider.class);
107
}
108
109
@Override
110
public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
111
return getLocaleServiceProvider(DecimalFormatSymbolsProvider.class);
112
}
113
114
@Override
115
public NumberFormatProvider getNumberFormatProvider() {
116
return getLocaleServiceProvider(NumberFormatProvider.class);
117
}
118
119
/**
120
* Getter methods for java.util.spi.* providers
121
*/
122
@Override
123
public CurrencyNameProvider getCurrencyNameProvider() {
124
return getLocaleServiceProvider(CurrencyNameProvider.class);
125
}
126
127
@Override
128
public LocaleNameProvider getLocaleNameProvider() {
129
return getLocaleServiceProvider(LocaleNameProvider.class);
130
}
131
132
@Override
133
public TimeZoneNameProvider getTimeZoneNameProvider() {
134
return getLocaleServiceProvider(TimeZoneNameProvider.class);
135
}
136
137
@Override
138
public CalendarDataProvider getCalendarDataProvider() {
139
return getLocaleServiceProvider(CalendarDataProvider.class);
140
}
141
142
@Override
143
public CalendarNameProvider getCalendarNameProvider() {
144
return getLocaleServiceProvider(CalendarNameProvider.class);
145
}
146
147
/**
148
* Getter methods for sun.util.spi.* providers
149
*/
150
@Override
151
public CalendarProvider getCalendarProvider() {
152
return getLocaleServiceProvider(CalendarProvider.class);
153
}
154
155
@Override
156
public LocaleResources getLocaleResources(Locale locale) {
157
return null;
158
}
159
160
@Override
161
public JavaTimeDateTimePatternProvider getJavaTimeDateTimePatternProvider() {
162
return getLocaleServiceProvider(JavaTimeDateTimePatternProvider.class);
163
}
164
165
private static Locale[] availableLocales = null;
166
167
@Override
168
public Locale[] getAvailableLocales() {
169
if (availableLocales == null) {
170
List<Locale> avail = new ArrayList<>();
171
for (Class<? extends LocaleServiceProvider> c :
172
LocaleServiceProviderPool.spiClasses) {
173
LocaleServiceProvider lsp = getLocaleServiceProvider(c);
174
if (lsp != null) {
175
avail.addAll(Arrays.asList(lsp.getAvailableLocales()));
176
}
177
}
178
availableLocales = avail.toArray(new Locale[0]);
179
}
180
181
// assuming caller won't mutate the array.
182
return availableLocales;
183
}
184
185
/**
186
* A dummy locale service provider that indicates there is no
187
* provider available
188
*/
189
@SuppressWarnings("removal")
190
private static final NullProvider NULL_PROVIDER = AccessController.doPrivileged(
191
(PrivilegedAction<NullProvider>) () -> new NullProvider());
192
193
private static class NullProvider extends LocaleServiceProvider {
194
@Override
195
public Locale[] getAvailableLocales() {
196
return new Locale[0];
197
}
198
}
199
}
200
201