Java tutorial
/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.country; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.jdom.Document; import org.jdom.Element; import com.enonic.cms.framework.util.JDOMUtil; /** * Aug 4, 2009 */ public class CountryXmlParser { private static final String ATTRNAME_COUNTRY_CODE = "code"; private static final String ATTRNAME_REGION_CODE = "code"; private static final String ATTRNAME_ENGLISH_NAME = "english-name"; private static final String ATTRNAME_LOCAL_NAME = "local-name"; private static final String ATTRNAME_CALLING_CODE = "calling-code"; public static List<Country> parseCountriesXml(final Document countriesDoc) { return parseCountriesXml(countriesDoc.getRootElement()); } public static List<Country> parseCountriesXml(final Element countriesEl) { List<Country> countries = new ArrayList<Country>(); List<Element> countryElements = JDOMUtil.getChildren(countriesEl, "country"); int position = 0; for (Element countryEl : countryElements) { position++; final Country country = parseCountry(countryEl, position); countries.add(country); } return countries; } private static Country parseCountry(Element countryEl, int position) { CountryCode code = parseCountryCode(countryEl, position); String englishName = parseEnglishName(countryEl, code); String localName = parseLocalName(countryEl, code); String callingCode = parseCallingCode(countryEl); final Country country = new Country(code, englishName, localName, callingCode); parseRegions(country, countryEl); return country; } private static CountryCode parseCountryCode(Element countryEl, int position) { String value = countryEl.getAttributeValue(ATTRNAME_COUNTRY_CODE); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException("Missing " + ATTRNAME_COUNTRY_CODE + " for country #" + position); } return new CountryCode(value); } private static String parseEnglishName(Element countryEl, CountryCode countryCode) { String value = countryEl.getChildText(ATTRNAME_ENGLISH_NAME); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException( "Missing " + ATTRNAME_ENGLISH_NAME + " for country: " + countryCode); } return value; } private static String parseLocalName(Element countryEl, CountryCode countryCode) { String value = countryEl.getChildText(ATTRNAME_LOCAL_NAME); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException("Missing " + ATTRNAME_LOCAL_NAME + " for country: " + countryCode); } return value; } private static String parseCallingCode(Element countryEl) { String value = countryEl.getChildText(ATTRNAME_CALLING_CODE); if (null == value) { return ""; } return value; } private static void parseRegions(Country country, Element countryEl) { Element regionsEl = countryEl.getChild("regions"); if (regionsEl == null) { return; } country.setRegionsEnglishName(parseRegionsEnglishName(regionsEl)); country.setRegionsLocalName(parseRegionsLocalName(regionsEl)); int position = 0; List<Element> regionElements = JDOMUtil.getChildren(regionsEl, "region"); for (Element regionEl : regionElements) { position++; Region region = parseRegion(regionEl, country.getCode(), position); country.addRegion(region); } } private static String parseRegionsEnglishName(Element regionsEl) { return regionsEl.getChildText(ATTRNAME_ENGLISH_NAME); } private static String parseRegionsLocalName(Element regionsEl) { return regionsEl.getChildText(ATTRNAME_LOCAL_NAME); } private static Region parseRegion(Element regionEl, CountryCode countryCode, int position) { String code = parseRegionCode(regionEl, countryCode, position); String englishName = parseRegionEnglishName(regionEl, code); String localName = parseRegionLocalName(regionEl, code); return new Region(code, englishName, localName); } private static String parseRegionCode(Element regionEl, CountryCode countryCode, int position) { String value = regionEl.getAttributeValue(ATTRNAME_REGION_CODE); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException( "Missing " + ATTRNAME_REGION_CODE + " for region #" + position + " in country: " + countryCode); } return value; } private static String parseRegionEnglishName(Element regionEl, String regionCode) { String value = regionEl.getChildText(ATTRNAME_ENGLISH_NAME); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException("Missing " + ATTRNAME_ENGLISH_NAME + " for region: " + regionCode); } return value; } private static String parseRegionLocalName(Element regionEl, String regionCode) { String value = regionEl.getChildText(ATTRNAME_LOCAL_NAME); if (StringUtils.isEmpty(value)) { throw new InvalidCountryXmlException("Missing " + ATTRNAME_LOCAL_NAME + " for region: " + regionCode); } return value; } }