com.enonic.cms.core.country.CountryXmlParser.java Source code

Java tutorial

Introduction

Here is the source code for com.enonic.cms.core.country.CountryXmlParser.java

Source

/*
 * 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;
    }
}