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

Print this page
rev 7121 : imported patch 8013903


 103      */
 104     private static LocaleProviderAdapter spiLocaleProviderAdapter = new SPILocaleProviderAdapter();
 105 
 106     /**
 107      * CLDR Locale Data Adapter instance, if any.
 108      */
 109     private static LocaleProviderAdapter cldrLocaleProviderAdapter = null;
 110 
 111     /**
 112      * HOST Locale Data Adapter instance, if any.
 113      */
 114     private static LocaleProviderAdapter hostLocaleProviderAdapter = null;
 115 
 116     /**
 117      * FALLBACK Locale Data Adapter instance. It's basically the same with JRE, but only kicks
 118      * in for the root locale.
 119      */
 120     private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null;
 121 
 122     /**






 123      * Adapter lookup cache.
 124      */
 125     private static ConcurrentMap<Class<? extends LocaleServiceProvider>, ConcurrentMap<Locale, LocaleProviderAdapter>>
 126         adapterCache = new ConcurrentHashMap<>();
 127 
 128     static {
 129         String order = AccessController.doPrivileged(
 130                            new sun.security.action.GetPropertyAction("java.locale.providers"));
 131         List<Type> typeList = new ArrayList<>();
 132 
 133         // Check user specified adapter preference
 134         if (order != null && order.length() != 0) {
 135             String[] types = order.split(",");
 136             for (String type : types) {
 137                 try {
 138                     Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
 139 
 140                     // load adapter if necessary
 141                     switch (aType) {
 142                         case CLDR:

 143                             cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();

 144                             break;
 145                         case HOST:

 146                             hostLocaleProviderAdapter = new HostLocaleProviderAdapter();

 147                             break;
 148                     }

 149                     typeList.add(aType);

 150                 } catch (IllegalArgumentException | UnsupportedOperationException e) {
 151                     // could be caused by the user specifying wrong
 152                     // provider name or format in the system property
 153                     LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
 154                 }
 155             }
 156         }
 157 
 158         if (!typeList.isEmpty()) {
 159             if (!typeList.contains(Type.JRE)) {
 160                 // Append FALLBACK as the last resort.
 161                 fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
 162                 typeList.add(Type.FALLBACK);



 163             }
 164         } else {
 165             // Default preference list
 166             typeList.add(Type.JRE);
 167             typeList.add(Type.SPI);

 168         }
 169 
 170         adapterPreference = Collections.unmodifiableList(typeList);
 171     }
 172 
 173     /**
 174      * Returns the singleton instance for each adapter type
 175      */
 176     public static LocaleProviderAdapter forType(Type type) {
 177         switch (type) {
 178         case JRE:
 179             return jreLocaleProviderAdapter;
 180         case CLDR:
 181             return cldrLocaleProviderAdapter;
 182         case SPI:
 183             return spiLocaleProviderAdapter;
 184         case HOST:
 185             return hostLocaleProviderAdapter;
 186         case FALLBACK:
 187             return fallbackLocaleProviderAdapter;




 103      */
 104     private static LocaleProviderAdapter spiLocaleProviderAdapter = new SPILocaleProviderAdapter();
 105 
 106     /**
 107      * CLDR Locale Data Adapter instance, if any.
 108      */
 109     private static LocaleProviderAdapter cldrLocaleProviderAdapter = null;
 110 
 111     /**
 112      * HOST Locale Data Adapter instance, if any.
 113      */
 114     private static LocaleProviderAdapter hostLocaleProviderAdapter = null;
 115 
 116     /**
 117      * FALLBACK Locale Data Adapter instance. It's basically the same with JRE, but only kicks
 118      * in for the root locale.
 119      */
 120     private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null;
 121 
 122     /**
 123      * Default fallback adapter type, which should return something meaningful in any case.
 124      * This is either JRE or FALLBACK.
 125      */
 126     static LocaleProviderAdapter.Type defaultLocaleProviderAdapter = null;
 127 
 128     /**
 129      * Adapter lookup cache.
 130      */
 131     private static ConcurrentMap<Class<? extends LocaleServiceProvider>, ConcurrentMap<Locale, LocaleProviderAdapter>>
 132         adapterCache = new ConcurrentHashMap<>();
 133 
 134     static {
 135         String order = AccessController.doPrivileged(
 136                            new sun.security.action.GetPropertyAction("java.locale.providers"));
 137         List<Type> typeList = new ArrayList<>();
 138 
 139         // Check user specified adapter preference
 140         if (order != null && order.length() != 0) {
 141             String[] types = order.split(",");
 142             for (String type : types) {
 143                 try {
 144                     Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
 145 
 146                     // load adapter if necessary
 147                     switch (aType) {
 148                         case CLDR:
 149                             if (cldrLocaleProviderAdapter == null) {
 150                                 cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();
 151                             }
 152                             break;
 153                         case HOST:
 154                             if (hostLocaleProviderAdapter == null) {
 155                                 hostLocaleProviderAdapter = new HostLocaleProviderAdapter();
 156                             }
 157                             break;
 158                     }
 159                     if (!typeList.contains(aType)) {
 160                         typeList.add(aType);
 161                     }
 162                 } catch (IllegalArgumentException | UnsupportedOperationException e) {
 163                     // could be caused by the user specifying wrong
 164                     // provider name or format in the system property
 165                     LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
 166                 }
 167             }
 168         }
 169 
 170         if (!typeList.isEmpty()) {
 171             if (!typeList.contains(Type.JRE)) {
 172                 // Append FALLBACK as the last resort.
 173                 fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
 174                 typeList.add(Type.FALLBACK);
 175                 defaultLocaleProviderAdapter = Type.FALLBACK;
 176             } else {
 177                 defaultLocaleProviderAdapter = Type.JRE;
 178             }
 179         } else {
 180             // Default preference list
 181             typeList.add(Type.JRE);
 182             typeList.add(Type.SPI);
 183             defaultLocaleProviderAdapter = Type.JRE;
 184         }
 185 
 186         adapterPreference = Collections.unmodifiableList(typeList);
 187     }
 188 
 189     /**
 190      * Returns the singleton instance for each adapter type
 191      */
 192     public static LocaleProviderAdapter forType(Type type) {
 193         switch (type) {
 194         case JRE:
 195             return jreLocaleProviderAdapter;
 196         case CLDR:
 197             return cldrLocaleProviderAdapter;
 198         case SPI:
 199             return spiLocaleProviderAdapter;
 200         case HOST:
 201             return hostLocaleProviderAdapter;
 202         case FALLBACK:
 203             return fallbackLocaleProviderAdapter;