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