make/jdk/src/classes/build/tools/cldrconverter/Bundle.java
author tschatzl
Fri, 22 Nov 2019 10:03:38 +0100
changeset 59220 72e15d757e6c
parent 58969 a4430bb9f97d
permissions -rw-r--r--
8234000: Make HeapRegion::bottom/end/hrm_index const Reviewed-by: kbarrett, sjohanss
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
     1
/*
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
     2
 * Copyright (c) 2012, 2019, 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 build.tools.cldrconverter;
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.util.ArrayList;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    29
import java.util.Arrays;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    30
import java.util.EnumSet;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    31
import java.util.HashMap;
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
    32
import java.util.Iterator;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    33
import java.util.List;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    34
import java.util.Map;
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
    35
import java.util.Objects;
58058
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
    36
import java.util.Optional;
58825
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
    37
import java.util.stream.IntStream;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    38
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    39
class Bundle {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    40
    static enum Type {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    41
        LOCALENAMES, CURRENCYNAMES, TIMEZONENAMES, CALENDARDATA, FORMATDATA;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    42
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    43
        static EnumSet<Type> ALL_TYPES = EnumSet.of(LOCALENAMES,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    44
                                                    CURRENCYNAMES,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    45
                                                    TIMEZONENAMES,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    46
                                                    CALENDARDATA,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    47
                                                    FORMATDATA);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    48
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    49
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    50
    private final static Map<String, Bundle> bundles = new HashMap<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    51
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    52
    private final static String[] NUMBER_PATTERN_KEYS = {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    53
        "NumberPatterns/decimal",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    54
        "NumberPatterns/currency",
57679
314e62bbdb16 8215181: Accounting currency format support
naoto
parents: 54769
diff changeset
    55
        "NumberPatterns/percent",
314e62bbdb16 8215181: Accounting currency format support
naoto
parents: 54769
diff changeset
    56
        "NumberPatterns/accounting"
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    57
    };
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    58
52869
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
    59
    private final static String[] COMPACT_NUMBER_PATTERN_KEYS = {
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
    60
            "short.CompactNumberPatterns",
58825
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
    61
            "long.CompactNumberPatterns"
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
    62
    };
52869
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
    63
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    64
    private final static String[] NUMBER_ELEMENT_KEYS = {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    65
        "NumberElements/decimal",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    66
        "NumberElements/group",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    67
        "NumberElements/list",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    68
        "NumberElements/percent",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    69
        "NumberElements/zero",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    70
        "NumberElements/pattern",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    71
        "NumberElements/minus",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    72
        "NumberElements/exponential",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    73
        "NumberElements/permille",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    74
        "NumberElements/infinity",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    75
        "NumberElements/nan"
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
    private final static String[] TIME_PATTERN_KEYS = {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    79
        "DateTimePatterns/full-time",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    80
        "DateTimePatterns/long-time",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    81
        "DateTimePatterns/medium-time",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    82
        "DateTimePatterns/short-time",
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
    private final static String[] DATE_PATTERN_KEYS = {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    86
        "DateTimePatterns/full-date",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    87
        "DateTimePatterns/long-date",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    88
        "DateTimePatterns/medium-date",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    89
        "DateTimePatterns/short-date",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    90
    };
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    91
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    92
    private final static String[] DATETIME_PATTERN_KEYS = {
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
    93
        "DateTimePatterns/full-dateTime",
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
    94
        "DateTimePatterns/long-dateTime",
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
    95
        "DateTimePatterns/medium-dateTime",
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
    96
        "DateTimePatterns/short-dateTime",
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    97
    };
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    98
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
    99
    private final static String[] ERA_KEYS = {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   100
        "long.Eras",
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   101
        "Eras",
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   102
        "narrow.Eras"
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   103
    };
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   104
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   105
    // Keys for individual time zone names
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   106
    private final static String TZ_GEN_LONG_KEY = "timezone.displayname.generic.long";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   107
    private final static String TZ_GEN_SHORT_KEY = "timezone.displayname.generic.short";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   108
    private final static String TZ_STD_LONG_KEY = "timezone.displayname.standard.long";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   109
    private final static String TZ_STD_SHORT_KEY = "timezone.displayname.standard.short";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   110
    private final static String TZ_DST_LONG_KEY = "timezone.displayname.daylight.long";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   111
    private final static String TZ_DST_SHORT_KEY = "timezone.displayname.daylight.short";
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   112
    private final static String[] ZONE_NAME_KEYS = {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   113
        TZ_STD_LONG_KEY,
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   114
        TZ_STD_SHORT_KEY,
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   115
        TZ_DST_LONG_KEY,
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   116
        TZ_DST_SHORT_KEY,
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   117
        TZ_GEN_LONG_KEY,
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   118
        TZ_GEN_SHORT_KEY
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   119
    };
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   120
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   121
    private final String id;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   122
    private final String cldrPath;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   123
    private final EnumSet<Type> bundleTypes;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   124
    private final String currencies;
32510
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   125
    private Map<String, Object> targetMap;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   126
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   127
    static Bundle getBundle(String id) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   128
        return bundles.get(id);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   129
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   130
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   131
    @SuppressWarnings("ConvertToStringSwitch")
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   132
    Bundle(String id, String cldrPath, String bundles, String currencies) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   133
        this.id = id;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   134
        this.cldrPath = cldrPath;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   135
        if ("localenames".equals(bundles)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   136
            bundleTypes = EnumSet.of(Type.LOCALENAMES);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   137
        } else if ("currencynames".equals(bundles)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   138
            bundleTypes = EnumSet.of(Type.CURRENCYNAMES);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   139
        } else {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   140
            bundleTypes = Type.ALL_TYPES;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   141
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   142
        if (currencies == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   143
            currencies = "local";
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   144
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   145
        this.currencies = currencies;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   146
        addBundle();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   147
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   148
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   149
    private void addBundle() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   150
        Bundle.bundles.put(id, this);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   151
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   152
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   153
    String getID() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   154
        return id;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   155
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   156
32030
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   157
    String getJavaID() {
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   158
        // Tweak ISO compatibility for bundle generation
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   159
        return id.replaceFirst("^he", "iw")
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   160
            .replaceFirst("^id", "in")
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   161
            .replaceFirst("^yi", "ji");
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   162
    }
f2c22ba89d0f 8132494: Wrong CLDR resource bundle names for legacy ISO language codes
naoto
parents: 32015
diff changeset
   163
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   164
    boolean isRoot() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   165
        return "root".equals(id);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   166
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   167
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   168
    String getCLDRPath() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   169
        return cldrPath;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   170
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   171
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   172
    EnumSet<Type> getBundleTypes() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   173
        return bundleTypes;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   174
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   175
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   176
    String getCurrencies() {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   177
        return currencies;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   178
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   179
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   180
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   181
     * Generate a map that contains all the data that should be
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   182
     * visible for the bundle's locale
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   183
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   184
    Map<String, Object> getTargetMap() throws Exception {
32510
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   185
        if (targetMap != null) {
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   186
            return targetMap;
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   187
        }
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   188
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   189
        String[] cldrBundles = getCLDRPath().split(",");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   190
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   191
        // myMap contains resources for id.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   192
        Map<String, Object> myMap = new HashMap<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   193
        int index;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   194
        for (index = 0; index < cldrBundles.length; index++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   195
            if (cldrBundles[index].equals(id)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   196
                myMap.putAll(CLDRConverter.getCLDRBundle(cldrBundles[index]));
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   197
                break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   198
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   199
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   200
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   201
        // parentsMap contains resources from id's parents.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   202
        Map<String, Object> parentsMap = new HashMap<>();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   203
        for (int i = cldrBundles.length - 1; i > index; i--) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   204
            if (!("no".equals(cldrBundles[i]) || cldrBundles[i].startsWith("no_"))) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   205
                parentsMap.putAll(CLDRConverter.getCLDRBundle(cldrBundles[i]));
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   206
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   207
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   208
        // Duplicate myMap as parentsMap for "root" so that the
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   209
        // fallback works. This is a hack, though.
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   210
        if ("root".equals(cldrBundles[0])) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   211
            assert parentsMap.isEmpty();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   212
            parentsMap.putAll(myMap);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   213
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   214
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   215
        // merge individual strings into arrays
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   216
58058
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   217
        // if myMap has any of the NumberPatterns/NumberElements members, create a
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   218
        // complete array of patterns/elements.
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   219
        @SuppressWarnings("unchecked")
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   220
        List<String> scripts = (List<String>) myMap.get("numberingScripts");
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   221
        if (scripts != null) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   222
            for (String script : scripts) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   223
                myMap.put(script + ".NumberPatterns",
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   224
                        createNumberArray(myMap, parentsMap, NUMBER_PATTERN_KEYS, script));
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   225
                myMap.put(script + ".NumberElements",
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   226
                        createNumberArray(myMap, parentsMap, NUMBER_ELEMENT_KEYS, script));
13583
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
52869
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   230
        for (String k : COMPACT_NUMBER_PATTERN_KEYS) {
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   231
            List<String> patterns = (List<String>) myMap.remove(k);
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   232
            if (patterns != null) {
58825
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   233
                // Convert the map value from List<String> to String[], replacing any missing
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   234
                // entry from the parents map, if any.
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   235
                final List<String> pList = (List<String>)parentsMap.get(k);
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   236
                int size = patterns.size();
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   237
                int psize = pList != null ? pList.size() : 0;
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   238
                String[] arrPatterns = IntStream.range(0, Math.max(size, psize))
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   239
                    .mapToObj(i -> {
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   240
                        String pattern;
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   241
                        // first try itself.
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   242
                        if (i < size) {
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   243
                            pattern = patterns.get(i);
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   244
                            if (!pattern.isEmpty()) {
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   245
                                return pattern;
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   246
                            }
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   247
                        }
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   248
                        // if not found, try parent
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   249
                        if (i < psize) {
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   250
                            pattern = pList.get(i);
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   251
                            if (!pattern.isEmpty()) {
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   252
                                return pattern;
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   253
                            }
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   254
                        }
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   255
                        // bail out with empty string
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   256
                        return "";
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   257
                    })
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   258
                    .toArray(String[]::new);
52869
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   259
                myMap.put(k, arrPatterns);
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   260
            }
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   261
        }
c5c0db0b7c2f 8177552: Compact Number Formatting support
nishjain
parents: 49904
diff changeset
   262
58825
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   263
        // Processes aliases here
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   264
        CLDRConverter.handleAliases(myMap);
c3696c94049d 8231273: Upgrade CLDR to v36
naoto
parents: 58058
diff changeset
   265
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   266
        // another hack: parentsMap is not used for date-time resources.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   267
        if ("root".equals(id)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   268
            parentsMap = null;
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
        for (CalendarType calendarType : CalendarType.values()) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   272
            String calendarPrefix = calendarType.keyElementName();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   273
            // handle multiple inheritance for month and day names
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   274
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthNames");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   275
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthAbbreviations");
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   276
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "MonthNarrows");
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   277
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNames");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   278
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayAbbreviations");
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   279
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "DayNarrows");
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   280
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "AmPmMarkers");
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   281
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "narrow.AmPmMarkers");
38747
469920616f3a 8145136: Upgrade CLDR locale data
rgoel
parents: 32510
diff changeset
   282
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "abbreviated.AmPmMarkers");
16852
60207b2b4b42 8011172: JSR 310 DateTime API Updates II
sherman
parents: 15281
diff changeset
   283
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNames");
60207b2b4b42 8011172: JSR 310 DateTime API Updates II
sherman
parents: 15281
diff changeset
   284
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterAbbreviations");
60207b2b4b42 8011172: JSR 310 DateTime API Updates II
sherman
parents: 15281
diff changeset
   285
            handleMultipleInheritance(myMap, parentsMap, calendarPrefix + "QuarterNarrows");
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   286
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   287
            adjustEraNames(myMap, calendarType);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   288
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   289
            handleDateTimeFormatPatterns(TIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "TimePatterns");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   290
            handleDateTimeFormatPatterns(DATE_PATTERN_KEYS, myMap, parentsMap, calendarType, "DatePatterns");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   291
            handleDateTimeFormatPatterns(DATETIME_PATTERN_KEYS, myMap, parentsMap, calendarType, "DateTimePatterns");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   292
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   293
15281
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   294
        // First, weed out any empty timezone or metazone names from myMap.
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   295
        // Fill in any missing abbreviations if locale is "en".
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   296
        for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   297
            String key = it.next();
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   298
            if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   299
                    || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   300
                @SuppressWarnings("unchecked")
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   301
                Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   302
                if (nameMap.isEmpty()) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   303
                    // Some zones have only exemplarCity, which become empty.
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   304
                    // Remove those from the map.
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   305
                    it.remove();
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   306
                    continue;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   307
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   308
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   309
                if (id.equals("en")) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   310
                    fillInJREs(key, nameMap);
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   311
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   312
            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   313
        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   314
        for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   315
            String key = it.next();
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   316
                if (key.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   317
                    || key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   318
                @SuppressWarnings("unchecked")
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   319
                Map<String, String> nameMap = (Map<String, String>) myMap.get(key);
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   320
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   321
                // Convert key/value pairs to an array.
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   322
                String[] names = new String[ZONE_NAME_KEYS.length];
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   323
                int ix = 0;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   324
                for (String nameKey : ZONE_NAME_KEYS) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   325
                    String name = nameMap.get(nameKey);
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   326
                    if (name == null && parentsMap != null) {
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   327
                        @SuppressWarnings("unchecked")
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   328
                        Map<String, String> parentNames = (Map<String, String>) parentsMap.get(key);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   329
                        if (parentNames != null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   330
                            name = parentNames.get(nameKey);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   331
                        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   332
                    }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   333
                    names[ix++] = name;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   334
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   335
                if (hasNulls(names)) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   336
                    String metaKey = toMetaZoneKey(key);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   337
                    if (metaKey != null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   338
                        Object obj = myMap.get(metaKey);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   339
                        if (obj instanceof String[]) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   340
                            String[] metaNames = (String[]) obj;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   341
                            for (int i = 0; i < names.length; i++) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   342
                                if (names[i] == null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   343
                                    names[i] = metaNames[i];
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   344
                                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   345
                            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   346
                        } else if (obj instanceof Map) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   347
                            @SuppressWarnings("unchecked")
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   348
                            Map<String, String> m = (Map<String, String>) obj;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   349
                            for (int i = 0; i < names.length; i++) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   350
                                if (names[i] == null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   351
                                    names[i] = m.get(ZONE_NAME_KEYS[i]);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   352
                                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   353
                            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   354
                        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   355
                    }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   356
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   357
                // replace the Map with the array
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   358
                if (names != null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   359
                    myMap.put(key, names);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   360
                } else {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   361
                    it.remove();
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   362
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   363
            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   364
        }
43295
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   365
        // replace empty era names with parentMap era names
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   366
        for (String key : ERA_KEYS) {
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   367
            Object value = myMap.get(key);
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   368
            if (value != null && value instanceof String[]) {
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   369
                String[] eraStrings = (String[]) value;
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   370
                for (String eraString : eraStrings) {
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   371
                    if (eraString == null || eraString.isEmpty()) {
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   372
                        fillInElements(parentsMap, key, value);
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   373
                    }
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   374
                }
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   375
            }
58870c7a62e0 8167273: Calendar.getDisplayNames inconsistent with DateFormatSymbols
rgoel
parents: 38747
diff changeset
   376
        }
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   377
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   378
        // Remove all duplicates
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   379
        if (Objects.nonNull(parentsMap)) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   380
            for (Iterator<String> it = myMap.keySet().iterator(); it.hasNext();) {
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   381
                String key = it.next();
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   382
                if (!key.equals("numberingScripts") && // real body "NumberElements" may differ
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   383
                    Objects.deepEquals(parentsMap.get(key), myMap.get(key))) {
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   384
                    it.remove();
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   385
                }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   386
            }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   387
        }
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   388
32510
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   389
        targetMap = myMap;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   390
        return myMap;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   391
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   392
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   393
    private void handleMultipleInheritance(Map<String, Object> map, Map<String, Object> parents, String key) {
58969
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   394
        String formatMapKey = key + "/format";
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   395
        Object format = map.get(formatMapKey);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   396
        if (format != null) {
58969
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   397
            map.remove(formatMapKey);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   398
            map.put(key, format);
58969
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   399
            if (fillInElements(parents, formatMapKey, format)) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   400
                map.remove(key);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   401
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   402
        }
58969
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   403
        String standaloneMapKey = key + "/stand-alone";
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   404
        Object standalone = map.get(standaloneMapKey);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   405
        if (standalone != null) {
58969
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   406
            map.remove(standaloneMapKey);
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   407
            String standaloneResourceKey = "standalone." + key;
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   408
            map.put(standaloneResourceKey, standalone);
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   409
            if (fillInElements(parents, standaloneMapKey, standalone)) {
a4430bb9f97d 8233579: DateFormatSymbols.getShortMonths() return wrong string on es_CL, es_CO locales
naoto
parents: 58825
diff changeset
   410
                map.remove(standaloneResourceKey);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   411
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   412
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   413
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   414
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   415
    /**
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   416
     * Fills in any empty elements with its parent element. Returns true if the resulting array is
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   417
     * identical to its parent array.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   418
     *
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   419
     * @param parents
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   420
     * @param key
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   421
     * @param value
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   422
     * @return true if the resulting array is identical to its parent array.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   423
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   424
    private boolean fillInElements(Map<String, Object> parents, String key, Object value) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   425
        if (parents == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   426
            return false;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   427
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   428
        if (value instanceof String[]) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   429
            Object pvalue = parents.get(key);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   430
            if (pvalue != null && pvalue instanceof String[]) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   431
                String[] strings = (String[]) value;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   432
                String[] pstrings = (String[]) pvalue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   433
                for (int i = 0; i < strings.length; i++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   434
                    if (strings[i] == null || strings[i].length() == 0) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   435
                        strings[i] = pstrings[i];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   436
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   437
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   438
                return Arrays.equals(strings, pstrings);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   439
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   440
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   441
        return false;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   442
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   443
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   444
    /*
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   445
     * Adjusts String[] for era names because JRE's Calendars use different
15281
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   446
     * ERA value indexes in the Buddhist, Japanese Imperial, and Islamic calendars.
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   447
     */
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   448
    private void adjustEraNames(Map<String, Object> map, CalendarType type) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   449
        String[][] eraNames = new String[ERA_KEYS.length][];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   450
        String[] realKeys = new String[ERA_KEYS.length];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   451
        int index = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   452
        for (String key : ERA_KEYS) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   453
            String realKey = type.keyElementName() + key;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   454
            String[] value = (String[]) map.get(realKey);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   455
            if (value != null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   456
                switch (type) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   457
                case GREGORIAN:
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   458
                    break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   459
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   460
                case JAPANESE:
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   461
                    {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   462
                        String[] newValue = new String[value.length + 1];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   463
                        String[] julianEras = (String[]) map.get(key);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   464
                        if (julianEras != null && julianEras.length >= 2) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   465
                            newValue[0] = julianEras[1];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   466
                        } else {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   467
                            newValue[0] = "";
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   468
                        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   469
                        System.arraycopy(value, 0, newValue, 1, value.length);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   470
                        value = newValue;
54769
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   471
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   472
                        // fix up 'Reiwa' era, which can be missing in some locales
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   473
                        if (value[value.length - 1] == null) {
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   474
                            value[value.length - 1] = (key.startsWith("narrow.") ? "R" : "Reiwa");
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   475
                        }
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   476
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   477
                    break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   478
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   479
                case BUDDHIST:
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   480
                    // Replace the value
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   481
                    value = new String[] {"BC", value[0]};
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   482
                    break;
15281
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   483
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   484
                case ISLAMIC:
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   485
                    // Replace the value
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   486
                    value = new String[] {"", value[0]};
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   487
                    break;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   488
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   489
                if (!key.equals(realKey)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   490
                    map.put(realKey, value);
54769
925ee7a89325 8221432: Upgrade CLDR to Version 35.1
naoto
parents: 53920
diff changeset
   491
                    map.put("java.time." + realKey, value);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   492
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   493
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   494
            realKeys[index] = realKey;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   495
            eraNames[index++] = value;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   496
        }
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   497
        for (int i = 0; i < eraNames.length; i++) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   498
            if (eraNames[i] == null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   499
                map.put(realKeys[i], null);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   500
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   501
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   502
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   503
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   504
    private void handleDateTimeFormatPatterns(String[] patternKeys, Map<String, Object> myMap, Map<String, Object> parentsMap,
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   505
                                              CalendarType calendarType, String name) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   506
        String calendarPrefix = calendarType.keyElementName();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   507
        for (String k : patternKeys) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   508
            if (myMap.containsKey(calendarPrefix + k)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   509
                int len = patternKeys.length;
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   510
                List<String> dateTimePatterns = new ArrayList<>(len);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   511
                List<String> sdfPatterns = new ArrayList<>(len);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   512
                for (int i = 0; i < len; i++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   513
                    String key = calendarPrefix + patternKeys[i];
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   514
                    String pattern = (String) myMap.remove(key);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   515
                    if (pattern == null) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   516
                        pattern = (String) parentsMap.remove(key);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   517
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   518
                    if (pattern != null) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   519
                        // Perform date-time format pattern conversion which is
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   520
                        // applicable to both SimpleDateFormat and j.t.f.DateTimeFormatter.
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   521
                        // For example, character 'B' is mapped with 'a', as 'B' is not
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   522
                        // supported in either SimpleDateFormat or j.t.f.DateTimeFormatter
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   523
                        String transPattern = translateDateFormatLetters(calendarType, pattern, this::convertDateTimePatternLetter);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   524
                        dateTimePatterns.add(i, transPattern);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   525
                        // Additionally, perform SDF specific date-time format pattern conversion
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   526
                        sdfPatterns.add(i, translateDateFormatLetters(calendarType, transPattern, this::convertSDFLetter));
16852
60207b2b4b42 8011172: JSR 310 DateTime API Updates II
sherman
parents: 15281
diff changeset
   527
                    } else {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   528
                        dateTimePatterns.add(i, null);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   529
                        sdfPatterns.add(i, null);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   530
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   531
                }
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   532
                // If empty, discard patterns
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   533
                if (sdfPatterns.isEmpty()) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   534
                    return;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   535
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   536
                String key = calendarPrefix + name;
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   537
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   538
                // If additional changes are made in the SDF specific conversion,
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   539
                // keep the commonly converted patterns as java.time patterns
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   540
                if (!dateTimePatterns.equals(sdfPatterns)) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   541
                    myMap.put("java.time." + key, dateTimePatterns.toArray(String[]::new));
15281
dd43cb9be0e1 8004489: Add support for Minguo and Hijrah calendars to CalendarNameProvider SPI
okutsu
parents: 14765
diff changeset
   542
                }
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   543
                myMap.put(key, sdfPatterns.toArray(new String[len]));
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   544
                break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   545
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   546
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   547
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   548
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   549
    private String translateDateFormatLetters(CalendarType calendarType, String cldrFormat, ConvertDateTimeLetters converter) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   550
        String pattern = cldrFormat;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   551
        int length = pattern.length();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   552
        boolean inQuote = false;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   553
        StringBuilder jrePattern = new StringBuilder(length);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   554
        int count = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   555
        char lastLetter = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   556
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   557
        for (int i = 0; i < length; i++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   558
            char c = pattern.charAt(i);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   559
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   560
            if (c == '\'') {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   561
                // '' is treated as a single quote regardless of being
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   562
                // in a quoted section.
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   563
                if ((i + 1) < length) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   564
                    char nextc = pattern.charAt(i + 1);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   565
                    if (nextc == '\'') {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   566
                        i++;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   567
                        if (count != 0) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   568
                            converter.convert(calendarType, lastLetter, count, jrePattern);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   569
                            lastLetter = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   570
                            count = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   571
                        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   572
                        jrePattern.append("''");
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   573
                        continue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   574
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   575
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   576
                if (!inQuote) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   577
                    if (count != 0) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   578
                        converter.convert(calendarType, lastLetter, count, jrePattern);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   579
                        lastLetter = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   580
                        count = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   581
                    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   582
                    inQuote = true;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   583
                } else {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   584
                    inQuote = false;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   585
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   586
                jrePattern.append(c);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   587
                continue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   588
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   589
            if (inQuote) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   590
                jrePattern.append(c);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   591
                continue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   592
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   593
            if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   594
                if (count != 0) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   595
                    converter.convert(calendarType, lastLetter, count, jrePattern);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   596
                    lastLetter = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   597
                    count = 0;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   598
                }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   599
                jrePattern.append(c);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   600
                continue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   601
            }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   602
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   603
            if (lastLetter == 0 || lastLetter == c) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   604
                lastLetter = c;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   605
                count++;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   606
                continue;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   607
            }
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   608
            converter.convert(calendarType, lastLetter, count, jrePattern);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   609
            lastLetter = c;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   610
            count = 1;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   611
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   612
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   613
        if (inQuote) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   614
            throw new InternalError("Unterminated quote in date-time pattern: " + cldrFormat);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   615
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   616
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   617
        if (count != 0) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   618
            converter.convert(calendarType, lastLetter, count, jrePattern);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   619
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   620
        if (cldrFormat.contentEquals(jrePattern)) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   621
            return cldrFormat;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   622
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   623
        return jrePattern.toString();
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   624
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   625
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   626
    private String toMetaZoneKey(String tzKey) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   627
        if (tzKey.startsWith(CLDRConverter.TIMEZONE_ID_PREFIX)) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   628
            String tz = tzKey.substring(CLDRConverter.TIMEZONE_ID_PREFIX.length());
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   629
            String meta = CLDRConverter.handlerMetaZones.get(tz);
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   630
            if (meta != null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   631
                return CLDRConverter.METAZONE_ID_PREFIX + meta;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   632
            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   633
        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   634
        return null;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   635
    }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   636
32510
7530a468314c 8134384: Continuation of JDK-8130845 : A date string created by Date#toString() is not parseable neither with ENGLISH, US nor ROOT locale
naoto
parents: 32030
diff changeset
   637
    static List<Object[]> jreTimeZoneNames = Arrays.asList(TimeZoneNames.getContents());
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   638
    private void fillInJREs(String key, Map<String, String> map) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   639
        String tzid = null;
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   640
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   641
        if (key.startsWith(CLDRConverter.METAZONE_ID_PREFIX)) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   642
            // Look for tzid
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   643
            String meta = key.substring(CLDRConverter.METAZONE_ID_PREFIX.length());
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   644
            if (meta.equals("GMT")) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   645
                tzid = meta;
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   646
            } else {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   647
                for (String tz : CLDRConverter.handlerMetaZones.keySet()) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   648
                    if (CLDRConverter.handlerMetaZones.get(tz).equals(meta)) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   649
                        tzid = tz;
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   650
                        break;
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   651
                    }
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   652
                }
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   653
            }
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   654
        } else {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   655
            tzid = key.substring(CLDRConverter.TIMEZONE_ID_PREFIX.length());
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   656
        }
32015
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   657
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   658
        if (tzid != null) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   659
            for (Object[] jreZone : jreTimeZoneNames) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   660
                if (jreZone[0].equals(tzid)) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   661
                    for (int i = 0; i < ZONE_NAME_KEYS.length; i++) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   662
                        if (map.get(ZONE_NAME_KEYS[i]) == null) {
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   663
                            String[] jreNames = (String[])jreZone[1];
eda394dcd1aa 8129881: JDK-8008577 breaks Nashorn test
naoto
parents: 31263
diff changeset
   664
                            map.put(ZONE_NAME_KEYS[i], jreNames[i]);
49904
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   665
                        }
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   666
                    }
cadca99d52e7 8181157: CLDR Timezone name fallback implementation
naoto
parents: 47216
diff changeset
   667
                    break;
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   668
                }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   669
            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   670
        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   671
    }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   672
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   673
    /**
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   674
     * Perform a generic conversion of CLDR date-time format pattern letter based
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   675
     * on the support given by the SimpleDateFormat and the j.t.f.DateTimeFormatter
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   676
     * for date-time formatting.
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   677
     */
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   678
    private void convertDateTimePatternLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   679
        switch (cldrLetter) {
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   680
            case 'u':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   681
                // Change cldr letter 'u' to 'y', as 'u' is interpreted as
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   682
                // "Extended year (numeric)" in CLDR/LDML,
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   683
                // which is not supported in SimpleDateFormat and
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   684
                // j.t.f.DateTimeFormatter, so it is replaced with 'y'
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   685
                // as the best approximation
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   686
                appendN('y', count, sb);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   687
                break;
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   688
            case 'B':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   689
                // 'B' character (day period) is not supported by
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   690
                // SimpleDateFormat and j.t.f.DateTimeFormatter,
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   691
                // this is a workaround in which 'B' character
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   692
                // appearing in CLDR date-time pattern is replaced
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   693
                // with 'a' character and hence resolved with am/pm strings.
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   694
                // This workaround is based on the the fallback mechanism
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   695
                // specified in LDML spec for 'B' character, when a locale
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   696
                // does not have data for day period ('B')
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   697
                appendN('a', count, sb);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   698
                break;
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   699
            default:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   700
                appendN(cldrLetter, count, sb);
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   701
                break;
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   702
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   703
        }
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   704
    }
31263
a81a0af34ca0 8008577: Use CLDR Locale Data by Default
naoto
parents: 21805
diff changeset
   705
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   706
    /**
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   707
     * Perform a conversion of CLDR date-time format pattern letter which is
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   708
     * specific to the SimpleDateFormat.
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   709
     */
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   710
    private void convertSDFLetter(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   711
        switch (cldrLetter) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   712
            case 'G':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   713
                if (calendarType != CalendarType.GREGORIAN) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   714
                    // Adjust the number of 'G's for JRE SimpleDateFormat
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   715
                    if (count == 5) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   716
                        // CLDR narrow -> JRE short
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   717
                        count = 1;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   718
                    } else if (count == 1) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   719
                        // CLDR abbr -> JRE long
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   720
                        count = 4;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   721
                    }
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   722
                }
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   723
                appendN(cldrLetter, count, sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   724
                break;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   725
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   726
            // TODO: support 'c' and 'e' in JRE SimpleDateFormat
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   727
            // Use 'u' and 'E' for now.
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   728
            case 'c':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   729
            case 'e':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   730
                switch (count) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   731
                    case 1:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   732
                        sb.append('u');
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   733
                        break;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   734
                    case 3:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   735
                    case 4:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   736
                        appendN('E', count, sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   737
                        break;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   738
                    case 5:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   739
                        appendN('E', 3, sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   740
                        break;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   741
                }
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   742
                break;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   743
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   744
            case 'v':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   745
            case 'V':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   746
                appendN('z', count, sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   747
                break;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   748
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   749
            case 'Z':
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   750
                if (count == 4 || count == 5) {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   751
                    sb.append("XXX");
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   752
                }
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   753
                break;
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   754
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   755
            default:
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   756
                appendN(cldrLetter, count, sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   757
                break;
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   758
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   759
    }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   760
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   761
    private void appendN(char c, int n, StringBuilder sb) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   762
        for (int i = 0; i < n; i++) {
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   763
            sb.append(c);
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   764
        }
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   765
    }
14765
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   766
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   767
    private static boolean hasNulls(Object[] array) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   768
        for (int i = 0; i < array.length; i++) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   769
            if (array[i] == null) {
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   770
                return true;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   771
            }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   772
        }
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   773
        return false;
0987999ed367 8000983: Support narrow display names for calendar fields
okutsu
parents: 13583
diff changeset
   774
    }
53920
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   775
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   776
    @FunctionalInterface
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   777
    private interface ConvertDateTimeLetters {
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   778
        void convert(CalendarType calendarType, char cldrLetter, int count, StringBuilder sb);
7a72441858bb 8209175: Handle 'B' character introduced in CLDR 33 JDK update for Burmese (my) locale
nishjain
parents: 52869
diff changeset
   779
    }
58058
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   780
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   781
    /**
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   782
     * Returns a complete string array for NumberElements or NumberPatterns. If any
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   783
     * array element is missing, it will fall back to parents map, as well as
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   784
     * numbering script fallback.
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   785
     */
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   786
    private String[] createNumberArray(Map<String, Object> myMap, Map<String, Object>parentsMap,
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   787
                                        String[] keys, String script) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   788
        String[] numArray = new String[keys.length];
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   789
        for (int i = 0; i < keys.length; i++) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   790
            String key = script + "." + keys[i];
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   791
            final int idx = i;
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   792
            Optional.ofNullable(
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   793
                myMap.getOrDefault(key,
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   794
                    // if value not found in myMap, search for parentsMap
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   795
                    parentsMap.getOrDefault(key,
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   796
                        parentsMap.getOrDefault(keys[i],
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   797
                            // the last resort is "latn"
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   798
                            parentsMap.get("latn." + keys[i])))))
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   799
                .ifPresentOrElse(v -> numArray[idx] = (String)v, () -> {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   800
                    if (keys == NUMBER_PATTERN_KEYS) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   801
                        // NumberPatterns
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   802
                        if (!key.endsWith("accounting")) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   803
                            // throw error unless it is for "accounting",
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   804
                            // which may be missing.
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   805
                            throw new InternalError("NumberPatterns: null for " +
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   806
                                                    key + ", id: " + id);
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   807
                        }
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   808
                    } else {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   809
                        // NumberElements
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   810
                        assert keys == NUMBER_ELEMENT_KEYS;
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   811
                        if (key.endsWith("/pattern")) {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   812
                            numArray[idx] = "#";
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   813
                        } else {
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   814
                            throw new InternalError("NumberElements: null for " +
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   815
                                                    key + ", id: " + id);
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   816
                        }
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   817
                    }});
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   818
        }
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   819
        return numArray;
b553ad95acf0 8230284: Accounting currency format support does not cope with explicit number system
naoto
parents: 57679
diff changeset
   820
    }
13583
dc0017b1a452 6336885: RFE: Locale Data Deployment Enhancements
naoto
parents:
diff changeset
   821
}