src/java.base/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java
author redestad
Thu, 13 Dec 2018 15:31:05 +0100
changeset 53018 8bf9268df0e2
parent 50974 24bf1bd23725
child 54412 41356f083e93
permissions -rw-r--r--
8215281: Use String.isEmpty() when applicable in java.base Reviewed-by: dfuchs, alanb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     1
/*
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 48251
diff changeset
     2
 * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     4
 *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    10
 *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    15
 * accompanied this code).
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    16
 *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    20
 *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    23
 * questions.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    24
 */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    25
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    26
package sun.util.locale.provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    27
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    28
import java.security.AccessController;
47345
0a1fc9f3779c 8189264: (sl) ServiceLoader does not wrap Errors thrown by provider classes when running with a security manager
alanb
parents: 47216
diff changeset
    29
import java.security.AccessControlException;
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
    30
import java.security.PrivilegedAction;
47442
560ee83bfce5 8189272: CLDR and JRE LocaleProviderAdapters silently swallow exceptions
naoto
parents: 47345
diff changeset
    31
import java.security.PrivilegedActionException;
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
    32
import java.security.PrivilegedExceptionAction;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    33
import java.text.spi.BreakIteratorProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    34
import java.text.spi.CollatorProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    35
import java.text.spi.DateFormatProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    36
import java.text.spi.DateFormatSymbolsProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    37
import java.text.spi.DecimalFormatSymbolsProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    38
import java.text.spi.NumberFormatProvider;
25996
4aa9eb909760 8055088: Optimization for locale resources loading isn't working
okutsu
parents: 25859
diff changeset
    39
import java.util.Collections;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    40
import java.util.HashSet;
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
    41
import java.util.List;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    42
import java.util.Locale;
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
    43
import java.util.ResourceBundle;
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
    44
import java.util.ServiceLoader;
47345
0a1fc9f3779c 8189264: (sl) ServiceLoader does not wrap Errors thrown by provider classes when running with a security manager
alanb
parents: 47216
diff changeset
    45
import java.util.ServiceConfigurationError;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    46
import java.util.Set;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    47
import java.util.StringTokenizer;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    48
import java.util.concurrent.ConcurrentHashMap;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    49
import java.util.concurrent.ConcurrentMap;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    50
import java.util.spi.CalendarDataProvider;
14502
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
    51
import java.util.spi.CalendarNameProvider;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    52
import java.util.spi.CurrencyNameProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    53
import java.util.spi.LocaleNameProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    54
import java.util.spi.LocaleServiceProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    55
import java.util.spi.TimeZoneNameProvider;
42360
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
    56
import sun.text.spi.JavaTimeDateTimePatternProvider;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    57
import sun.util.resources.LocaleData;
16481
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
    58
import sun.util.spi.CalendarProvider;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    59
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    60
/**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    61
 * LocaleProviderAdapter implementation for the legacy JRE locale data.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    62
 *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    63
 * @author Naoto Sato
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    64
 * @author Masayoshi Okutsu
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    65
 */
15260
7af2d7a87806 7162007: Clean up i18n related caches
naoto
parents: 14502
diff changeset
    66
public class JRELocaleProviderAdapter extends LocaleProviderAdapter implements ResourceBundleBasedAdapter {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    67
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    68
    private final ConcurrentMap<String, Set<String>> langtagSets
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    69
        = new ConcurrentHashMap<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    70
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    71
    private final ConcurrentMap<Locale, LocaleResources> localeResourcesMap
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    72
        = new ConcurrentHashMap<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    73
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    74
    // LocaleData specific to this LocaleProviderAdapter.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    75
    private volatile LocaleData localeData;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    76
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    77
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    78
     * Returns the type of this LocaleProviderAdapter
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    79
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    80
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    81
    public LocaleProviderAdapter.Type getAdapterType() {
14024
694c379c2958 7196799: CLDR adapter can not be invoked when region code is specified in Locale
naoto
parents: 13583
diff changeset
    82
        return Type.JRE;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    83
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    84
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    85
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    86
     * Getter method for Locale Service Providers
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    87
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    88
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    89
    @SuppressWarnings("unchecked")
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    90
    public <P extends LocaleServiceProvider> P getLocaleServiceProvider(Class<P> c) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    91
        switch (c.getSimpleName()) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    92
        case "BreakIteratorProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    93
            return (P) getBreakIteratorProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    94
        case "CollatorProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    95
            return (P) getCollatorProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    96
        case "DateFormatProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    97
            return (P) getDateFormatProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    98
        case "DateFormatSymbolsProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    99
            return (P) getDateFormatSymbolsProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   100
        case "DecimalFormatSymbolsProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   101
            return (P) getDecimalFormatSymbolsProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   102
        case "NumberFormatProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   103
            return (P) getNumberFormatProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   104
        case "CurrencyNameProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   105
            return (P) getCurrencyNameProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   106
        case "LocaleNameProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   107
            return (P) getLocaleNameProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   108
        case "TimeZoneNameProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   109
            return (P) getTimeZoneNameProvider();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   110
        case "CalendarDataProvider":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   111
            return (P) getCalendarDataProvider();
14502
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   112
        case "CalendarNameProvider":
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   113
            return (P) getCalendarNameProvider();
16481
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   114
        case "CalendarProvider":
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   115
            return (P) getCalendarProvider();
42360
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   116
        case "JavaTimeDateTimePatternProvider":
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   117
            return (P) getJavaTimeDateTimePatternProvider();
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   118
        default:
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   119
            throw new InternalError("should not come down here");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   120
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   121
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   122
34774
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   123
    private volatile BreakIteratorProvider breakIteratorProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   124
    private volatile CollatorProvider collatorProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   125
    private volatile DateFormatProvider dateFormatProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   126
    private volatile DateFormatSymbolsProvider dateFormatSymbolsProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   127
    private volatile DecimalFormatSymbolsProvider decimalFormatSymbolsProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   128
    private volatile NumberFormatProvider numberFormatProvider;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   129
34774
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   130
    private volatile CurrencyNameProvider currencyNameProvider;
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   131
    private volatile LocaleNameProvider localeNameProvider;
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 48251
diff changeset
   132
    protected volatile TimeZoneNameProvider timeZoneNameProvider;
48251
57148c79bd75 8176841: Additional Unicode Language-Tag Extensions
naoto
parents: 47442
diff changeset
   133
    protected volatile CalendarDataProvider calendarDataProvider;
50974
24bf1bd23725 8204603: Short week days, NaN value and timezone name are inconsistent between CLDR and Java in zh_CN, zh_TW locales.
rgoel
parents: 49904
diff changeset
   134
    protected volatile CalendarNameProvider calendarNameProvider;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   135
34774
03b4e6dc367b 8145680: Remove unnecessary explicit initialization of volatile variables in java.base
redestad
parents: 31263
diff changeset
   136
    private volatile CalendarProvider calendarProvider;
42360
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   137
    private volatile JavaTimeDateTimePatternProvider javaTimeDateTimePatternProvider;
16481
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   138
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   139
    /*
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   140
     * Getter methods for java.text.spi.* providers
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   141
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   142
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   143
    public BreakIteratorProvider getBreakIteratorProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   144
        if (breakIteratorProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   145
            BreakIteratorProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   146
                (PrivilegedAction<BreakIteratorProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   147
                    new BreakIteratorProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   148
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   149
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   150
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   151
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   152
                if (breakIteratorProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   153
                    breakIteratorProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   154
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   155
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   156
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   157
        return breakIteratorProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   158
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   159
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   160
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   161
    public CollatorProvider getCollatorProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   162
        if (collatorProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   163
            CollatorProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   164
                (PrivilegedAction<CollatorProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   165
                    new CollatorProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   166
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   167
                        getLanguageTagSet("CollationData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   168
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   169
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   170
                if (collatorProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   171
                    collatorProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   172
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   173
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   174
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   175
        return collatorProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   176
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   177
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   178
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   179
    public DateFormatProvider getDateFormatProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   180
        if (dateFormatProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   181
            DateFormatProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   182
                (PrivilegedAction<DateFormatProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   183
                    new DateFormatProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   184
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   185
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   186
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   187
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   188
                if (dateFormatProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   189
                    dateFormatProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   190
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   191
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   192
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   193
        return dateFormatProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   194
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   195
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   196
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   197
    public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   198
        if (dateFormatSymbolsProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   199
            DateFormatSymbolsProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   200
                (PrivilegedAction<DateFormatSymbolsProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   201
                    new DateFormatSymbolsProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   202
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   203
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   204
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   205
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   206
                if (dateFormatSymbolsProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   207
                    dateFormatSymbolsProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   208
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   209
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   210
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   211
        return dateFormatSymbolsProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   212
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   213
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   214
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   215
    public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   216
        if (decimalFormatSymbolsProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   217
            DecimalFormatSymbolsProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   218
                (PrivilegedAction<DecimalFormatSymbolsProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   219
                    new DecimalFormatSymbolsProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   220
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   221
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   222
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   223
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   224
                if (decimalFormatSymbolsProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   225
                    decimalFormatSymbolsProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   226
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   227
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   228
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   229
        return decimalFormatSymbolsProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   230
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   231
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   232
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   233
    public NumberFormatProvider getNumberFormatProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   234
        if (numberFormatProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   235
            NumberFormatProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   236
                (PrivilegedAction<NumberFormatProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   237
                    new NumberFormatProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   238
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   239
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   240
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   241
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   242
                if (numberFormatProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   243
                    numberFormatProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   244
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   245
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   246
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   247
        return numberFormatProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   248
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   249
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   250
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   251
     * Getter methods for java.util.spi.* providers
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   252
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   253
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   254
    public CurrencyNameProvider getCurrencyNameProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   255
        if (currencyNameProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   256
            CurrencyNameProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   257
                (PrivilegedAction<CurrencyNameProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   258
                    new CurrencyNameProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   259
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   260
                        getLanguageTagSet("CurrencyNames")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   261
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   262
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   263
                if (currencyNameProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   264
                    currencyNameProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   265
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   266
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   267
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   268
        return currencyNameProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   269
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   270
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   271
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   272
    public LocaleNameProvider getLocaleNameProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   273
        if (localeNameProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   274
            LocaleNameProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   275
                (PrivilegedAction<LocaleNameProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   276
                    new LocaleNameProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   277
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   278
                        getLanguageTagSet("LocaleNames")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   279
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   280
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   281
                if (localeNameProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   282
                    localeNameProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   283
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   284
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   285
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   286
        return localeNameProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   287
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   288
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   289
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   290
    public TimeZoneNameProvider getTimeZoneNameProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   291
        if (timeZoneNameProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   292
            TimeZoneNameProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   293
                (PrivilegedAction<TimeZoneNameProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   294
                    new TimeZoneNameProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   295
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   296
                        getLanguageTagSet("TimeZoneNames")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   297
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   298
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   299
                if (timeZoneNameProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   300
                    timeZoneNameProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   301
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   302
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   303
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   304
        return timeZoneNameProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   305
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   306
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   307
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   308
    public CalendarDataProvider getCalendarDataProvider() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   309
        if (calendarDataProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   310
            CalendarDataProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   311
                (PrivilegedAction<CalendarDataProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   312
                    new CalendarDataProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   313
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   314
                        getLanguageTagSet("CalendarData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   315
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   316
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   317
                if (calendarDataProvider == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   318
                    calendarDataProvider = provider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   319
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   320
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   321
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   322
        return calendarDataProvider;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   323
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   324
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   325
    @Override
14502
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   326
    public CalendarNameProvider getCalendarNameProvider() {
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   327
        if (calendarNameProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   328
            CalendarNameProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   329
                (PrivilegedAction<CalendarNameProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   330
                    new CalendarNameProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   331
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   332
                        getLanguageTagSet("FormatData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   333
14502
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   334
            synchronized (this) {
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   335
                if (calendarNameProvider == null) {
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   336
                    calendarNameProvider = provider;
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   337
                }
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   338
            }
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   339
        }
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   340
        return calendarNameProvider;
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   341
    }
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   342
16481
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   343
    /**
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   344
     * Getter methods for sun.util.spi.* providers
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   345
     */
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   346
    @Override
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   347
    public CalendarProvider getCalendarProvider() {
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   348
        if (calendarProvider == null) {
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   349
            CalendarProvider provider = AccessController.doPrivileged(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   350
                (PrivilegedAction<CalendarProvider>) () ->
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   351
                    new CalendarProviderImpl(
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   352
                        getAdapterType(),
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   353
                        getLanguageTagSet("CalendarData")));
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   354
16481
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   355
            synchronized (this) {
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   356
                if (calendarProvider == null) {
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   357
                    calendarProvider = provider;
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   358
                }
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   359
            }
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   360
        }
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   361
        return calendarProvider;
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   362
    }
8e30386cc014 8008576: Calendar mismatch using Host LocaleProviderAdapter
naoto
parents: 15260
diff changeset
   363
42360
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   364
    /**
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   365
     * Getter methods for sun.text.spi.JavaTimeDateTimePatternProvider provider
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   366
     */
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   367
    @Override
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   368
    public JavaTimeDateTimePatternProvider getJavaTimeDateTimePatternProvider() {
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   369
        if (javaTimeDateTimePatternProvider == null) {
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   370
            JavaTimeDateTimePatternProvider provider = AccessController.doPrivileged(
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   371
                    (PrivilegedAction<JavaTimeDateTimePatternProvider>) ()
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   372
                    -> new JavaTimeDateTimePatternImpl(
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   373
                            getAdapterType(),
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   374
                            getLanguageTagSet("FormatData")));
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   375
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   376
            synchronized (this) {
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   377
                if (javaTimeDateTimePatternProvider == null) {
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   378
                    javaTimeDateTimePatternProvider = provider;
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   379
                }
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   380
            }
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   381
        }
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   382
        return javaTimeDateTimePatternProvider;
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   383
    }
5e60b1e45041 8075577: java.time does not support HOST provider
rgoel
parents: 36511
diff changeset
   384
14502
d63fed06fed4 8000986: Split java.util.spi.CalendarDataProvider into week parameters and field names portions
okutsu
parents: 14418
diff changeset
   385
    @Override
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   386
    public LocaleResources getLocaleResources(Locale locale) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   387
        LocaleResources lr = localeResourcesMap.get(locale);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   388
        if (lr == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   389
            lr = new LocaleResources(this, locale);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   390
            LocaleResources lrc = localeResourcesMap.putIfAbsent(locale, lr);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   391
            if (lrc != null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   392
                lr = lrc;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   393
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   394
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   395
        return lr;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   396
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   397
15260
7af2d7a87806 7162007: Clean up i18n related caches
naoto
parents: 14502
diff changeset
   398
    // ResourceBundleBasedAdapter method implementation
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   399
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   400
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   401
    public LocaleData getLocaleData() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   402
        if (localeData == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   403
            synchronized (this) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   404
                if (localeData == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   405
                    localeData = new LocaleData(getAdapterType());
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   406
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   407
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   408
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   409
        return localeData;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   410
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   411
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   412
    @Override
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   413
    public List<Locale> getCandidateLocales(String baseName, Locale locale) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   414
        return ResourceBundle.Control
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   415
            .getNoFallbackControl(ResourceBundle.Control.FORMAT_DEFAULT)
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   416
            .getCandidateLocales(baseName, locale);
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   417
    }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   418
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   419
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   420
     * Returns a list of the installed locales. Currently, this simply returns
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   421
     * the list of locales for which a sun.text.resources.FormatData bundle
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   422
     * exists. This bundle family happens to be the one with the broadest
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   423
     * locale coverage in the JRE.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   424
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   425
    @Override
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   426
    public Locale[] getAvailableLocales() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   427
        return AvailableJRELocales.localeList.clone();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   428
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   429
14028
5f3d5ae5f1ea 7198834: HOST Adapter: one extra empty space in the end of the pattern string
naoto
parents: 14026
diff changeset
   430
    public Set<String> getLanguageTagSet(String category) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   431
        Set<String> tagset = langtagSets.get(category);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   432
        if (tagset == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   433
            tagset = createLanguageTagSet(category);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   434
            Set<String> ts = langtagSets.putIfAbsent(category, tagset);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   435
            if (ts != null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   436
                tagset = ts;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   437
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   438
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   439
        return tagset;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   440
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   441
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   442
    protected Set<String> createLanguageTagSet(String category) {
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   443
        String supportedLocaleString = createSupportedLocaleString(category);
25996
4aa9eb909760 8055088: Optimization for locale resources loading isn't working
okutsu
parents: 25859
diff changeset
   444
        if (supportedLocaleString == null) {
4aa9eb909760 8055088: Optimization for locale resources loading isn't working
okutsu
parents: 25859
diff changeset
   445
            return Collections.emptySet();
4aa9eb909760 8055088: Optimization for locale resources loading isn't working
okutsu
parents: 25859
diff changeset
   446
        }
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   447
        Set<String> tagset = new HashSet<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   448
        StringTokenizer tokens = new StringTokenizer(supportedLocaleString);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   449
        while (tokens.hasMoreTokens()) {
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   450
            tagset.add(tokens.nextToken());
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   451
        }
14026
ec2c0bbcb881 7200119: Collator.getAvailableLocales() doesn't return Locale.US
naoto
parents: 14024
diff changeset
   452
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   453
        return tagset;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   454
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   455
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   456
    private static String createSupportedLocaleString(String category) {
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   457
        // Directly call Base tags, as we know it's in the base module.
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   458
        String supportedLocaleString = BaseLocaleDataMetaInfo.getSupportedLocaleString(category);
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   459
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   460
        // Use ServiceLoader to dynamically acquire installed locales' tags.
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   461
        try {
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   462
            String nonBaseTags = AccessController.doPrivileged((PrivilegedExceptionAction<String>) () -> {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   463
                StringBuilder tags = new StringBuilder();
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   464
                for (LocaleDataMetaInfo ldmi :
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   465
                        ServiceLoader.loadInstalled(LocaleDataMetaInfo.class)) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   466
                    if (ldmi.getType() == LocaleProviderAdapter.Type.JRE) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   467
                        String t = ldmi.availableLanguageTags(category);
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   468
                        if (t != null) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   469
                            if (tags.length() > 0) {
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   470
                                tags.append(' ');
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   471
                            }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   472
                            tags.append(t);
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   473
                        }
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   474
                    }
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   475
                }
36511
9d0388c6b336 8142968: Module System implementation
alanb
parents: 34774
diff changeset
   476
                return tags.toString();
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   477
            });
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   478
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   479
            if (nonBaseTags != null) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   480
                supportedLocaleString += " " + nonBaseTags;
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   481
            }
47442
560ee83bfce5 8189272: CLDR and JRE LocaleProviderAdapters silently swallow exceptions
naoto
parents: 47345
diff changeset
   482
        } catch (PrivilegedActionException pae) {
560ee83bfce5 8189272: CLDR and JRE LocaleProviderAdapters silently swallow exceptions
naoto
parents: 47345
diff changeset
   483
            throw new InternalError(pae.getCause());
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   484
        }
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   485
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   486
        return supportedLocaleString;
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   487
    }
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   488
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   489
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   490
     * Lazy load available locales.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   491
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   492
    private static class AvailableJRELocales {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   493
        private static final Locale[] localeList = createAvailableLocales();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   494
        private AvailableJRELocales() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   495
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   496
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   497
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   498
    private static Locale[] createAvailableLocales() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   499
        /*
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   500
         * Gets the locale string list from LocaleDataMetaInfo classes and then
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   501
         * contructs the Locale array and a set of language tags based on the
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   502
         * locale string returned above.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   503
         */
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   504
        String supportedLocaleString = createSupportedLocaleString("AvailableLocales");
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   505
53018
8bf9268df0e2 8215281: Use String.isEmpty() when applicable in java.base
redestad
parents: 50974
diff changeset
   506
        if (supportedLocaleString.isEmpty()) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   507
            throw new InternalError("No available locales for JRE");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   508
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   509
26360
697f70835528 8038436: Re-examine the mechanism to determine available localedata and cldrdata
naoto
parents: 25996
diff changeset
   510
        StringTokenizer localeStringTokenizer = new StringTokenizer(supportedLocaleString);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   511
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   512
        int length = localeStringTokenizer.countTokens();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   513
        Locale[] locales = new Locale[length + 1];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   514
        locales[0] = Locale.ROOT;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   515
        for (int i = 1; i <= length; i++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   516
            String currentToken = localeStringTokenizer.nextToken();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   517
            switch (currentToken) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   518
                case "ja-JP-JP":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   519
                    locales[i] = JRELocaleConstants.JA_JP_JP;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   520
                    break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   521
                case "no-NO-NY":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   522
                    locales[i] = JRELocaleConstants.NO_NO_NY;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   523
                    break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   524
                case "th-TH-TH":
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   525
                    locales[i] = JRELocaleConstants.TH_TH_TH;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   526
                    break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   527
                default:
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   528
                    locales[i] = Locale.forLanguageTag(currentToken);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   529
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   530
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   531
        return locales;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   532
    }
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   533
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   534
    @Override
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   535
    public boolean isSupportedProviderLocale(Locale locale,  Set<String> langtags) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   536
        if (Locale.ROOT.equals(locale)) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   537
            return true;
30047
63b6a16968d5 8075545: Add permission check for locale service provider implementations
naoto
parents: 26360
diff changeset
   538
}
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   539
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   540
        locale = locale.stripExtensions();
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   541
        if (langtags.contains(locale.toLanguageTag())) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   542
            return true;
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   543
        }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   544
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   545
        String oldname = locale.toString().replace('_', '-');
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   546
        return langtags.contains(oldname) ||
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   547
                   "ja-JP-JP".equals(oldname) ||
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   548
                   "th-TH-TH".equals(oldname) ||
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   549
                   "no-NO-NY".equals(oldname);
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   550
    }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 30047
diff changeset
   551
}