1c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/*
21d3a3b7676bc344c9daf25285d19f86b3b6c946aPrzemyslaw Szczepaniak * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
3c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
5c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is free software; you can redistribute it and/or modify it
6c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * under the terms of the GNU General Public License version 2 only, as
7c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * published by the Free Software Foundation.  Oracle designates this
8c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * particular file as subject to the "Classpath" exception as provided
9c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * by Oracle in the LICENSE file that accompanied this code.
10c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
11c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * This code is distributed in the hope that it will be useful, but WITHOUT
12c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * version 2 for more details (a copy is included in the LICENSE file that
15c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * accompanied this code).
16c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
17c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * You should have received a copy of the GNU General Public License version
18c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * 2 along with this work; if not, write to the Free Software Foundation,
19c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer *
21c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * or visit www.oracle.com if you need additional information or have any
23c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * questions.
24c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
25c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerpackage java.time.format;
26c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
276cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.impl.ZoneMeta;
286cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.text.TimeZoneNames;
296cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.util.TimeZone;
306cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauerimport android.icu.util.ULocale;
31c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Locale;
32c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerimport java.util.Map;
33c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
34c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer/**
35c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * A helper class to map a zone name to metazone and back to the
36c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * appropriate zone id for the particular locale.
37c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * <p>
38c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * The zid<->metazone mappings are based on CLDR metaZones.xml.
39c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer * The alias mappings are based on Link entries in tzdb data files.
40c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer */
41c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauerclass ZoneName {
42c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
43c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public static String toZid(String zid, Locale locale) {
44b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer        // Android-changed: delegate to ICU.
456cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer        TimeZoneNames tzNames = TimeZoneNames.getInstance(locale);
466cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer        if (tzNames.getAvailableMetaZoneIDs().contains(zid)) {
476cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            // Compare TimeZoneFormat#getTargetRegion.
486cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            ULocale uLocale = ULocale.forLocale(locale);
496cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            String region = uLocale.getCountry();
506cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            if (region.length() == 0) {
516cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer                uLocale = ULocale.addLikelySubtags(uLocale);
526cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer                region = uLocale.getCountry();
53c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer            }
546cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            zid = tzNames.getReferenceZoneID(zid, region);
55c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
56c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return toZid(zid);
57c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
58c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer
59c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    public static String toZid(String zid) {
606cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer        // Android-changed: Use ICU ZoneMeta.
616cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer        String canonicalCldrId = ZoneMeta.getCanonicalCLDRID(zid);
626cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer        if (canonicalCldrId != null) {
636cfa38d67bfe090c8aeb809cc01f772b257e0a7aJoachim Sauer            return canonicalCldrId;
64c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        }
65c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer        return zid;
66c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer    }
67b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer
68b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer    // Android-removed: zidMap and aliasMap containing zone id data.
69b73434f614f386111e0032d63964dd9064a5c1b9Joachim Sauer    // Android-removed: zidToMzone, mzoneToZid, mzoneToZidL, aliases and their initialization code.
70c9dd3385ea6f927052783f42fb1282fb093e636eJoachim Sauer}
71