12ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* GENERATED SOURCE. DO NOT MODIFY. */ 2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 42ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* 52ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ******************************************************************************* 62ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Copyright (C) 2009-2010, International Business Machines Corporation and * 72ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * others. All Rights Reserved. * 82ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ******************************************************************************* 92ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpackage android.icu.impl.locale; 112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Collections; 132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Map; 142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Map.Entry; 152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Set; 162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.SortedMap; 172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.TreeMap; 182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.TreeSet; 192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.impl.locale.InternalLocaleBuilder.CaseInsensitiveChar; 212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.impl.locale.InternalLocaleBuilder.CaseInsensitiveString; 222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 241537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller/** 251537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * @hide Only a subset of ICU is exposed in Android 26836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller */ 272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpublic class LocaleExtensions { 282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private SortedMap<Character, Extension> _map; 302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private String _id; 312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private static final SortedMap<Character, Extension> EMPTY_MAP = 332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Collections.unmodifiableSortedMap(new TreeMap<Character, Extension>()); 342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public static final LocaleExtensions EMPTY_EXTENSIONS; 362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public static final LocaleExtensions CALENDAR_JAPANESE; 372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public static final LocaleExtensions NUMBER_THAI; 382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller static { 402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller EMPTY_EXTENSIONS = new LocaleExtensions(); 412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller EMPTY_EXTENSIONS._id = ""; 422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller EMPTY_EXTENSIONS._map = EMPTY_MAP; 432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller CALENDAR_JAPANESE = new LocaleExtensions(); 452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller CALENDAR_JAPANESE._id = "u-ca-japanese"; 462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller CALENDAR_JAPANESE._map = new TreeMap<Character, Extension>(); 472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller CALENDAR_JAPANESE._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.CA_JAPANESE); 482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller NUMBER_THAI = new LocaleExtensions(); 502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller NUMBER_THAI._id = "u-nu-thai"; 512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller NUMBER_THAI._map = new TreeMap<Character, Extension>(); 522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller NUMBER_THAI._map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), UnicodeLocaleExtension.NU_THAI); 532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private LocaleExtensions() { 562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /* 592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Package local constructor, only used by InternalLocaleBuilder. 602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller LocaleExtensions(Map<CaseInsensitiveChar, String> extensions, 622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Set<CaseInsensitiveString> uattributes, Map<CaseInsensitiveString, String> ukeywords) { 632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller boolean hasExtension = (extensions != null && extensions.size() > 0); 642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller boolean hasUAttributes = (uattributes != null && uattributes.size() > 0); 652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller boolean hasUKeywords = (ukeywords != null && ukeywords.size() > 0); 662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!hasExtension && !hasUAttributes && !hasUKeywords) { 682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _map = EMPTY_MAP; 692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _id = ""; 702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return; 712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // Build extension map 742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _map = new TreeMap<Character, Extension>(); 752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (hasExtension) { 762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller for (Entry<CaseInsensitiveChar, String> ext : extensions.entrySet()) { 772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char key = AsciiUtil.toLower(ext.getKey().value()); 782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String value = ext.getValue(); 792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (LanguageTag.isPrivateusePrefixChar(key)) { 812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // we need to exclude special variant in privuateuse, e.g. "x-abc-lvariant-DEF" 822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller value = InternalLocaleBuilder.removePrivateuseVariant(value); 832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (value == null) { 842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller continue; 852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension e = new Extension(key, AsciiUtil.toLowerString(value)); 892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _map.put(Character.valueOf(key), e); 902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (hasUAttributes || hasUKeywords) { 942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller TreeSet<String> uaset = null; 952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller TreeMap<String, String> ukmap = null; 962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (hasUAttributes) { 982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller uaset = new TreeSet<String>(); 992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller for (CaseInsensitiveString cis : uattributes) { 1002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller uaset.add(AsciiUtil.toLowerString(cis.value())); 1012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (hasUKeywords) { 1052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ukmap = new TreeMap<String, String>(); 1062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller for (Entry<CaseInsensitiveString, String> kwd : ukeywords.entrySet()) { 1072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String key = AsciiUtil.toLowerString(kwd.getKey().value()); 1082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String type = AsciiUtil.toLowerString(kwd.getValue()); 1092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ukmap.put(key, type); 1102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller UnicodeLocaleExtension ule = new UnicodeLocaleExtension(uaset, ukmap); 1142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _map.put(Character.valueOf(UnicodeLocaleExtension.SINGLETON), ule); 1152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (_map.size() == 0) { 1182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // this could happen when only privuateuse with special variant 1192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _map = EMPTY_MAP; 1202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _id = ""; 1212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 1222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller _id = toID(_map); 1232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public Set<Character> getKeys() { 1272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Collections.unmodifiableSet(_map.keySet()); 1282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public Extension getExtension(Character key) { 1312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue()))); 1322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String getExtensionValue(Character key) { 1352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension ext = _map.get(Character.valueOf(AsciiUtil.toLower(key.charValue()))); 1362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (ext == null) { 1372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return null; 1382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return ext.getValue(); 1402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public Set<String> getUnicodeLocaleAttributes() { 1432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); 1442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (ext == null) { 1452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Collections.emptySet(); 1462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller assert (ext instanceof UnicodeLocaleExtension); 1482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return ((UnicodeLocaleExtension)ext).getUnicodeLocaleAttributes(); 1492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public Set<String> getUnicodeLocaleKeys() { 1522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); 1532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (ext == null) { 1542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return Collections.emptySet(); 1552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller assert (ext instanceof UnicodeLocaleExtension); 1572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return ((UnicodeLocaleExtension)ext).getUnicodeLocaleKeys(); 1582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String getUnicodeLocaleType(String unicodeLocaleKey) { 1612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension ext = _map.get(Character.valueOf(UnicodeLocaleExtension.SINGLETON)); 1622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (ext == null) { 1632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return null; 1642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller assert (ext instanceof UnicodeLocaleExtension); 1662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return ((UnicodeLocaleExtension)ext).getUnicodeLocaleType(AsciiUtil.toLowerString(unicodeLocaleKey)); 1672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public boolean isEmpty() { 1702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return _map.isEmpty(); 1712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public static boolean isValidKey(char c) { 1742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return LanguageTag.isExtensionSingletonChar(c) || LanguageTag.isPrivateusePrefixChar(c); 1752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public static boolean isValidUnicodeLocaleKey(String ukey) { 1782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return UnicodeLocaleExtension.isKey(ukey); 1792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private static String toID(SortedMap<Character, Extension> map) { 1822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller StringBuilder buf = new StringBuilder(); 1832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension privuse = null; 1842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller for (Entry<Character, Extension> entry : map.entrySet()) { 1852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller char singleton = entry.getKey().charValue(); 1862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller Extension extension = entry.getValue(); 1872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (LanguageTag.isPrivateusePrefixChar(singleton)) { 1882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller privuse = extension; 1892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 1902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (buf.length() > 0) { 1912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller buf.append(LanguageTag.SEP); 1922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller buf.append(extension); 1942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (privuse != null) { 1972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (buf.length() > 0) { 1982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller buf.append(LanguageTag.SEP); 1992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller buf.append(privuse); 2012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return buf.toString(); 2032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 206f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Override 2072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String toString() { 2082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return _id; 2092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String getID() { 2122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return _id; 2132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 215f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Override 2162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int hashCode() { 2172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return _id.hashCode(); 2182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 220f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Override 2212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public boolean equals(Object other) { 2222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (this == other) { 2232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return true; 2242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!(other instanceof LocaleExtensions)) { 2262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return false; 2272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return this._id.equals(((LocaleExtensions)other)._id); 2292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller} 231