1 /*
2 * Copyright (c) 2012, 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
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 retrieveCldrFieldValueName(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> retrieveCldrFieldValueNames(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;
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 cldr = (boolean) params[3];
137
138 // If cldr is true, resources from CLDR have precedence over JRE
139 // native resources.
140 if (cldr && calendarNameProvider instanceof CalendarNameProviderImpl) {
141 String name;
142 name = ((CalendarNameProviderImpl)calendarNameProvider)
143 .getCldrDisplayName(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 cldr = (boolean) params[2];
169
170 // If cldr is true, resources from CLDR have precedence over JRE
171 // native resources.
172 if (cldr && calendarNameProvider instanceof CalendarNameProviderImpl) {
173 Map<String, Integer> map;
174 map = ((CalendarNameProviderImpl)calendarNameProvider)
175 .getCldrDisplayNames(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) {
|
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
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;
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) {
|