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); 70 } 71 72 public static Map<String, Integer> retrieveFieldValueNames(String id, int field, int style, Locale locale) { 73 LocaleServiceProviderPool pool = 74 LocaleServiceProviderPool.getPool(CalendarNameProvider.class); 75 return pool.getLocalizedObject(CalendarFieldValueNamesMapGetter.INSTANCE, locale, 76 normalizeCalendarType(id), field, style); 77 } 78 79 private static String normalizeCalendarType(String requestID) { 80 String type; 81 if (requestID.equals("gregorian") || requestID.equals("iso8601")) { 82 type = "gregory"; 83 } else if (requestID.startsWith("islamic")) { 84 type = "islamic"; 85 } else { 86 type = requestID; 87 } 88 return type; 89 } 90 91 /** 92 * Obtains a localized field value string from a CalendarDataProvider 93 * implementation. 94 */ 95 private static class CalendarFieldValueNameGetter 96 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider, 97 String> { 98 private static final CalendarFieldValueNameGetter INSTANCE = 99 new CalendarFieldValueNameGetter(); 100 101 @Override 102 public String getObject(CalendarNameProvider calendarNameProvider, 103 Locale locale, 104 String requestID, // calendarType 105 Object... params) { 106 assert params.length == 3; 107 int field = (int) params[0]; 108 int value = (int) params[1]; 109 int style = (int) params[2]; 110 return calendarNameProvider.getDisplayName(requestID, field, value, style, locale); 111 } 112 } 113 114 /** 115 * Obtains a localized field-value pairs from a CalendarDataProvider 116 * implementation. 117 */ 118 private static class CalendarFieldValueNamesMapGetter 119 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarNameProvider, 120 Map<String, Integer>> { 121 private static final CalendarFieldValueNamesMapGetter INSTANCE = 122 new CalendarFieldValueNamesMapGetter(); 123 124 @Override 125 public Map<String, Integer> getObject(CalendarNameProvider calendarNameProvider, 126 Locale locale, 127 String requestID, // calendarType 128 Object... params) { 129 assert params.length == 2; 130 int field = (int) params[0]; 131 int style = (int) params[1]; 132 return calendarNameProvider.getDisplayNames(requestID, field, style, locale); 133 } 134 } 135 136 private static class CalendarWeekParameterGetter 137 implements LocaleServiceProviderPool.LocalizedObjectGetter<CalendarDataProvider, 138 Integer> { 139 private static final CalendarWeekParameterGetter INSTANCE = 140 new CalendarWeekParameterGetter(); 141 142 @Override 143 public Integer getObject(CalendarDataProvider calendarDataProvider, 144 Locale locale, 145 String requestID, // resource key 146 Object... params) { 147 assert params.length == 0; 148 int value; 149 switch (requestID) { 150 case FIRST_DAY_OF_WEEK: 151 value = calendarDataProvider.getFirstDayOfWeek(locale); | 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 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; 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 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) { 196 case FIRST_DAY_OF_WEEK: 197 value = calendarDataProvider.getFirstDayOfWeek(locale); |