Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/util/locale/provider/CalendarDataUtility.java
38918 views
1
/*
2
* Copyright (c) 2012, 2013, 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 static java.util.Calendar.*;
29
import java.util.Locale;
30
import java.util.Map;
31
import java.util.spi.CalendarDataProvider;
32
import java.util.spi.CalendarNameProvider;
33
34
/**
35
* {@code CalendarDataUtility} is a utility class for calling the
36
* {@link CalendarDataProvider} methods.
37
*
38
* @author Masayoshi Okutsu
39
* @author Naoto Sato
40
*/
41
public class CalendarDataUtility {
42
public final static String FIRST_DAY_OF_WEEK = "firstDayOfWeek";
43
public final static String MINIMAL_DAYS_IN_FIRST_WEEK = "minimalDaysInFirstWeek";
44
45
// No instantiation
46
private CalendarDataUtility() {
47
}
48
49
public static int retrieveFirstDayOfWeek(Locale locale) {
50
LocaleServiceProviderPool pool =
51
LocaleServiceProviderPool.getPool(CalendarDataProvider.class);
52
Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE,
53
locale, FIRST_DAY_OF_WEEK);
54
return (value != null && (value >= SUNDAY && value <= SATURDAY)) ? value : SUNDAY;
55
}
56
57
public static int retrieveMinimalDaysInFirstWeek(Locale locale) {
58
LocaleServiceProviderPool pool =
59
LocaleServiceProviderPool.getPool(CalendarDataProvider.class);
60
Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE,
61
locale, MINIMAL_DAYS_IN_FIRST_WEEK);
62
return (value != null && (value >= 1 && value <= 7)) ? value : 1;
63
}
64
65
public static String retrieveFieldValueName(String id, int field, int value, int style, Locale locale) {
66
LocaleServiceProviderPool pool =
67
LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
68
return pool.getLocalizedObject(CalendarFieldValueNameGetter.INSTANCE, locale, normalizeCalendarType(id),
69
field, value, style, false);
70
}
71
72
public static String retrieveJavaTimeFieldValueName(String id, int field, int value, int style, Locale locale) {
73
LocaleServiceProviderPool pool =
74
LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
75
String name;
76
name = pool.getLocalizedObject(CalendarFieldValueNameGetter.INSTANCE, locale, normalizeCalendarType(id),
77
field, value, style, true);
78
if (name == null) {
79
name = pool.getLocalizedObject(CalendarFieldValueNameGetter.INSTANCE, locale, normalizeCalendarType(id),
80
field, value, style, false);
81
}
82
return name;
83
}
84
85
public static Map<String, Integer> retrieveFieldValueNames(String id, int field, int style, Locale locale) {
86
LocaleServiceProviderPool pool =
87
LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
88
return pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale,
89
normalizeCalendarType(id), field, style, false);
90
}
91
92
public static Map<String, Integer> retrieveJavaTimeFieldValueNames(String id, int field, int style, Locale locale) {
93
LocaleServiceProviderPool pool =
94
LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
95
Map<String, Integer> map;
96
map = pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale,
97
normalizeCalendarType(id), field, style, true);
98
if (map == null) {
99
map = pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale,
100
normalizeCalendarType(id), field, style, false);
101
}
102
return map;
103
}
104
105
static String normalizeCalendarType(String requestID) {
106
String type;
107
if (requestID.equals("gregorian") || requestID.equals("iso8601")) {
108
type = "gregory";
109
} else if (requestID.startsWith("islamic")) {
110
type = "islamic";
111
} else {
112
type = requestID;
113
}
114
return type;
115
}
116
117
/**
118
* Obtains a localized field value string from a CalendarDataProvider
119
* implementation.
120
*/
121
private static class CalendarFieldValueNameGetter
122
implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider,
123
String> {
124
private static final CalendarFieldValueNameGetter INSTANCE =
125
new CalendarFieldValueNameGetter();
126
127
@Override
128
public String getObject(CalendarNameProvider calendarNameProvider,
129
Locale locale,
130
String requestID, // calendarType
131
Object... params) {
132
assert params.length == 4;
133
int field = (int) params[0];
134
int value = (int) params[1];
135
int style = (int) params[2];
136
boolean javatime = (boolean) params[3];
137
138
// If javatime is true, resources from CLDR have precedence over JRE
139
// native resources.
140
if (javatime && calendarNameProvider instanceof CalendarNameProviderImpl) {
141
String name;
142
name = ((CalendarNameProviderImpl)calendarNameProvider)
143
.getJavaTimeDisplayName(requestID, field, value, style, locale);
144
return name;
145
}
146
return calendarNameProvider.getDisplayName(requestID, field, value, style, locale);
147
}
148
}
149
150
/**
151
* Obtains a localized field-value pairs from a CalendarDataProvider
152
* implementation.
153
*/
154
private static class CalendarFieldValueNamesMapGetter
155
implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider,
156
Map<String, Integer>> {
157
private static final CalendarFieldValueNamesMapGetter INSTANCE =
158
new CalendarFieldValueNamesMapGetter();
159
160
@Override
161
public Map<String, Integer> getObject(CalendarNameProvider calendarNameProvider,
162
Locale locale,
163
String requestID, // calendarType
164
Object... params) {
165
assert params.length == 3;
166
int field = (int) params[0];
167
int style = (int) params[1];
168
boolean javatime = (boolean) params[2];
169
170
// If javatime is true, resources from CLDR have precedence over JRE
171
// native resources.
172
if (javatime && calendarNameProvider instanceof CalendarNameProviderImpl) {
173
Map<String, Integer> map;
174
map = ((CalendarNameProviderImpl)calendarNameProvider)
175
.getJavaTimeDisplayNames(requestID, field, style, locale);
176
return map;
177
}
178
return calendarNameProvider.getDisplayNames(requestID, field, style, locale);
179
}
180
}
181
182
private static class CalendarWeekParameterGetter
183
implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider,
184
Integer> {
185
private static final CalendarWeekParameterGetter INSTANCE =
186
new CalendarWeekParameterGetter();
187
188
@Override
189
public Integer getObject(CalendarDataProvider calendarDataProvider,
190
Locale locale,
191
String requestID, // resource key
192
Object... params) {
193
assert params.length == 0;
194
int value;
195
switch (requestID) {
196
case FIRST_DAY_OF_WEEK:
197
value = calendarDataProvider.getFirstDayOfWeek(locale);
198
break;
199
case MINIMAL_DAYS_IN_FIRST_WEEK:
200
value = calendarDataProvider.getMinimalDaysInFirstWeek(locale);
201
break;
202
default:
203
throw new InternalError("invalid requestID: " + requestID);
204
}
205
return (value != 0) ? value : null;
206
}
207
}
208
}
209
210