< prev index next >

src/share/classes/java/util/Calendar.java

Print this page

        

*** 2081,2101 **** if (!checkDisplayNameParams(field, style, SHORT, NARROW_FORMAT, locale, ERA_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) { return null; } // the standalone and narrow styles are supported only through CalendarDataProviders. ! if (isStandaloneStyle(style) || isNarrowStyle(style)) { ! return CalendarDataUtility.retrieveFieldValueName(getCalendarType(), ! field, get(field), style, locale); } DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale); String[] strings = getFieldStrings(field, style, symbols); if (strings != null) { - int fieldValue = get(field); if (fieldValue < strings.length) { return strings[fieldValue]; } } return null; --- 2081,2117 ---- if (!checkDisplayNameParams(field, style, SHORT, NARROW_FORMAT, locale, ERA_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) { return null; } + String calendarType = getCalendarType(); + int fieldValue = get(field); // the standalone and narrow styles are supported only through CalendarDataProviders. ! if (isStandaloneStyle(style) || isNarrowFormatStyle(style)) { ! String val = CalendarDataUtility.retrieveFieldValueName(calendarType, ! field, fieldValue, style, locale); + // Perform fallback here to follow the CLDR rules + if (val == null) { + if (isNarrowFormatStyle(style)) { + val = CalendarDataUtility.retrieveFieldValueName(calendarType, + field, fieldValue, + toStandaloneStyle(style), + locale); + } else if (isStandaloneStyle(style)) { + val = CalendarDataUtility.retrieveFieldValueName(calendarType, + field, fieldValue, + getBaseStyle(style), + locale); + } + } + return val; } DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale); String[] strings = getFieldStrings(field, style, symbols); if (strings != null) { if (fieldValue < strings.length) { return strings[fieldValue]; } } return null;
*** 2153,2166 **** public Map<String, Integer> getDisplayNames(int field, int style, Locale locale) { if (!checkDisplayNameParams(field, style, ALL_STYLES, NARROW_FORMAT, locale, ERA_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) { return null; } ! if (style == ALL_STYLES || isStandaloneStyle(style)) { ! return CalendarDataUtility.retrieveFieldValueNames(getCalendarType(), field, style, locale); } ! // SHORT, LONG, or NARROW return getDisplayNamesImpl(field, style, locale); } private Map<String,Integer> getDisplayNamesImpl(int field, int style, Locale locale) { DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale); --- 2169,2198 ---- public Map<String, Integer> getDisplayNames(int field, int style, Locale locale) { if (!checkDisplayNameParams(field, style, ALL_STYLES, NARROW_FORMAT, locale, ERA_MASK|MONTH_MASK|DAY_OF_WEEK_MASK|AM_PM_MASK)) { return null; } ! ! String calendarType = getCalendarType(); ! if (style == ALL_STYLES || isStandaloneStyle(style) || isNarrowFormatStyle(style)) { ! Map<String, Integer> map; ! map = CalendarDataUtility.retrieveFieldValueNames(calendarType, field, style, locale); ! ! // Perform fallback here to follow the CLDR rules ! if (map == null) { ! if (isNarrowFormatStyle(style)) { ! map = CalendarDataUtility.retrieveFieldValueNames(calendarType, field, ! toStandaloneStyle(style), locale); ! } else if (style != ALL_STYLES) { ! map = CalendarDataUtility.retrieveFieldValueNames(calendarType, field, ! getBaseStyle(style), locale); ! } } ! return map; ! } ! ! // SHORT or LONG return getDisplayNamesImpl(field, style, locale); } private Map<String,Integer> getDisplayNamesImpl(int field, int style, Locale locale) { DateFormatSymbols symbols = DateFormatSymbols.getInstance(locale);
*** 2542,2559 **** int getBaseStyle(int style) { return style & ~STANDALONE_MASK; } ! boolean isStandaloneStyle(int style) { return (style & STANDALONE_MASK) != 0; } ! boolean isNarrowStyle(int style) { return style == NARROW_FORMAT || style == NARROW_STANDALONE; } /** * Returns the pseudo-time-stamp for two fields, given their * individual pseudo-time-stamps. If either of the fields * is unset, then the aggregate is unset. Otherwise, the * aggregate is the later of the two stamps. --- 2574,2599 ---- int getBaseStyle(int style) { return style & ~STANDALONE_MASK; } ! private int toStandaloneStyle(int style) { ! return style | STANDALONE_MASK; ! } ! ! private boolean isStandaloneStyle(int style) { return (style & STANDALONE_MASK) != 0; } ! private boolean isNarrowStyle(int style) { return style == NARROW_FORMAT || style == NARROW_STANDALONE; } + private boolean isNarrowFormatStyle(int style) { + return style == NARROW_FORMAT; + } + /** * Returns the pseudo-time-stamp for two fields, given their * individual pseudo-time-stamps. If either of the fields * is unset, then the aggregate is unset. Otherwise, the * aggregate is the later of the two stamps.
< prev index next >