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;
         }
     }
 }