src/share/classes/sun/util/locale/provider/CalendarDataProviderImpl.java

Print this page

        

*** 22,35 **** * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.util.locale.provider; import static java.util.Calendar.*; - import java.util.HashMap; import java.util.Locale; - import java.util.Map; import java.util.ResourceBundle; import java.util.Set; import java.util.spi.CalendarDataProvider; /** --- 22,34 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.util.locale.provider; + import java.util.Calendar; import static java.util.Calendar.*; import java.util.Locale; import java.util.ResourceBundle; import java.util.Set; import java.util.spi.CalendarDataProvider; /**
*** 57,226 **** public int getMinimalDaysInFirstWeek(Locale locale) { return getIntData(CalendarDataUtility.MINIMAL_DAYS_IN_FIRST_WEEK, locale); } @Override - public String getDisplayName(String calendarType, int field, int value, int style, Locale locale) { - String name = null; - String key = getKey(calendarType, field, style); - if (key != null) { - ResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getDateFormatData(locale); - if (rb.containsKey(key)) { - String[] strings = rb.getStringArray(key); - if (strings.length > 0) { - if (field == DAY_OF_WEEK || field == YEAR) { - --value; - } - name = strings[value]; - // If name is empty in standalone, try its `format' style. - if (name.length() == 0 - && (style == SHORT_STANDALONE || style == LONG_STANDALONE)) { - name = getDisplayName(calendarType, field, value, - style == SHORT_STANDALONE ? SHORT_FORMAT : LONG_FORMAT, - locale); - } - } - } - } - return name; - } - - @Override - public Map<String, Integer> getDisplayNames(String calendarType, int field, int style, Locale locale) { - Map<String, Integer> names; - if (style == ALL_STYLES) { - names = getDisplayNamesImpl(calendarType, field, SHORT_FORMAT, locale); - if (field != AM_PM) { - for (int st : new int[] { SHORT_STANDALONE, LONG_FORMAT, LONG_STANDALONE }) { - names.putAll(getDisplayNamesImpl(calendarType, field, st, locale)); - } - } - } else { - // specific style - names = getDisplayNamesImpl(calendarType, field, style, locale); - } - return names.isEmpty() ? null : names; - } - - private Map<String, Integer> getDisplayNamesImpl(String calendarType, int field, - int style, Locale locale) { - String key = getKey(calendarType, field, style); - Map<String, Integer> map = new HashMap<>(); - if (key != null) { - ResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getDateFormatData(locale); - if (rb.containsKey(key)) { - String[] strings = rb.getStringArray(key); - if (field == YEAR) { - if (strings.length > 0) { - map.put(strings[0], 1); - } - } else { - int base = (field == DAY_OF_WEEK) ? 1 : 0; - for (int i = 0; i < strings.length; i++) { - String name = strings[i]; - // Ignore any empty string (some standalone month names - // are not defined) - if (name.length() == 0) { - continue; - } - map.put(name, base + i); - } - } - } - } - return map; - } - - @Override public Locale[] getAvailableLocales() { return LocaleProviderAdapter.toLocaleArray(langtags); } @Override - public boolean isSupportedLocale(Locale locale) { - if (Locale.ROOT.equals(locale)) { - return true; - } - String calendarType = null; - if (locale.hasExtensions()) { - calendarType = locale.getUnicodeLocaleType("ca"); - locale = locale.stripExtensions(); - } - - if (calendarType != null) { - switch (calendarType) { - case "buddhist": - case "japanese": - case "gregory": - break; - default: - // Unknown calendar type - return false; - } - } - if (langtags.contains(locale.toLanguageTag())) { - return true; - } - if (type == LocaleProviderAdapter.Type.JRE) { - String oldname = locale.toString().replace('_', '-'); - return langtags.contains(oldname); - } - return false; - } - - @Override public Set<String> getAvailableLanguageTags() { return langtags; } private int getIntData(String key, Locale locale) { ResourceBundle rb = LocaleProviderAdapter.forType(type).getLocaleData().getCalendarData(locale); if (rb.containsKey(key)) { String firstday = rb.getString(key); return Integer.parseInt(firstday); } - // Note that the base bundle of CLDR doesn't have the Calendar week parameters. return 0; } - - private String getKey(String type, int field, int style) { - boolean standalone = (style & 0x8000) != 0; - style &= ~0x8000; - - if ("gregory".equals(type)) { - type = null; - } - - StringBuilder key = new StringBuilder(); - switch (field) { - case ERA: - if (type != null) { - key.append(type).append('.'); - } - if (style == SHORT) { - key.append("short."); - } - key.append("Eras"); - break; - - case YEAR: - key.append(type).append(".FirstYear"); - break; - - case MONTH: - if (standalone) { - key.append("standalone."); - } - key.append(style == SHORT ? "MonthAbbreviations" : "MonthNames"); - break; - - case DAY_OF_WEEK: - key.append(style == SHORT ? "DayAbbreviations" : "DayNames"); - break; - - case AM_PM: - key.append("AmPmMarkers"); - break; - } - return key.length() > 0 ? key.toString() : null; - } } --- 56,78 ----