blob: 24474ca418bc410d951075179d88a8f98992cca7 [file] [log] [blame]
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/*
*******************************************************************************
* Copyright (C) 2012-2013, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.tool.currency;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.Map.Entry;
import java.util.SortedMap;
import java.util.TimeZone;
import java.util.TreeMap;
/**
* Container of ISO 4217 alpha3 - numeric3 code mapping data
*/
public class NumericCodeData {
private SortedMap<String, String> _codeMap;
private NumericCodeData(SortedMap<String, String> codeMap) {
_codeMap = codeMap;
}
public static NumericCodeData getDefaultInstance() {
SortedMap<String, String> map = new TreeMap<String, String>();
for (String[] dataEntry : CODE_MAP_DATA) {
map.put(dataEntry[0], dataEntry[1]);
}
return new NumericCodeData(map);
}
public static NumericCodeData createInstance(Collection<CurrencyDataEntry> dataEntries) {
SortedMap<String, String> map = new TreeMap<String, String>();
for (CurrencyDataEntry dataEntry : dataEntries) {
String alphaCode = dataEntry.alphabeticCode();
Integer numCode = dataEntry.numericCode();
if (alphaCode == null || numCode == null) {
continue;
}
map.put(alphaCode, String.format("%03d", numCode));
}
return new NumericCodeData(map);
}
public NumericCodeData merge(NumericCodeData anotherData) {
SortedMap<String, String> codeMap = anotherData.getAlphaNumericCodeMap();
for (Entry<String, String> codeMapEntry : codeMap.entrySet()) {
String alphaCode = codeMapEntry.getKey();
String numCode = codeMapEntry.getValue();
if (!_codeMap.containsKey(alphaCode)) {
_codeMap.put(alphaCode, numCode);
} else {
String existingValue = _codeMap.get(alphaCode);
if (!existingValue.equals(numCode)) {
throw new RuntimeException("Duplicated definition for " + alphaCode + ": value=" + existingValue + "/another value=" + numCode);
}
}
}
return this;
}
public SortedMap<String, String> getAlphaNumericCodeMap() {
return Collections.unmodifiableSortedMap(_codeMap);
}
public void printArray() {
for (Entry<String, String> entry : getAlphaNumericCodeMap().entrySet()) {
System.out.println(" {\"" + entry.getKey() + "\", \"" + entry.getValue() + "\"},");
}
}
public void writeResource(OutputStreamWriter osw, String resName) throws IOException {
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
PrintWriter pw = new PrintWriter(osw, true);
// Header
pw.println("//---------------------------------------------------------");
pw.println("// Copyright (C) 2016 and later: Unicode, Inc. and others.");
pw.println("// License & terms of use: http://www.unicode.org/copyright.html");
pw.println("//---------------------------------------------------------");
pw.println("// Copyright (C) 2013, International Business Machines");
pw.println("// Corporation and others. All Rights Reserved.");
pw.println("//---------------------------------------------------------");
pw.println("// Build tool: com.ibm.icu.dev.tool.currency.NumericCodeData");
pw.println(String.format("// Build date: %1$tFT%1$tTZ", cal));
pw.println("//---------------------------------------------------------");
pw.println("// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<");
pw.println("// >> !!! >>> DO NOT EDIT <<< !!! <<");
pw.println("//---------------------------------------------------------");
pw.println("");
// Resource root
pw.println(resName + ":table(nofallback){");
// Map data
pw.println(" codeMap{");
for (Entry<String, String> mapEntry : _codeMap.entrySet()) {
String alphaCode = mapEntry.getKey();
int numericCodeVal = Integer.parseInt(mapEntry.getValue());
pw.println(String.format(" %1$s:int{%2$d}", alphaCode, numericCodeVal));
}
pw.println(" }");
pw.println("}");
}
private static final String[][] CODE_MAP_DATA = {
{"ADP", "020"},
{"AED", "784"},
{"AFA", "004"},
{"AFN", "971"},
{"ALL", "008"},
{"AMD", "051"},
{"ANG", "532"},
{"AOA", "973"},
{"AON", "024"},
{"AOR", "982"},
{"ARA", "032"},
{"ARP", "032"},
{"ARS", "032"},
{"ATS", "040"},
{"AUD", "036"},
{"AWG", "533"},
{"AYM", "945"},
{"AZM", "031"},
{"AZN", "944"},
{"BAD", "070"},
{"BAM", "977"},
{"BBD", "052"},
{"BDT", "050"},
{"BEC", "993"},
{"BEF", "056"},
{"BEL", "992"},
{"BGL", "100"},
{"BGN", "975"},
{"BHD", "048"},
{"BIF", "108"},
{"BMD", "060"},
{"BND", "096"},
{"BOB", "068"},
{"BOV", "984"},
{"BRC", "076"},
{"BRE", "076"},
{"BRL", "986"},
{"BRN", "076"},
{"BRR", "987"},
{"BSD", "044"},
{"BTN", "064"},
{"BWP", "072"},
{"BYB", "112"},
{"BYN", "933"},
{"BYR", "974"},
{"BZD", "084"},
{"CAD", "124"},
{"CDF", "976"},
{"CHC", "948"},
{"CHE", "947"},
{"CHF", "756"},
{"CHW", "948"},
{"CLF", "990"},
{"CLP", "152"},
{"CNY", "156"},
{"COP", "170"},
{"COU", "970"},
{"CRC", "188"},
{"CSD", "891"},
{"CSK", "200"},
{"CUC", "931"},
{"CUP", "192"},
{"CVE", "132"},
{"CYP", "196"},
{"CZK", "203"},
{"DDM", "278"},
{"DEM", "276"},
{"DJF", "262"},
{"DKK", "208"},
{"DOP", "214"},
{"DZD", "012"},
{"ECS", "218"},
{"ECV", "983"},
{"EEK", "233"},
{"EGP", "818"},
{"ERN", "232"},
{"ESA", "996"},
{"ESB", "995"},
{"ESP", "724"},
{"ETB", "230"},
{"EUR", "978"},
{"FIM", "246"},
{"FJD", "242"},
{"FKP", "238"},
{"FRF", "250"},
{"GBP", "826"},
{"GEK", "268"},
{"GEL", "981"},
{"GHC", "288"},
{"GHP", "939"},
{"GHS", "936"},
{"GIP", "292"},
{"GMD", "270"},
{"GNF", "324"},
{"GQE", "226"},
{"GRD", "300"},
{"GTQ", "320"},
{"GWP", "624"},
{"GYD", "328"},
{"HKD", "344"},
{"HNL", "340"},
{"HRD", "191"},
{"HRK", "191"},
{"HTG", "332"},
{"HUF", "348"},
{"IDR", "360"},
{"IEP", "372"},
{"ILS", "376"},
{"INR", "356"},
{"IQD", "368"},
{"IRR", "364"},
{"ISK", "352"},
{"ITL", "380"},
{"JMD", "388"},
{"JOD", "400"},
{"JPY", "392"},
{"KES", "404"},
{"KGS", "417"},
{"KHR", "116"},
{"KMF", "174"},
{"KPW", "408"},
{"KRW", "410"},
{"KWD", "414"},
{"KYD", "136"},
{"KZT", "398"},
{"LAK", "418"},
{"LBP", "422"},
{"LKR", "144"},
{"LRD", "430"},
{"LSL", "426"},
{"LTL", "440"},
{"LTT", "440"},
{"LUC", "989"},
{"LUF", "442"},
{"LUL", "988"},
{"LVL", "428"},
{"LVR", "428"},
{"LYD", "434"},
{"MAD", "504"},
{"MDL", "498"},
{"MGA", "969"},
{"MGF", "450"},
{"MKD", "807"},
{"MLF", "466"},
{"MMK", "104"},
{"MNT", "496"},
{"MOP", "446"},
{"MRO", "478"},
{"MTL", "470"},
{"MUR", "480"},
{"MVR", "462"},
{"MWK", "454"},
{"MXN", "484"},
{"MXV", "979"},
{"MYR", "458"},
{"MZM", "508"},
{"MZN", "943"},
{"NAD", "516"},
{"NGN", "566"},
{"NIO", "558"},
{"NLG", "528"},
{"NOK", "578"},
{"NPR", "524"},
{"NZD", "554"},
{"OMR", "512"},
{"PAB", "590"},
{"PEI", "604"},
{"PEN", "604"},
{"PES", "604"},
{"PGK", "598"},
{"PHP", "608"},
{"PKR", "586"},
{"PLN", "985"},
{"PLZ", "616"},
{"PTE", "620"},
{"PYG", "600"},
{"QAR", "634"},
{"ROL", "642"},
{"RON", "946"},
{"RSD", "941"},
{"RUB", "643"},
{"RUR", "810"},
{"RWF", "646"},
{"SAR", "682"},
{"SBD", "090"},
{"SCR", "690"},
{"SDD", "736"},
{"SDG", "938"},
{"SEK", "752"},
{"SGD", "702"},
{"SHP", "654"},
{"SIT", "705"},
{"SKK", "703"},
{"SLL", "694"},
{"SOS", "706"},
{"SRD", "968"},
{"SRG", "740"},
{"SSP", "728"},
{"STD", "678"},
{"SVC", "222"},
{"SYP", "760"},
{"SZL", "748"},
{"THB", "764"},
{"TJR", "762"},
{"TJS", "972"},
{"TMM", "795"},
{"TMT", "934"},
{"TND", "788"},
{"TOP", "776"},
{"TPE", "626"},
{"TRL", "792"},
{"TRY", "949"},
{"TTD", "780"},
{"TWD", "901"},
{"TZS", "834"},
{"UAH", "980"},
{"UAK", "804"},
{"UGX", "800"},
{"USD", "840"},
{"USN", "997"},
{"USS", "998"},
{"UYI", "940"},
{"UYU", "858"},
{"UZS", "860"},
{"VEB", "862"},
{"VEF", "937"},
{"VND", "704"},
{"VUV", "548"},
{"WST", "882"},
{"XAF", "950"},
{"XAG", "961"},
{"XAU", "959"},
{"XBA", "955"},
{"XBB", "956"},
{"XBC", "957"},
{"XBD", "958"},
{"XCD", "951"},
{"XDR", "960"},
{"XEU", "954"},
{"XOF", "952"},
{"XPD", "964"},
{"XPF", "953"},
{"XPT", "962"},
{"XSU", "994"},
{"XTS", "963"},
{"XUA", "965"},
{"XXX", "999"},
{"YDD", "720"},
{"YER", "886"},
{"YUM", "891"},
{"YUN", "890"},
{"ZAL", "991"},
{"ZAR", "710"},
{"ZMK", "894"},
{"ZMW", "967"},
{"ZRN", "180"},
{"ZRZ", "180"},
{"ZWD", "716"},
{"ZWL", "932"},
{"ZWN", "942"},
{"ZWR", "935"},
};
}