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

Print this page
rev 6352 : imported patch 7162007


  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
  65         = new ConcurrentHashMap<>();
  66 
  67     // LocaleData specific to this LocaleProviderAdapter.
  68     private volatile LocaleData localeData;
  69 
  70     /**
  71      * Returns the type of this LocaleProviderAdapter
  72      */
  73     @Override
  74     public LocaleProviderAdapter.Type getAdapterType() {
  75         return Type.JRE;
  76     }
  77 


 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) {
 304                     localeData = new LocaleData(getAdapterType());
 305                 }
 306             }
 307         }
 308         return localeData;
 309     }
 310 
 311     /**
 312      * Returns a list of the installed locales. Currently, this simply returns
 313      * the list of locales for which a sun.text.resources.FormatData bundle
 314      * exists. This bundle family happens to be the one with the broadest
 315      * locale coverage in the JRE.
 316      */
 317     @Override
 318     public Locale[] getAvailableLocales() {




  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 implements ResourceBundleBasedAdapter {
  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
  65         = new ConcurrentHashMap<>();
  66 
  67     // LocaleData specific to this LocaleProviderAdapter.
  68     private volatile LocaleData localeData;
  69 
  70     /**
  71      * Returns the type of this LocaleProviderAdapter
  72      */
  73     @Override
  74     public LocaleProviderAdapter.Type getAdapterType() {
  75         return Type.JRE;
  76     }
  77 


 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     // ResourceBundleBasedAdapter method implementation
 300     @Override
 301     public LocaleData getLocaleData() {
 302         if (localeData == null) {
 303             synchronized (this) {
 304                 if (localeData == null) {
 305                     localeData = new LocaleData(getAdapterType());
 306                 }
 307             }
 308         }
 309         return localeData;
 310     }
 311 
 312     /**
 313      * Returns a list of the installed locales. Currently, this simply returns
 314      * the list of locales for which a sun.text.resources.FormatData bundle
 315      * exists. This bundle family happens to be the one with the broadest
 316      * locale coverage in the JRE.
 317      */
 318     @Override
 319     public Locale[] getAvailableLocales() {