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