/* */ package com.ibm.icu.impl; /* */ /* */ import com.ibm.icu.text.TimeZoneNames; /* */ import com.ibm.icu.text.TimeZoneNames.MatchInfo; /* */ import com.ibm.icu.text.TimeZoneNames.NameType; /* */ import com.ibm.icu.util.TimeZone; /* */ import com.ibm.icu.util.TimeZone.SystemTimeZoneType; /* */ import com.ibm.icu.util.ULocale; /* */ import com.ibm.icu.util.UResourceBundle; /* */ import java.io.IOException; /* */ import java.io.ObjectInputStream; /* */ import java.io.ObjectOutputStream; /* */ import java.util.ArrayList; /* */ import java.util.Collection; /* */ import java.util.Collections; /* */ import java.util.EnumSet; /* */ import java.util.HashMap; /* */ import java.util.HashSet; /* */ import java.util.Iterator; /* */ import java.util.LinkedList; /* */ import java.util.List; /* */ import java.util.Map; /* */ import java.util.MissingResourceException; /* */ import java.util.Set; /* */ import java.util.concurrent.ConcurrentHashMap; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class TimeZoneNamesImpl /* */ extends TimeZoneNames /* */ { /* */ private static final long serialVersionUID = -2179814848495897472L; /* */ private static final String ZONE_STRINGS_BUNDLE = "zoneStrings"; /* */ private static final String MZ_PREFIX = "meta:"; /* */ private static Set<String> METAZONE_IDS; /* 44 */ private static final TZ2MZsCache TZ_TO_MZS_CACHE = new TZ2MZsCache(null); /* 45 */ private static final MZ2TZsCache MZ_TO_TZS_CACHE = new MZ2TZsCache(null); /* */ /* */ private transient ICUResourceBundle _zoneStrings; /* */ /* */ private transient ConcurrentHashMap<String, ZNames> _mzNamesMap; /* */ /* */ private transient ConcurrentHashMap<String, TZNames> _tzNamesMap; /* */ /* */ private transient TextTrieMap<NameInfo> _namesTrie; /* */ /* */ private transient boolean _namesTrieFullyLoaded; /* */ /* */ /* */ public TimeZoneNamesImpl(ULocale locale) /* */ { /* 60 */ initialize(locale); /* */ } /* */ /* */ /* */ /* */ /* */ public synchronized Set<String> getAvailableMetaZoneIDs() /* */ { /* 68 */ if (METAZONE_IDS == null) { /* */ try { /* 70 */ UResourceBundle bundle = UResourceBundle.getBundleInstance("com/ibm/icu/impl/data/icudt48b", "metaZones"); /* 71 */ UResourceBundle mapTimezones = bundle.get("mapTimezones"); /* 72 */ Set<String> keys = mapTimezones.keySet(); /* 73 */ METAZONE_IDS = Collections.unmodifiableSet(keys); /* */ } catch (MissingResourceException e) { /* 75 */ METAZONE_IDS = Collections.emptySet(); /* */ } /* */ } /* 78 */ return METAZONE_IDS; /* */ } /* */ /* */ /* */ /* */ /* */ public Set<String> getAvailableMetaZoneIDs(String tzID) /* */ { /* 86 */ if ((tzID == null) || (tzID.length() == 0)) { /* 87 */ return Collections.emptySet(); /* */ } /* 89 */ List<MZMapEntry> maps = (List)TZ_TO_MZS_CACHE.getInstance(tzID, tzID); /* 90 */ if (maps.isEmpty()) { /* 91 */ return Collections.emptySet(); /* */ } /* 93 */ Set<String> mzIDs = new HashSet(maps.size()); /* 94 */ for (MZMapEntry map : maps) { /* 95 */ mzIDs.add(map.mzID()); /* */ } /* */ /* 98 */ return Collections.unmodifiableSet(mzIDs); /* */ } /* */ /* */ /* */ /* */ /* */ public String getMetaZoneID(String tzID, long date) /* */ { /* 106 */ if ((tzID == null) || (tzID.length() == 0)) { /* 107 */ return null; /* */ } /* 109 */ String mzID = null; /* 110 */ List<MZMapEntry> maps = (List)TZ_TO_MZS_CACHE.getInstance(tzID, tzID); /* 111 */ for (MZMapEntry map : maps) { /* 112 */ if ((date >= map.from()) && (date < map.to())) { /* 113 */ mzID = map.mzID(); /* 114 */ break; /* */ } /* */ } /* 117 */ return mzID; /* */ } /* */ /* */ /* */ /* */ /* */ public String getReferenceZoneID(String mzID, String region) /* */ { /* 125 */ if ((mzID == null) || (mzID.length() == 0)) { /* 126 */ return null; /* */ } /* 128 */ String refID = null; /* 129 */ Map<String, String> regionTzMap = (Map)MZ_TO_TZS_CACHE.getInstance(mzID, mzID); /* 130 */ if (!regionTzMap.isEmpty()) { /* 131 */ refID = (String)regionTzMap.get(region); /* 132 */ if (refID == null) { /* 133 */ refID = (String)regionTzMap.get("001"); /* */ } /* */ } /* 136 */ return refID; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public String getMetaZoneDisplayName(String mzID, TimeZoneNames.NameType type) /* */ { /* 145 */ if ((mzID == null) || (mzID.length() == 0)) { /* 146 */ return null; /* */ } /* 148 */ return loadMetaZoneNames(mzID).getName(type); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public String getTimeZoneDisplayName(String tzID, TimeZoneNames.NameType type) /* */ { /* 157 */ if ((tzID == null) || (tzID.length() == 0)) { /* 158 */ return null; /* */ } /* 160 */ return loadTimeZoneNames(tzID).getName(type); /* */ } /* */ /* */ /* */ /* */ /* */ public String getExemplarLocationName(String tzID) /* */ { /* 168 */ if ((tzID == null) || (tzID.length() == 0)) { /* 169 */ return null; /* */ } /* 171 */ String locName = loadTimeZoneNames(tzID).getLocationName(); /* 172 */ if (locName == null) { /* 173 */ locName = super.getExemplarLocationName(tzID); /* */ } /* 175 */ return locName; /* */ } /* */ /* */ /* */ /* */ /* */ public synchronized Collection<TimeZoneNames.MatchInfo> find(String text, int start, EnumSet<TimeZoneNames.NameType> nameTypes) /* */ { /* 183 */ if ((text == null) || (text.length() == 0) || (start < 0) || (start >= text.length())) { /* 184 */ throw new IllegalArgumentException("bad input text or range"); /* */ } /* 186 */ NameSearchHandler handler = new NameSearchHandler(nameTypes); /* 187 */ this._namesTrie.find(text, start, handler); /* 188 */ if ((handler.getMaxMatchLen() == text.length() - start) || (this._namesTrieFullyLoaded)) /* */ { /* 190 */ return handler.getMatches(); /* */ } /* */ /* */ /* */ /* */ /* 196 */ Set<String> tzIDs = TimeZone.getAvailableIDs(TimeZone.SystemTimeZoneType.CANONICAL, null, null); /* 197 */ for (String tzID : tzIDs) { /* 198 */ loadTimeZoneNames(tzID); /* */ } /* */ /* */ /* 202 */ Set<String> mzIDs = getAvailableMetaZoneIDs(); /* 203 */ for (String mzID : mzIDs) { /* 204 */ loadMetaZoneNames(mzID); /* */ } /* 206 */ this._namesTrieFullyLoaded = true; /* */ /* */ /* 209 */ handler.resetResults(); /* 210 */ this._namesTrie.find(text, start, handler); /* 211 */ return handler.getMatches(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ private void initialize(ULocale locale) /* */ { /* 221 */ if (locale == null) { /* 222 */ return; /* */ } /* */ try { /* 225 */ ICUResourceBundle bundle = (ICUResourceBundle)ICUResourceBundle.getBundleInstance("com/ibm/icu/impl/data/icudt48b/zone", locale); /* */ /* 227 */ this._zoneStrings = ((ICUResourceBundle)bundle.get("zoneStrings")); /* */ } catch (MissingResourceException mre) { /* 229 */ this._zoneStrings = null; /* */ } /* */ /* 232 */ this._tzNamesMap = new ConcurrentHashMap(); /* 233 */ this._mzNamesMap = new ConcurrentHashMap(); /* */ /* 235 */ this._namesTrie = new TextTrieMap(true); /* 236 */ this._namesTrieFullyLoaded = false; /* */ /* */ /* 239 */ TimeZone tz = TimeZone.getDefault(); /* 240 */ String tzCanonicalID = ZoneMeta.getCanonicalCLDRID(tz); /* 241 */ if (tzCanonicalID != null) { /* 242 */ loadStrings(tzCanonicalID); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ private synchronized void loadStrings(String tzCanonicalID) /* */ { /* 253 */ if ((tzCanonicalID == null) || (tzCanonicalID.length() == 0)) { /* 254 */ return; /* */ } /* 256 */ loadTimeZoneNames(tzCanonicalID); /* */ /* 258 */ Set<String> mzIDs = getAvailableMetaZoneIDs(tzCanonicalID); /* 259 */ for (String mzID : mzIDs) { /* 260 */ loadMetaZoneNames(mzID); /* */ } /* */ } /* */ /* */ /* */ /* */ private void writeObject(ObjectOutputStream out) /* */ throws IOException /* */ { /* 269 */ ULocale locale = this._zoneStrings == null ? null : this._zoneStrings.getULocale(); /* 270 */ out.writeObject(locale); /* */ } /* */ /* */ /* */ /* */ private void readObject(ObjectInputStream in) /* */ throws IOException, ClassNotFoundException /* */ { /* 278 */ ULocale locale = (ULocale)in.readObject(); /* 279 */ initialize(locale); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ private synchronized ZNames loadMetaZoneNames(String mzID) /* */ { /* 289 */ ZNames znames = (ZNames)this._mzNamesMap.get(mzID); /* 290 */ if (znames == null) { /* 291 */ znames = ZNames.getInstance(this._zoneStrings, "meta:" + mzID); /* */ /* 293 */ mzID = mzID.intern(); /* 294 */ for (TimeZoneNames.NameType t : TimeZoneNames.NameType.values()) { /* 295 */ String name = znames.getName(t); /* 296 */ if (name != null) { /* 297 */ NameInfo info = new NameInfo(null); /* 298 */ info.mzID = mzID; /* 299 */ info.type = t; /* 300 */ this._namesTrie.put(name, info); /* */ } /* */ } /* 303 */ this._mzNamesMap.put(mzID, znames); /* */ } /* 305 */ return znames; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ private synchronized TZNames loadTimeZoneNames(String tzID) /* */ { /* 315 */ TZNames tznames = (TZNames)this._tzNamesMap.get(tzID); /* 316 */ if (tznames == null) { /* 317 */ tznames = TZNames.getInstance(this._zoneStrings, tzID.replace('/', ':')); /* */ /* 319 */ tzID = tzID.intern(); /* 320 */ for (TimeZoneNames.NameType t : TimeZoneNames.NameType.values()) { /* 321 */ String name = tznames.getName(t); /* 322 */ if (name != null) { /* 323 */ NameInfo info = new NameInfo(null); /* 324 */ info.tzID = tzID; /* 325 */ info.type = t; /* 326 */ this._namesTrie.put(name, info); /* */ } /* */ } /* 329 */ this._tzNamesMap.put(tzID, tznames); /* */ } /* 331 */ return tznames; /* */ } /* */ /* */ /* */ private static class NameInfo /* */ { /* */ String tzID; /* */ /* */ String mzID; /* */ TimeZoneNames.NameType type; /* */ } /* */ /* */ private static class NameSearchHandler /* */ implements TextTrieMap.ResultHandler<TimeZoneNamesImpl.NameInfo> /* */ { /* */ private EnumSet<TimeZoneNames.NameType> _nameTypes; /* */ private Collection<TimeZoneNames.MatchInfo> _matches; /* */ private int _maxMatchLen; /* */ /* */ NameSearchHandler(EnumSet<TimeZoneNames.NameType> nameTypes) /* */ { /* 352 */ this._nameTypes = nameTypes; /* */ } /* */ /* */ /* */ /* */ public boolean handlePrefixMatch(int matchLength, Iterator<TimeZoneNamesImpl.NameInfo> values) /* */ { /* 359 */ while (values.hasNext()) { /* 360 */ TimeZoneNamesImpl.NameInfo ninfo = (TimeZoneNamesImpl.NameInfo)values.next(); /* 361 */ if ((this._nameTypes == null) || (this._nameTypes.contains(ninfo.type))) /* */ { /* */ TimeZoneNames.MatchInfo minfo; /* */ TimeZoneNames.MatchInfo minfo; /* 365 */ if (ninfo.tzID != null) { /* 366 */ minfo = new TimeZoneNames.MatchInfo(ninfo.type, ninfo.tzID, null, matchLength); /* */ } else { /* 368 */ assert (ninfo.mzID != null); /* 369 */ minfo = new TimeZoneNames.MatchInfo(ninfo.type, null, ninfo.mzID, matchLength); /* */ } /* 371 */ if (this._matches == null) { /* 372 */ this._matches = new LinkedList(); /* */ } /* 374 */ this._matches.add(minfo); /* 375 */ if (matchLength > this._maxMatchLen) /* 376 */ this._maxMatchLen = matchLength; /* */ } /* */ } /* 379 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ public Collection<TimeZoneNames.MatchInfo> getMatches() /* */ { /* 387 */ if (this._matches == null) { /* 388 */ return Collections.emptyList(); /* */ } /* 390 */ return this._matches; /* */ } /* */ /* */ /* */ /* */ /* */ public int getMaxMatchLen() /* */ { /* 398 */ return this._maxMatchLen; /* */ } /* */ /* */ /* */ /* */ public void resetResults() /* */ { /* 405 */ this._matches = null; /* 406 */ this._maxMatchLen = 0; /* */ } /* */ } /* */ /* */ /* */ /* */ private static class ZNames /* */ { /* 414 */ private static final ZNames EMPTY_ZNAMES = new ZNames(null, false); /* */ /* */ private String[] _names; /* */ /* */ private boolean _shortCommonlyUsed; /* 419 */ private static final String[] KEYS = { "lg", "ls", "ld", "sg", "ss", "sd" }; /* */ /* */ protected ZNames(String[] names, boolean shortCommonlyUsed) { /* 422 */ this._names = names; /* 423 */ this._shortCommonlyUsed = shortCommonlyUsed; /* */ } /* */ /* */ public static ZNames getInstance(ICUResourceBundle zoneStrings, String key) { /* 427 */ boolean[] cu = new boolean[1]; /* 428 */ String[] names = loadData(zoneStrings, key, cu); /* 429 */ if (names == null) { /* 430 */ return EMPTY_ZNAMES; /* */ } /* 432 */ return new ZNames(names, cu[0]); /* */ } /* */ /* */ public String getName(TimeZoneNames.NameType type) { /* 436 */ if (this._names == null) { /* 437 */ return null; /* */ } /* 439 */ String name = null; /* 440 */ switch (TimeZoneNamesImpl.1.$SwitchMap$com$ibm$icu$text$TimeZoneNames$NameType[type.ordinal()]) { /* */ case 1: /* 442 */ name = this._names[0]; /* 443 */ break; /* */ case 2: /* 445 */ name = this._names[1]; /* 446 */ break; /* */ case 3: /* 448 */ name = this._names[2]; /* 449 */ break; /* */ case 4: /* 451 */ if (this._shortCommonlyUsed) { /* 452 */ name = this._names[3]; /* */ } /* */ break; /* */ case 5: /* 456 */ name = this._names[4]; /* 457 */ break; /* */ case 6: /* 459 */ name = this._names[5]; /* 460 */ break; /* */ case 7: /* 462 */ if (this._shortCommonlyUsed) { /* 463 */ name = this._names[4]; /* */ } /* */ break; /* */ case 8: /* 467 */ if (this._shortCommonlyUsed) { /* 468 */ name = this._names[5]; /* */ } /* */ break; /* */ } /* */ /* 473 */ return name; /* */ } /* */ /* */ protected static String[] loadData(ICUResourceBundle zoneStrings, String key, boolean[] shortCommonlyUsed) { /* 477 */ if ((zoneStrings == null) || (key == null) || (key.length() == 0)) { /* 478 */ return null; /* */ } /* */ /* 481 */ shortCommonlyUsed[0] = false; /* 482 */ ICUResourceBundle table = null; /* */ try { /* 484 */ table = zoneStrings.getWithFallback(key); /* */ } catch (MissingResourceException e) { /* 486 */ return null; /* */ } /* */ /* 489 */ boolean isEmpty = true; /* 490 */ String[] names = new String[KEYS.length]; /* 491 */ for (int i = 0; i < names.length; i++) { /* */ try { /* 493 */ names[i] = table.getStringWithFallback(KEYS[i]); /* 494 */ isEmpty = false; /* */ } catch (MissingResourceException e) { /* 496 */ names[i] = null; /* */ } /* */ } /* */ /* 500 */ if (isEmpty) { /* 501 */ return null; /* */ } /* */ try /* */ { /* 505 */ ICUResourceBundle cuRes = table.getWithFallback("cu"); /* 506 */ int cu = cuRes.getInt(); /* 507 */ shortCommonlyUsed[0] = (cu != 0 ? 1 : false); /* */ } /* */ catch (MissingResourceException e) {} /* */ /* */ /* 512 */ return names; /* */ } /* */ } /* */ /* */ /* */ private static class TZNames /* */ extends TimeZoneNamesImpl.ZNames /* */ { /* */ private String _locationName; /* */ /* 522 */ private static final TZNames EMPTY_TZNAMES = new TZNames(null, false, null); /* */ /* */ public static TZNames getInstance(ICUResourceBundle zoneStrings, String key) { /* 525 */ if ((zoneStrings == null) || (key == null) || (key.length() == 0)) { /* 526 */ return EMPTY_TZNAMES; /* */ } /* */ /* 529 */ ICUResourceBundle table = null; /* */ try { /* 531 */ table = zoneStrings.getWithFallback(key); /* */ } catch (MissingResourceException e) { /* 533 */ return EMPTY_TZNAMES; /* */ } /* */ /* 536 */ String locationName = null; /* */ try { /* 538 */ locationName = table.getStringWithFallback("ec"); /* */ } /* */ catch (MissingResourceException e) {} /* */ /* */ /* 543 */ boolean[] cu = new boolean[1]; /* 544 */ String[] names = loadData(zoneStrings, key, cu); /* */ /* 546 */ if ((locationName == null) && (names == null)) { /* 547 */ return EMPTY_TZNAMES; /* */ } /* 549 */ return new TZNames(names, cu[0], locationName); /* */ } /* */ /* */ public String getLocationName() { /* 553 */ return this._locationName; /* */ } /* */ /* */ private TZNames(String[] names, boolean shortCommonlyUsed, String locationName) { /* 557 */ super(shortCommonlyUsed); /* 558 */ this._locationName = locationName; /* */ } /* */ } /* */ /* */ /* */ private static class MZMapEntry /* */ { /* */ private String _mzID; /* */ /* */ private long _from; /* */ /* */ private long _to; /* */ /* */ MZMapEntry(String mzID, long from, long to) /* */ { /* 573 */ this._mzID = mzID; /* 574 */ this._from = from; /* 575 */ this._to = to; /* */ } /* */ /* */ String mzID() { /* 579 */ return this._mzID; /* */ } /* */ /* */ long from() { /* 583 */ return this._from; /* */ } /* */ /* */ long to() { /* 587 */ return this._to; /* */ } /* */ } /* */ /* */ /* */ private static class TZ2MZsCache /* */ extends SoftCache<String, List<TimeZoneNamesImpl.MZMapEntry>, String> /* */ { /* */ protected List<TimeZoneNamesImpl.MZMapEntry> createInstance(String key, String data) /* */ { /* 597 */ List<TimeZoneNamesImpl.MZMapEntry> mzMaps = null; /* */ try { /* 599 */ UResourceBundle bundle = UResourceBundle.getBundleInstance("com/ibm/icu/impl/data/icudt48b", "metaZones"); /* 600 */ UResourceBundle metazoneInfoBundle = bundle.get("metazoneInfo"); /* */ /* 602 */ String tzkey = data.replace('/', ':'); /* 603 */ UResourceBundle zoneBundle = metazoneInfoBundle.get(tzkey); /* */ /* 605 */ mzMaps = new ArrayList(zoneBundle.getSize()); /* 606 */ for (int idx = 0; idx < zoneBundle.getSize(); idx++) { /* 607 */ UResourceBundle mz = zoneBundle.get(idx); /* 608 */ String mzid = mz.getString(0); /* 609 */ String fromStr = "1970-01-01 00:00"; /* 610 */ String toStr = "9999-12-31 23:59"; /* 611 */ if (mz.getSize() == 3) { /* 612 */ fromStr = mz.getString(1); /* 613 */ toStr = mz.getString(2); /* */ } /* */ /* 616 */ long from = parseDate(fromStr); /* 617 */ long to = parseDate(toStr); /* 618 */ mzMaps.add(new TimeZoneNamesImpl.MZMapEntry(mzid, from, to)); /* */ } /* */ } /* */ catch (MissingResourceException mre) {} /* */ /* */ /* 624 */ if (mzMaps == null) { /* 625 */ mzMaps = Collections.emptyList(); /* */ } /* 627 */ return mzMaps; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ private static long parseDate(String text) /* */ { /* 639 */ int year = 0;int month = 0;int day = 0;int hour = 0;int min = 0; /* */ /* */ /* */ /* */ /* 644 */ for (int idx = 0; idx <= 3; idx++) { /* 645 */ int n = text.charAt(idx) - '0'; /* 646 */ if ((n >= 0) && (n < 10)) { /* 647 */ year = 10 * year + n; /* */ } else { /* 649 */ throw new IllegalArgumentException("Bad year"); /* */ } /* */ } /* */ /* 653 */ for (idx = 5; idx <= 6; idx++) { /* 654 */ int n = text.charAt(idx) - '0'; /* 655 */ if ((n >= 0) && (n < 10)) { /* 656 */ month = 10 * month + n; /* */ } else { /* 658 */ throw new IllegalArgumentException("Bad month"); /* */ } /* */ } /* */ /* 662 */ for (idx = 8; idx <= 9; idx++) { /* 663 */ int n = text.charAt(idx) - '0'; /* 664 */ if ((n >= 0) && (n < 10)) { /* 665 */ day = 10 * day + n; /* */ } else { /* 667 */ throw new IllegalArgumentException("Bad day"); /* */ } /* */ } /* */ /* 671 */ for (idx = 11; idx <= 12; idx++) { /* 672 */ int n = text.charAt(idx) - '0'; /* 673 */ if ((n >= 0) && (n < 10)) { /* 674 */ hour = 10 * hour + n; /* */ } else { /* 676 */ throw new IllegalArgumentException("Bad hour"); /* */ } /* */ } /* */ /* 680 */ for (idx = 14; idx <= 15; idx++) { /* 681 */ int n = text.charAt(idx) - '0'; /* 682 */ if ((n >= 0) && (n < 10)) { /* 683 */ min = 10 * min + n; /* */ } else { /* 685 */ throw new IllegalArgumentException("Bad minute"); /* */ } /* */ } /* */ /* 689 */ long date = Grego.fieldsToDay(year, month - 1, day) * 86400000L + hour * 3600000 + min * 60000; /* */ /* 691 */ return date; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ private static class MZ2TZsCache /* */ extends SoftCache<String, Map<String, String>, String> /* */ { /* */ protected Map<String, String> createInstance(String key, String data) /* */ { /* 706 */ Map<String, String> map = null; /* */ UResourceBundle regionMap; /* 708 */ try { UResourceBundle bundle = UResourceBundle.getBundleInstance("com/ibm/icu/impl/data/icudt48b", "metaZones"); /* 709 */ UResourceBundle mapTimezones = bundle.get("mapTimezones"); /* 710 */ regionMap = mapTimezones.get(key); /* */ /* 712 */ Set<String> regions = regionMap.keySet(); /* 713 */ map = new HashMap(regions.size()); /* */ /* 715 */ for (String region : regions) { /* 716 */ String tzID = regionMap.getString(region).intern(); /* 717 */ map.put(region.intern(), tzID); /* */ } /* */ } /* */ catch (MissingResourceException e) {} /* */ /* 722 */ if (map == null) { /* 723 */ map = Collections.emptyMap(); /* */ } /* 725 */ return map; /* */ } /* */ } /* */ } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\impl\TimeZoneNamesImpl.class * Java compiler version: 5 (49.0) * JD-Core Version: 0.7.1 */