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);
}
}