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

Print this page

        

*** 26,40 **** package sun.util.locale.provider; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; ! import java.text.*; ! import java.text.spi.*; ! import java.util.*; ! import java.util.concurrent.*; ! import java.util.spi.*; /** * LocaleProviderAdapter implementation for the installed SPI implementations. * * @author Naoto Sato --- 26,58 ---- package sun.util.locale.provider; import java.security.AccessController; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; ! import java.text.BreakIterator; ! import java.text.Collator; ! import java.text.DateFormat; ! import java.text.DateFormatSymbols; ! import java.text.DecimalFormatSymbols; ! import java.text.NumberFormat; ! import java.text.spi.BreakIteratorProvider; ! import java.text.spi.CollatorProvider; ! import java.text.spi.DateFormatProvider; ! import java.text.spi.DateFormatSymbolsProvider; ! import java.text.spi.DecimalFormatSymbolsProvider; ! import java.text.spi.NumberFormatProvider; ! import java.util.Locale; ! import java.util.Map; ! import java.util.ServiceLoader; ! import java.util.concurrent.ConcurrentHashMap; ! import java.util.concurrent.ConcurrentMap; ! import java.util.spi.CalendarDataProvider; ! import java.util.spi.CalendarNameProvider; ! import java.util.spi.CurrencyNameProvider; ! import java.util.spi.LocaleNameProvider; ! import java.util.spi.LocaleServiceProvider; ! import java.util.spi.TimeZoneNameProvider; /** * LocaleProviderAdapter implementation for the installed SPI implementations. * * @author Naoto Sato
*** 409,433 **** public int getMinimalDaysInFirstWeek(Locale locale) { CalendarDataProvider cdp = getImpl(locale); assert cdp != null; return cdp.getMinimalDaysInFirstWeek(locale); } @Override public String getDisplayName(String calendarType, int field, int value, int style, Locale locale) { ! CalendarDataProvider cdp = getImpl(locale); assert cdp != null; return cdp.getDisplayName(calendarType, field, value, style, locale); } @Override public Map<String, Integer> getDisplayNames(String calendarType, int field, int style, Locale locale) { ! CalendarDataProvider cdp = getImpl(locale); assert cdp != null; return cdp.getDisplayNames(calendarType, field, style, locale); } } --- 427,478 ---- public int getMinimalDaysInFirstWeek(Locale locale) { CalendarDataProvider cdp = getImpl(locale); assert cdp != null; return cdp.getMinimalDaysInFirstWeek(locale); } + } + + static class CalendarNameProviderDelegate extends CalendarNameProvider + implements Delegate<CalendarNameProvider> { + private ConcurrentMap<Locale, CalendarNameProvider> map = new ConcurrentHashMap<>(); + + @Override + public void addImpl(CalendarNameProvider impl) { + for (Locale l : impl.getAvailableLocales()) { + map.put(l, impl); + } + } + + @Override + public CalendarNameProvider getImpl(Locale locale) { + return SPILocaleProviderAdapter.getImpl(map, locale); + } + + @Override + public Locale[] getAvailableLocales() { + return map.keySet().toArray(new Locale[0]); + } + + @Override + public boolean isSupportedLocale(Locale locale) { + return map.containsKey(locale); + } @Override public String getDisplayName(String calendarType, int field, int value, int style, Locale locale) { ! CalendarNameProvider cdp = getImpl(locale); assert cdp != null; return cdp.getDisplayName(calendarType, field, value, style, locale); } @Override public Map<String, Integer> getDisplayNames(String calendarType, int field, int style, Locale locale) { ! CalendarNameProvider cdp = getImpl(locale); assert cdp != null; return cdp.getDisplayNames(calendarType, field, style, locale); } }