src/share/classes/sun/util/locale/provider/CalendarDataUtility.java
Print this page
@@ -23,13 +23,16 @@
* questions.
*/
package sun.util.locale.provider;
+import java.util.Calendar;
+import static java.util.Calendar.*;
import java.util.Locale;
import java.util.Map;
import java.util.spi.CalendarDataProvider;
+import java.util.spi.CalendarNameProvider;
/**
* {@code CalendarDataUtility} is a utility class for calling the
* {@link CalendarDataProvider} methods.
*
@@ -42,63 +45,106 @@
// No instantiation
private CalendarDataUtility() {
}
- public static String retrieveFieldValueName(String id, int field, int value, int style, Locale locale) {
+ public static int retrieveFirstDayOfWeek(Locale locale) {
+ LocaleServiceProviderPool pool =
+ LocaleServiceProviderPool.getPool(CalendarDataProvider.class);
+ Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE,
+ locale, FIRST_DAY_OF_WEEK);
+ return (value != null && (value >= SUNDAY && value <= SATURDAY)) ? value : SUNDAY;
+ }
+
+ public static int retrieveMinimalDaysInFirstWeek(Locale locale) {
LocaleServiceProviderPool pool =
LocaleServiceProviderPool.getPool(CalendarDataProvider.class);
+ Integer value = pool.getLocalizedObject(CalendarWeekParameterGetter.INSTANCE,
+ locale, MINIMAL_DAYS_IN_FIRST_WEEK);
+ return (value != null && (value >= 1 && value <= 7)) ? value : 1;
+ }
+
+ public static String retrieveFieldValueName(String id, int field, int value, int style, Locale locale) {
+ LocaleServiceProviderPool pool =
+ LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
return pool.getLocalizedObject(CalendarFieldValueNameGetter.INSTANCE, locale, id,
field, value, style);
}
public static Map<String, Integer> retrieveFieldValueNames(String id, int field, int style, Locale locale) {
LocaleServiceProviderPool pool =
- LocaleServiceProviderPool.getPool(CalendarDataProvider.class);
+ LocaleServiceProviderPool.getPool(CalendarNameProvider.class);
return pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale, id, field, style);
}
/**
* Obtains a localized field value string from a CalendarDataProvider
* implementation.
*/
private static class CalendarFieldValueNameGetter
- implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider,
+ implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider,
String> {
private static final CalendarFieldValueNameGetter INSTANCE =
new CalendarFieldValueNameGetter();
@Override
- public String getObject(CalendarDataProvider calendarDataProvider,
+ public String getObject(CalendarNameProvider calendarNameProvider,
Locale locale,
String requestID, // calendarType
Object... params) {
assert params.length == 3;
int field = (int) params[0];
int value = (int) params[1];
int style = (int) params[2];
- return calendarDataProvider.getDisplayName(requestID, field, value, style, locale);
+ return calendarNameProvider.getDisplayName(requestID, field, value, style, locale);
}
}
/**
* Obtains a localized field-value pairs from a CalendarDataProvider
* implementation.
*/
private static class CalendarFieldValueNamesMapGetter
- implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider,
+ implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider,
Map<String, Integer>> {
private static final CalendarFieldValueNamesMapGetter INSTANCE =
new CalendarFieldValueNamesMapGetter();
@Override
- public Map<String, Integer> getObject(CalendarDataProvider calendarDataProvider,
+ public Map<String, Integer> getObject(CalendarNameProvider calendarNameProvider,
Locale locale,
String requestID, // calendarType
Object... params) {
assert params.length == 2;
int field = (int) params[0];
int style = (int) params[1];
- return calendarDataProvider.getDisplayNames(requestID, field, style, locale);
+ return calendarNameProvider.getDisplayNames(requestID, field, style, locale);
+ }
+ }
+
+ private static class CalendarWeekParameterGetter
+ implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider,
+ Integer> {
+ private static final CalendarWeekParameterGetter INSTANCE =
+ new CalendarWeekParameterGetter();
+
+ @Override
+ public Integer getObject(CalendarDataProvider calendarDataProvider,
+ Locale locale,
+ String requestID, // resource key
+ Object... params) {
+ assert params.length == 0;
+ int value;
+ switch (requestID) {
+ case FIRST_DAY_OF_WEEK:
+ value = calendarDataProvider.getFirstDayOfWeek(locale);
+ break;
+ case MINIMAL_DAYS_IN_FIRST_WEEK:
+ value = calendarDataProvider.getMinimalDaysInFirstWeek(locale);
+ break;
+ default:
+ throw new InternalError("invalid requestID: " + requestID);
+ }
+ return (value != 0) ? value : null;
}
}
}