< prev index next >

src/java.base/share/classes/java/util/LocaleISOData.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 23,32 **** --- 23,34 ---- * questions. */ package java.util; + import java.util.Locale.IsoCountryCode; + class LocaleISOData { /** * The 2- and 3-letter ISO 639 language codes. */ static final String isoLanguageTable =
*** 229,239 **** + "AF" + "AFG" // Afghanistan + "AG" + "ATG" // Antigua and Barbuda + "AI" + "AIA" // Anguilla + "AL" + "ALB" // Albania, People's Socialist Republic of + "AM" + "ARM" // Armenia ! + "AN" + "ANT" // Netherlands Antilles + "AO" + "AGO" // Angola, Republic of + "AQ" + "ATA" // Antarctica (the territory South of 60 deg S) + "AR" + "ARG" // Argentina, Argentine Republic + "AS" + "ASM" // American Samoa + "AT" + "AUT" // Austria, Republic of --- 231,241 ---- + "AF" + "AFG" // Afghanistan + "AG" + "ATG" // Antigua and Barbuda + "AI" + "AIA" // Anguilla + "AL" + "ALB" // Albania, People's Socialist Republic of + "AM" + "ARM" // Armenia ! // + "AN" + "ANT" // Netherlands Antilles + "AO" + "AGO" // Angola, Republic of + "AQ" + "ATA" // Antarctica (the territory South of 60 deg S) + "AR" + "ARG" // Argentina, Argentine Republic + "AS" + "ASM" // American Samoa + "AT" + "AUT" // Austria, Republic of
*** 475,482 **** --- 477,539 ---- + "ZA" + "ZAF" // South Africa, Republic of + "ZM" + "ZMB" // Zambia, Republic of + "ZW" + "ZWE" // Zimbabwe ; + /** + * Array to hold country codes for ISO3166-3. + */ + private static final String[] ISO3166_3 = { + "AIDJ", "ANHH", "BQAQ", "BUMM", "BYAA", "CSHH", "CSXX", "CTKI", "DDDE", + "DYBJ", "FQHH", "FXFR", "GEHH", "HVBF", "JTUM", "MIUM", "NHVU", "NQAQ", + "NTHH", "PCHH", "PUUM", "PZPA", "RHZW", "SKIN", "SUHH", "TPTL", "VDVN", + "WKUM", "YDYE", "YUCS", "ZRCD" + }; + + /** + * Map to hold country codes for each ISO3166 part. + */ + private static Map<IsoCountryCode, Set<String>> iso3166CodesMap = new HashMap<>(); + + /** + * This mapping function attempts to compute value for iso3166CodesMap + * for each IsoCountryCode type key. + */ + private static Set<String> getISOCountriesImpl(IsoCountryCode type) { + switch (type) { + case PART1_ALPHA2: + return Set.of(Locale.getISOCountries()); + case PART1_ALPHA3: + return LocaleISOData.computeISO3166_1Alpha3Countries(); + case PART3: + return Set.of(ISO3166_3); + default: + // should not happen + assert false; + return Collections.emptySet(); + } + } + + /** + * This method is called from Locale class + * to retrieve country code set for getISOCountries(type) + */ + static Set<String> retrieveIsoCountryCodes(IsoCountryCode type) { + return iso3166CodesMap.computeIfAbsent(type, LocaleISOData::getISOCountriesImpl); + } + + /** + * This method computes a set of ISO3166-1 alpha-3 country codes from + * existing isoCountryTable. + */ + private static Set<String> computeISO3166_1Alpha3Countries() { + int tableLength = isoCountryTable.length(); + String[] isoTable = new String[tableLength / 5]; + for (int i = 0, index = 0; index < tableLength; i++, index += 5) { + isoTable[i] = isoCountryTable.substring(index + 2, index + 5); + } + return Set.of(isoTable); + } + private LocaleISOData() { } }
< prev index next >