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

Print this page




  24  */
  25 
  26 package sun.util.locale.provider;
  27 
  28 import java.io.File;
  29 import java.security.AccessController;
  30 import java.security.PrivilegedAction;
  31 import java.text.spi.BreakIteratorProvider;
  32 import java.text.spi.CollatorProvider;
  33 import java.text.spi.DateFormatProvider;
  34 import java.text.spi.DateFormatSymbolsProvider;
  35 import java.text.spi.DecimalFormatSymbolsProvider;
  36 import java.text.spi.NumberFormatProvider;
  37 import java.util.HashSet;
  38 import java.util.Locale;
  39 import java.util.Set;
  40 import java.util.StringTokenizer;
  41 import java.util.concurrent.ConcurrentHashMap;
  42 import java.util.concurrent.ConcurrentMap;
  43 import java.util.spi.CalendarDataProvider;

  44 import java.util.spi.CurrencyNameProvider;
  45 import java.util.spi.LocaleNameProvider;
  46 import java.util.spi.LocaleServiceProvider;
  47 import java.util.spi.TimeZoneNameProvider;
  48 import sun.util.resources.LocaleData;
  49 
  50 /**
  51  * LocaleProviderAdapter implementation for the legacy JRE locale data.
  52  *
  53  * @author Naoto Sato
  54  * @author Masayoshi Okutsu
  55  */
  56 public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
  57 
  58     private static final String LOCALE_DATA_JAR_NAME = "localedata.jar";
  59 
  60     private final ConcurrentMap<String, Set<String>> langtagSets
  61         = new ConcurrentHashMap<>();
  62 
  63     private final ConcurrentMap<Locale, LocaleResources> localeResourcesMap


  84         case "BreakIteratorProvider":
  85             return (P) getBreakIteratorProvider();
  86         case "CollatorProvider":
  87             return (P) getCollatorProvider();
  88         case "DateFormatProvider":
  89             return (P) getDateFormatProvider();
  90         case "DateFormatSymbolsProvider":
  91             return (P) getDateFormatSymbolsProvider();
  92         case "DecimalFormatSymbolsProvider":
  93             return (P) getDecimalFormatSymbolsProvider();
  94         case "NumberFormatProvider":
  95             return (P) getNumberFormatProvider();
  96         case "CurrencyNameProvider":
  97             return (P) getCurrencyNameProvider();
  98         case "LocaleNameProvider":
  99             return (P) getLocaleNameProvider();
 100         case "TimeZoneNameProvider":
 101             return (P) getTimeZoneNameProvider();
 102         case "CalendarDataProvider":
 103             return (P) getCalendarDataProvider();


 104         default:
 105             throw new InternalError("should not come down here");
 106         }
 107     }
 108 
 109     private volatile BreakIteratorProvider breakIteratorProvider = null;
 110     private volatile CollatorProvider collatorProvider = null;
 111     private volatile DateFormatProvider dateFormatProvider = null;
 112     private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider = null;
 113     private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider = null;
 114     private volatile NumberFormatProvider numberFormatProvider = null;
 115 
 116     private volatile CurrencyNameProvider currencyNameProvider = null;
 117     private volatile LocaleNameProvider localeNameProvider = null;
 118     private volatile TimeZoneNameProvider timeZoneNameProvider = null;
 119     private volatile CalendarDataProvider calendarDataProvider = null;

 120 
 121     /*
 122      * Getter methods for java.text.spi.* providers
 123      */
 124     @Override
 125     public BreakIteratorProvider getBreakIteratorProvider() {
 126         if (breakIteratorProvider == null) {
 127             BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
 128                                                             getLanguageTagSet("FormatData"));
 129             synchronized (this) {
 130                 if (breakIteratorProvider == null) {
 131                     breakIteratorProvider = provider;
 132                 }
 133             }
 134         }
 135         return breakIteratorProvider;
 136     }
 137 
 138     @Override
 139     public CollatorProvider getCollatorProvider() {


 235         return localeNameProvider;
 236     }
 237 
 238     @Override
 239     public TimeZoneNameProvider getTimeZoneNameProvider() {
 240         if (timeZoneNameProvider == null) {
 241             TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
 242                                                     getLanguageTagSet("TimeZoneNames"));
 243             synchronized (this) {
 244                 if (timeZoneNameProvider == null) {
 245                     timeZoneNameProvider = provider;
 246                 }
 247             }
 248         }
 249         return timeZoneNameProvider;
 250     }
 251 
 252     @Override
 253     public CalendarDataProvider getCalendarDataProvider() {
 254         if (calendarDataProvider == null) {
 255             Set<String> set = new HashSet<>();
 256             set.addAll(getLanguageTagSet("FormatData"));
 257             set.addAll(getLanguageTagSet("CalendarData"));
 258             CalendarDataProvider provider = new CalendarDataProviderImpl(getAdapterType(),
 259                                                                          set);
 260             synchronized (this) {
 261                 if (calendarDataProvider == null) {
 262                     calendarDataProvider = provider;
 263                 }
 264             }
 265         }
 266         return calendarDataProvider;















 267     }
 268 
 269     @Override
 270     public LocaleResources getLocaleResources(Locale locale) {
 271         LocaleResources lr = localeResourcesMap.get(locale);
 272         if (lr == null) {
 273             lr = new LocaleResources(this, locale);
 274             LocaleResources lrc = localeResourcesMap.putIfAbsent(locale, lr);
 275             if (lrc != null) {
 276                 lr = lrc;
 277             }
 278         }
 279         return lr;
 280     }
 281 
 282     @Override
 283     public LocaleData getLocaleData() {
 284         if (localeData == null) {
 285             synchronized (this) {
 286                 if (localeData == null) {




  24  */
  25 
  26 package sun.util.locale.provider;
  27 
  28 import java.io.File;
  29 import java.security.AccessController;
  30 import java.security.PrivilegedAction;
  31 import java.text.spi.BreakIteratorProvider;
  32 import java.text.spi.CollatorProvider;
  33 import java.text.spi.DateFormatProvider;
  34 import java.text.spi.DateFormatSymbolsProvider;
  35 import java.text.spi.DecimalFormatSymbolsProvider;
  36 import java.text.spi.NumberFormatProvider;
  37 import java.util.HashSet;
  38 import java.util.Locale;
  39 import java.util.Set;
  40 import java.util.StringTokenizer;
  41 import java.util.concurrent.ConcurrentHashMap;
  42 import java.util.concurrent.ConcurrentMap;
  43 import java.util.spi.CalendarDataProvider;
  44 import java.util.spi.CalendarNameProvider;
  45 import java.util.spi.CurrencyNameProvider;
  46 import java.util.spi.LocaleNameProvider;
  47 import java.util.spi.LocaleServiceProvider;
  48 import java.util.spi.TimeZoneNameProvider;
  49 import sun.util.resources.LocaleData;
  50 
  51 /**
  52  * LocaleProviderAdapter implementation for the legacy JRE locale data.
  53  *
  54  * @author Naoto Sato
  55  * @author Masayoshi Okutsu
  56  */
  57 public class JRELocaleProviderAdapter extends LocaleProviderAdapter {
  58 
  59     private static final String LOCALE_DATA_JAR_NAME = "localedata.jar";
  60 
  61     private final ConcurrentMap<String, Set<String>> langtagSets
  62         = new ConcurrentHashMap<>();
  63 
  64     private final ConcurrentMap<Locale, LocaleResources> localeResourcesMap


  85         case "BreakIteratorProvider":
  86             return (P) getBreakIteratorProvider();
  87         case "CollatorProvider":
  88             return (P) getCollatorProvider();
  89         case "DateFormatProvider":
  90             return (P) getDateFormatProvider();
  91         case "DateFormatSymbolsProvider":
  92             return (P) getDateFormatSymbolsProvider();
  93         case "DecimalFormatSymbolsProvider":
  94             return (P) getDecimalFormatSymbolsProvider();
  95         case "NumberFormatProvider":
  96             return (P) getNumberFormatProvider();
  97         case "CurrencyNameProvider":
  98             return (P) getCurrencyNameProvider();
  99         case "LocaleNameProvider":
 100             return (P) getLocaleNameProvider();
 101         case "TimeZoneNameProvider":
 102             return (P) getTimeZoneNameProvider();
 103         case "CalendarDataProvider":
 104             return (P) getCalendarDataProvider();
 105         case "CalendarNameProvider":
 106             return (P) getCalendarNameProvider();
 107         default:
 108             throw new InternalError("should not come down here");
 109         }
 110     }
 111 
 112     private volatile BreakIteratorProvider breakIteratorProvider = null;
 113     private volatile CollatorProvider collatorProvider = null;
 114     private volatile DateFormatProvider dateFormatProvider = null;
 115     private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider = null;
 116     private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider = null;
 117     private volatile NumberFormatProvider numberFormatProvider = null;
 118 
 119     private volatile CurrencyNameProvider currencyNameProvider = null;
 120     private volatile LocaleNameProvider localeNameProvider = null;
 121     private volatile TimeZoneNameProvider timeZoneNameProvider = null;
 122     private volatile CalendarDataProvider calendarDataProvider = null;
 123     private volatile CalendarNameProvider calendarNameProvider = null;
 124 
 125     /*
 126      * Getter methods for java.text.spi.* providers
 127      */
 128     @Override
 129     public BreakIteratorProvider getBreakIteratorProvider() {
 130         if (breakIteratorProvider == null) {
 131             BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
 132                                                             getLanguageTagSet("FormatData"));
 133             synchronized (this) {
 134                 if (breakIteratorProvider == null) {
 135                     breakIteratorProvider = provider;
 136                 }
 137             }
 138         }
 139         return breakIteratorProvider;
 140     }
 141 
 142     @Override
 143     public CollatorProvider getCollatorProvider() {


 239         return localeNameProvider;
 240     }
 241 
 242     @Override
 243     public TimeZoneNameProvider getTimeZoneNameProvider() {
 244         if (timeZoneNameProvider == null) {
 245             TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
 246                                                     getLanguageTagSet("TimeZoneNames"));
 247             synchronized (this) {
 248                 if (timeZoneNameProvider == null) {
 249                     timeZoneNameProvider = provider;
 250                 }
 251             }
 252         }
 253         return timeZoneNameProvider;
 254     }
 255 
 256     @Override
 257     public CalendarDataProvider getCalendarDataProvider() {
 258         if (calendarDataProvider == null) {
 259             CalendarDataProvider provider;
 260             provider = new CalendarDataProviderImpl(getAdapterType(),
 261                                                     getLanguageTagSet("CalendarData"));


 262             synchronized (this) {
 263                 if (calendarDataProvider == null) {
 264                     calendarDataProvider = provider;
 265                 }
 266             }
 267         }
 268         return calendarDataProvider;
 269     }
 270 
 271     @Override
 272     public CalendarNameProvider getCalendarNameProvider() {
 273         if (calendarNameProvider == null) {
 274             CalendarNameProvider provider;
 275             provider = new CalendarNameProviderImpl(getAdapterType(),
 276                                                     getLanguageTagSet("FormatData"));
 277             synchronized (this) {
 278                 if (calendarNameProvider == null) {
 279                     calendarNameProvider = provider;
 280                 }
 281             }
 282         }
 283         return calendarNameProvider;
 284     }
 285 
 286     @Override
 287     public LocaleResources getLocaleResources(Locale locale) {
 288         LocaleResources lr = localeResourcesMap.get(locale);
 289         if (lr == null) {
 290             lr = new LocaleResources(this, locale);
 291             LocaleResources lrc = localeResourcesMap.putIfAbsent(locale, lr);
 292             if (lrc != null) {
 293                 lr = lrc;
 294             }
 295         }
 296         return lr;
 297     }
 298 
 299     @Override
 300     public LocaleData getLocaleData() {
 301         if (localeData == null) {
 302             synchronized (this) {
 303                 if (localeData == null) {