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