/** * Gets the country. * * @return the value of the property */ public Country getCountry() { String code = _externalIdBundle.getValue(ExternalSchemes.ISO_COUNTRY_ALPHA2); return (code != null ? Country.of(code) : null); }
/** * Parses the specified file to populate the master. * * @param in the input reader to read, not closed, not null */ public void parse(Reader in) { String name = null; try { Map<String, ManageableRegion> regions = new HashMap<String, ManageableRegion>(); Map<UniqueId, Set<String>> subRegions = new HashMap<UniqueId, Set<String>>(); // open CSV file @SuppressWarnings("resource") CSVReader reader = new CSVReader(in); List<String> columns = Arrays.asList(reader.readNext()); // identify columns final int nameColumnIdx = columns.indexOf(NAME_COLUMN); final int formalNameColumnIdx = columns.indexOf(FORMAL_NAME_COLUMN); final int classificationColumnIdx = columns.indexOf(CLASSIFICATION_COLUMN); final int sovereignityColumnIdx = columns.indexOf(SOVEREIGNITY_COLUMN); final int countryColumnIdx = columns.indexOf(ISO_COUNTRY_2_COLUMN); final int currencyColumnIdx = columns.indexOf(ISO_CURRENCY_3_COLUMN); final int subRegionsColumnIdx = columns.indexOf(SUB_REGIONS_COLUMN); // parse String[] row = null; while ((row = reader.readNext()) != null) { name = row[nameColumnIdx].trim(); // the primary key String fullName = StringUtils.trimToNull(row[formalNameColumnIdx]); if (fullName == null) { fullName = name; } RegionClassification classification = RegionClassification.valueOf(row[classificationColumnIdx].trim()); String sovereignity = StringUtils.trimToNull(row[sovereignityColumnIdx]); String countryISO = StringUtils.trimToNull(row[countryColumnIdx]); String currencyISO = StringUtils.trimToNull(row[currencyColumnIdx]); Set<String> rowSubRegions = new HashSet<String>(Arrays.asList(row[subRegionsColumnIdx].split(";"))); rowSubRegions = trim(rowSubRegions); ManageableRegion region = new ManageableRegion(); region.setClassification(classification); region.setName(name); region.setFullName(fullName); if (countryISO != null) { region.setCountry(Country.of(countryISO)); region.addExternalId(ExternalSchemes.financialRegionId(countryISO)); // TODO: looks odd } if (currencyISO != null) { region.setCurrency(Currency.of(currencyISO)); } if (sovereignity != null) { ManageableRegion parent = regions.get(sovereignity); if (parent == null) { throw new OpenGammaRuntimeException( "Cannot find parent '" + sovereignity + "' for '" + name + "'"); } region.getParentRegionIds().add(parent.getUniqueId()); } for (Entry<UniqueId, Set<String>> entry : subRegions.entrySet()) { if (entry.getValue().remove(name)) { region.getParentRegionIds().add(entry.getKey()); } } // store RegionDocument doc = getRegionMaster().add(new RegionDocument(region)); if (rowSubRegions.size() > 0) { subRegions.put(doc.getUniqueId(), rowSubRegions); } regions.put(name, region); } for (Set<String> set : subRegions.values()) { if (set.size() > 0) { throw new OpenGammaRuntimeException("Cannot find children: " + set); } } } catch (Exception ex) { String detail = (name != null ? " while processing " + name : ""); throw new OpenGammaRuntimeException( "Cannot open region data file (or file I/O problem)" + detail, ex); } }
/** * Creates an ISO alpha 2 country code. * * <p>Examples might be {@code GB} or {@code US}. * * @param country the country, not null * @return the region identifier, not null */ public static ExternalId countryRegionId(Country country) { ArgumentChecker.notNull(country, "country"); return ExternalId.of(ISO_COUNTRY_ALPHA2, country.getCode()); }