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