/* * CREDIT SUISSE IS WILLING TO LICENSE THIS SPECIFICATION TO YOU ONLY UPON THE * CONDITION THAT YOU ACCEPT ALL OF THE TERMS CONTAINED IN THIS AGREEMENT. * PLEASE READ THE TERMS AND CONDITIONS OF THIS AGREEMENT CAREFULLY. BY * DOWNLOADING THIS SPECIFICATION, YOU ACCEPT THE TERMS AND CONDITIONS OF THE * AGREEMENT. IF YOU ARE NOT WILLING TO BE BOUND BY IT, SELECT THE "DECLINE" * BUTTON AT THE BOTTOM OF THIS PAGE. Specification: JSR-354 Money and Currency * API ("Specification") Copyright (c) 2012-2013, Credit Suisse All rights * reserved. */ package org.javamoney.regions.internal.data; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Set; import javax.inject.Singleton; import org.javamoney.regions.Region; import org.javamoney.regions.RegionType; import org.javamoney.regions.spi.RegionProviderSpi; /** * Region Tree provider that provides all ISO countries, defined by * {@link java.util.Locale#getISOCountries()} using their 2-letter ISO country code under * {@code ISO}. * * @author Anatole Tresch */ @Singleton public class ISORegionProvider implements RegionProviderSpi { private Set<RegionType> regionTypes = new HashSet<RegionType>(); private Map<String, Region> regions = new HashMap<String, Region>(); public ISORegionProvider() { reload(); } private void reload() { regionTypes.clear(); RegionType rt = RegionType.of("ISO"); regionTypes.add(rt); for (String country : Locale.getISOCountries()) { Locale locale = new Locale("", country); ISOCountry region = new ISOCountry(locale, rt); regions.put(region.getRegionCode(), region); ISO3Country region3 = new ISO3Country(locale, rt); regions.put(region.getISO3Code(), region3); } } @Override public Collection<RegionType> getRegionTypes() { return Collections.unmodifiableSet(regionTypes); } @Override public Region getRegion(RegionType type, String code) { if (!"ISO".equals(type.getId())) { return null; } return this.regions.get(code); } @Override public Collection<Region> getRegions(RegionType type) { if (!"ISO".equals(type.getId())) { return Collections.emptySet(); } return Collections.unmodifiableCollection(regions.values()); } @Override public Region getRegion(RegionType type, int numericId) { for (Region region : regions.values()) { if (region.getRegionType().equals(type) && region.getNumericRegionCode() == numericId && region instanceof ISOCountry) { return region; } } return null; } @Override public Region getRegion(Locale locale) { for (Region region : regions.values()) { if (locale.equals(region.getLocale()) && region instanceof ISOCountry) { return region; } } return null; } }