• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4  *******************************************************************************
5  * Copyright (C) 2012-2013, International Business Machines Corporation and    *
6  * others. All Rights Reserved.                                                *
7  *******************************************************************************
8  */
9 package com.ibm.icu.dev.tool.currency;
10 
11 import java.io.IOException;
12 import java.io.OutputStreamWriter;
13 import java.io.PrintWriter;
14 import java.util.Collection;
15 import java.util.Collections;
16 import java.util.GregorianCalendar;
17 import java.util.Map.Entry;
18 import java.util.SortedMap;
19 import java.util.TimeZone;
20 import java.util.TreeMap;
21 
22 /**
23  * Container of ISO 4217 alpha3 - numeric3 code mapping data
24  */
25 public class NumericCodeData {
26     private SortedMap<String, String> _codeMap;
27 
NumericCodeData(SortedMap<String, String> codeMap)28     private NumericCodeData(SortedMap<String, String> codeMap) {
29         _codeMap = codeMap;
30     }
31 
getDefaultInstance()32     public static NumericCodeData getDefaultInstance() {
33         SortedMap<String, String> map = new TreeMap<String, String>();
34         for (String[] dataEntry : CODE_MAP_DATA) {
35             map.put(dataEntry[0], dataEntry[1]);
36         }
37         return new NumericCodeData(map);
38     }
39 
createInstance(Collection<CurrencyDataEntry> dataEntries)40     public static NumericCodeData createInstance(Collection<CurrencyDataEntry> dataEntries) {
41         SortedMap<String, String> map = new TreeMap<String, String>();
42         for (CurrencyDataEntry dataEntry : dataEntries) {
43             String alphaCode = dataEntry.alphabeticCode();
44             Integer numCode = dataEntry.numericCode();
45             if (alphaCode == null || numCode == null) {
46                 continue;
47             }
48             map.put(alphaCode, String.format("%03d", numCode));
49         }
50         return new NumericCodeData(map);
51     }
52 
merge(NumericCodeData anotherData)53     public NumericCodeData merge(NumericCodeData anotherData) {
54         SortedMap<String, String> codeMap = anotherData.getAlphaNumericCodeMap();
55         for (Entry<String, String> codeMapEntry : codeMap.entrySet()) {
56             String alphaCode = codeMapEntry.getKey();
57             String numCode = codeMapEntry.getValue();
58             if (!_codeMap.containsKey(alphaCode)) {
59                 _codeMap.put(alphaCode, numCode);
60             } else {
61                 String existingValue = _codeMap.get(alphaCode);
62                 if (!existingValue.equals(numCode)) {
63                     throw new RuntimeException("Duplicated definition for " + alphaCode + ": value=" + existingValue + "/another value=" + numCode);
64                 }
65             }
66         }
67         return this;
68     }
69 
getAlphaNumericCodeMap()70     public SortedMap<String, String> getAlphaNumericCodeMap() {
71         return Collections.unmodifiableSortedMap(_codeMap);
72     }
73 
printArray()74     public void printArray() {
75         for (Entry<String, String> entry : getAlphaNumericCodeMap().entrySet()) {
76             System.out.println("        {\"" + entry.getKey() + "\", \"" + entry.getValue() + "\"},");
77         }
78     }
79 
writeResource(OutputStreamWriter osw, String resName)80     public void writeResource(OutputStreamWriter osw, String resName) throws IOException {
81         GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
82 
83         PrintWriter pw = new PrintWriter(osw, true);
84 
85         // Header
86         pw.println("//---------------------------------------------------------");
87         pw.println("// Copyright (C) 2016 and later: Unicode, Inc. and others.");
88         pw.println("// License & terms of use: http://www.unicode.org/copyright.html");
89         pw.println("//---------------------------------------------------------");
90         pw.println("// Copyright (C) 2013, International Business Machines");
91         pw.println("// Corporation and others.  All Rights Reserved.");
92         pw.println("//---------------------------------------------------------");
93         pw.println("// Build tool: com.ibm.icu.dev.tool.currency.NumericCodeData");
94         pw.println(String.format("// Build date: %1$tFT%1$tTZ", cal));
95         pw.println("//---------------------------------------------------------");
96         pw.println("// >> !!! >>   THIS IS A MACHINE-GENERATED FILE   << !!! <<");
97         pw.println("// >> !!! >>>            DO NOT EDIT             <<< !!! <<");
98         pw.println("//---------------------------------------------------------");
99         pw.println("");
100 
101         // Resource root
102         pw.println(resName + ":table(nofallback){");
103 
104         // Map data
105         pw.println("    codeMap{");
106 
107         for (Entry<String, String> mapEntry : _codeMap.entrySet()) {
108             String alphaCode = mapEntry.getKey();
109             int numericCodeVal = Integer.parseInt(mapEntry.getValue());
110             pw.println(String.format("        %1$s:int{%2$d}", alphaCode, numericCodeVal));
111         }
112 
113         pw.println("    }");
114 
115         pw.println("}");
116     }
117 
118     private static final String[][] CODE_MAP_DATA = {
119         {"ADP", "020"},
120         {"AED", "784"},
121         {"AFA", "004"},
122         {"AFN", "971"},
123         {"ALL", "008"},
124         {"ALK", "008"},
125         {"AMD", "051"},
126         {"ANG", "532"},
127         {"AOA", "973"},
128         {"AOK", "024"},
129         {"AON", "024"},
130         {"AOR", "982"},
131         {"ARA", "032"},
132         {"ARP", "032"},
133         {"ARS", "032"},
134         {"ARY", "032"},
135         {"ATS", "040"},
136         {"AUD", "036"},
137         {"AWG", "533"},
138         {"AYM", "945"},
139         {"AZM", "031"},
140         {"AZN", "944"},
141         {"BAD", "070"},
142         {"BAM", "977"},
143         {"BBD", "052"},
144         {"BDT", "050"},
145         {"BEC", "993"},
146         {"BEF", "056"},
147         {"BEL", "992"},
148         {"BGJ", "100"},
149         {"BGK", "100"},
150         {"BGL", "100"},
151         {"BGN", "975"},
152         {"BHD", "048"},
153         {"BIF", "108"},
154         {"BMD", "060"},
155         {"BND", "096"},
156         {"BOB", "068"},
157         {"BOP", "068"},
158         {"BOV", "984"},
159         {"BRB", "076"},
160         {"BRC", "076"},
161         {"BRE", "076"},
162         {"BRL", "986"},
163         {"BRN", "076"},
164         {"BRR", "987"},
165         {"BSD", "044"},
166         {"BTN", "064"},
167         {"BUK", "104"},
168         {"BWP", "072"},
169         {"BYB", "112"},
170         {"BYN", "933"},
171         {"BYR", "974"},
172         {"BZD", "084"},
173         {"CAD", "124"},
174         {"CDF", "976"},
175         {"CHC", "948"},
176         {"CHE", "947"},
177         {"CHF", "756"},
178         {"CHW", "948"},
179         {"CLF", "990"},
180         {"CLP", "152"},
181         {"CNY", "156"},
182         {"COP", "170"},
183         {"COU", "970"},
184         {"CRC", "188"},
185         {"CSD", "891"},
186         {"CSJ", "203"},
187         {"CSK", "200"},
188         {"CUC", "931"},
189         {"CUP", "192"},
190         {"CVE", "132"},
191         {"CYP", "196"},
192         {"CZK", "203"},
193         {"DDM", "278"},
194         {"DEM", "276"},
195         {"DJF", "262"},
196         {"DKK", "208"},
197         {"DOP", "214"},
198         {"DZD", "012"},
199         {"ECS", "218"},
200         {"ECV", "983"},
201         {"EEK", "233"},
202         {"EGP", "818"},
203         {"ERN", "232"},
204         {"ESA", "996"},
205         {"ESB", "995"},
206         {"ESP", "724"},
207         {"ETB", "230"},
208         {"EUR", "978"},
209         {"FIM", "246"},
210         {"FJD", "242"},
211         {"FKP", "238"},
212         {"FRF", "250"},
213         {"GBP", "826"},
214         {"GEK", "268"},
215         {"GEL", "981"},
216         {"GHC", "288"},
217         {"GHP", "939"},
218         {"GHS", "936"},
219         {"GIP", "292"},
220         {"GMD", "270"},
221         {"GNE", "324"},
222         {"GNF", "324"},
223         {"GNS", "324"},
224         {"GQE", "226"},
225         {"GRD", "300"},
226         {"GTQ", "320"},
227         {"GWE", "624"},
228         {"GWP", "624"},
229         {"GYD", "328"},
230         {"HKD", "344"},
231         {"HNL", "340"},
232         {"HRD", "191"},
233         {"HRK", "191"},
234         {"HTG", "332"},
235         {"HUF", "348"},
236         {"IDR", "360"},
237         {"IEP", "372"},
238         {"ILP", "376"},
239         {"ILR", "376"},
240         {"ILS", "376"},
241         {"INR", "356"},
242         {"IQD", "368"},
243         {"IRR", "364"},
244         {"ISJ", "352"},
245         {"ISK", "352"},
246         {"ITL", "380"},
247         {"JMD", "388"},
248         {"JOD", "400"},
249         {"JPY", "392"},
250         {"KES", "404"},
251         {"KGS", "417"},
252         {"KHR", "116"},
253         {"KMF", "174"},
254         {"KPW", "408"},
255         {"KRW", "410"},
256         {"KWD", "414"},
257         {"KYD", "136"},
258         {"KZT", "398"},
259         {"LAJ", "418"},
260         {"LAK", "418"},
261         {"LBP", "422"},
262         {"LKR", "144"},
263         {"LRD", "430"},
264         {"LSL", "426"},
265         {"LSM", "426"},
266         {"LTL", "440"},
267         {"LTT", "440"},
268         {"LUC", "989"},
269         {"LUF", "442"},
270         {"LUL", "988"},
271         {"LVL", "428"},
272         {"LVR", "428"},
273         {"LYD", "434"},
274         {"MAD", "504"},
275         {"MDL", "498"},
276         {"MGA", "969"},
277         {"MGF", "450"},
278         {"MKD", "807"},
279         {"MLF", "466"},
280         {"MMK", "104"},
281         {"MNT", "496"},
282         {"MOP", "446"},
283         {"MRO", "478"},
284         {"MRU", "929"},
285         {"MTL", "470"},
286         {"MTP", "470"},
287         {"MUR", "480"},
288         {"MVQ", "462"},
289         {"MVR", "462"},
290         {"MWK", "454"},
291         {"MXN", "484"},
292         {"MXP", "484"},
293         {"MXV", "979"},
294         {"MYR", "458"},
295         {"MZE", "508"},
296         {"MZM", "508"},
297         {"MZN", "943"},
298         {"NAD", "516"},
299         {"NGN", "566"},
300         {"NIC", "558"},
301         {"NIO", "558"},
302         {"NLG", "528"},
303         {"NOK", "578"},
304         {"NPR", "524"},
305         {"NZD", "554"},
306         {"OMR", "512"},
307         {"PAB", "590"},
308         {"PEH", "604"},
309         {"PEI", "604"},
310         {"PEN", "604"},
311         {"PES", "604"},
312         {"PGK", "598"},
313         {"PHP", "608"},
314         {"PKR", "586"},
315         {"PLN", "985"},
316         {"PLZ", "616"},
317         {"PTE", "620"},
318         {"PYG", "600"},
319         {"QAR", "634"},
320         {"RHD", "716"},
321         {"ROK", "642"},
322         {"ROL", "642"},
323         {"RON", "946"},
324         {"RSD", "941"},
325         {"RUB", "643"},
326         {"RUR", "810"},
327         {"RWF", "646"},
328         {"SAR", "682"},
329         {"SBD", "090"},
330         {"SCR", "690"},
331         {"SDD", "736"},
332         {"SDG", "938"},
333         {"SDP", "736"},
334         {"SEK", "752"},
335         {"SGD", "702"},
336         {"SHP", "654"},
337         {"SIT", "705"},
338         {"SKK", "703"},
339         {"SLL", "694"},
340         {"SOS", "706"},
341         {"SRD", "968"},
342         {"SRG", "740"},
343         {"SSP", "728"},
344         {"STD", "678"},
345         {"STN", "930"},
346         {"SUR", "810"},
347         {"SVC", "222"},
348         {"SYP", "760"},
349         {"SZL", "748"},
350         {"THB", "764"},
351         {"TJR", "762"},
352         {"TJS", "972"},
353         {"TMM", "795"},
354         {"TMT", "934"},
355         {"TND", "788"},
356         {"TOP", "776"},
357         {"TPE", "626"},
358         {"TRL", "792"},
359         {"TRY", "949"},
360         {"TTD", "780"},
361         {"TWD", "901"},
362         {"TZS", "834"},
363         {"UAH", "980"},
364         {"UAK", "804"},
365         {"UGS", "800"},
366         {"UGW", "800"},
367         {"UGX", "800"},
368         {"USD", "840"},
369         {"USN", "997"},
370         {"USS", "998"},
371         {"UYI", "940"},
372         {"UYN", "858"},
373         {"UYP", "858"},
374         {"UYU", "858"},
375         {"UYW", "927"},
376         {"UZS", "860"},
377         {"VEB", "862"},
378         {"VEF", "937"},
379         {"VES", "928"},
380         {"VNC", "704"},
381         {"VND", "704"},
382         {"VUV", "548"},
383         {"WST", "882"},
384         {"XAF", "950"},
385         {"XAG", "961"},
386         {"XAU", "959"},
387         {"XBA", "955"},
388         {"XBB", "956"},
389         {"XBC", "957"},
390         {"XBD", "958"},
391         {"XCD", "951"},
392         {"XDR", "960"},
393         {"XEU", "954"},
394         {"XOF", "952"},
395         {"XPD", "964"},
396         {"XPF", "953"},
397         {"XPT", "962"},
398         {"XSU", "994"},
399         {"XTS", "963"},
400         {"XUA", "965"},
401         {"XXX", "999"},
402         {"YDD", "720"},
403         {"YER", "886"},
404         {"YUD", "890"},
405         {"YUM", "891"},
406         {"YUN", "890"},
407         {"ZAL", "991"},
408         {"ZAR", "710"},
409         {"ZMK", "894"},
410         {"ZMW", "967"},
411         {"ZRN", "180"},
412         {"ZRZ", "180"},
413         {"ZWC", "716"},
414         {"ZWD", "716"},
415         {"ZWL", "932"},
416         {"ZWN", "942"},
417         {"ZWR", "935"},
418     };
419 }
420