/* * This file is part of Caliph & Emir. * * Caliph & Emir is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Caliph & Emir is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Caliph & Emir; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Copyright statement: * -------------------- * (c) 2002-2005 by Mathias Lux (mathias@juggle.at) and the Know-Center Graz * Inffeldgasse 21a, 8010 Graz, Austria * http://www.know-center.at */ package at.knowcenter.caliph.objectcatalog.mpeg7tools; import at.knowcenter.caliph.objectcatalog.semanticscreator.BeeDataExchange; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.StringTokenizer; /** * Date: 29.08.2002 * Time: 11:47:33 * * @author Mathias Lux, mathias@juggle.at */ public class CountryCodeConverter { public static String[] genericCodes3 = {"gre", "den", "ger", "ned", "sui", "eng", "uae", "kuw", "gua", "crc", "par", "sco", "por", "ksa", "mas", "lib", "sin", "van", "tri", "zim"}; public static String[] genericCodeTable = {"gr", "dk", "de", "nl", "ch", "en", "ae", "kw", "gt", "hr", "py", "en", "pt", "sa", "my", "lb", "sg", "vu", "tt", "zw"}; /** * converts an 3 letter ISO country code into an 2 letter ISO country code (e.g. AUT -> AT) * * @param cc is the 3 letter country code to be converted * @return null if no matching country code is found. */ public static String convert3to2(String cc) { String returnVal = null; SAXBuilder sb = new SAXBuilder(); Document d = null; try { d = sb.build(CountryCodeConverter.class.getResource("countrycodes.xml")); Element root = d.getRootElement(); List l = root.getChildren(); for (Iterator i = l.iterator(); i.hasNext();) { Element e = (Element) i.next(); if (cc.toLowerCase().equals(e.getAttributeValue("code3").toLowerCase())) returnVal = e.getAttributeValue("code2"); } if (!(returnVal != null)) { for (int i = 0; i < genericCodes3.length; i++) { String s = genericCodes3[i]; if (cc.toLowerCase().equals(s)) returnVal = genericCodeTable[i]; } } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return returnVal; } /** * converts an 3 letter Fifa World Cup country code into an 2 letter ISO country code (e.g. AUT -> AT) * * @param cc is the 3 letter country code to be converted * @return null if no matching country code is found. */ public static String convertFifaCodetoISO2(String cc) { String returnVal = null; String[] cc3 = BeeDataExchange.COUNTRIES_CODE_3_LETTERS; String[] cc2 = BeeDataExchange.ISO_COUNTRIES_CODE_2_LETTERS; for (int i = 0; i < cc3.length; i++) { if (cc3[i].equals(cc)) returnVal = cc2[i]; } return returnVal; } /** * converts an 2 letter ISO country code into an 3 letter ISO country code (e.g. AT -> AUT) * * @param cc is the 2 letter country code to be converted * @return null if no matching country code is found. */ public static String convert2to3(String cc) { String returnVal = null; SAXBuilder sb = new SAXBuilder(); try { Document d = sb.build(CountryCodeConverter.class.getResource("countrycodes.xml")); Element root = d.getRootElement(); List l = root.getChildren(); for (Iterator i = l.iterator(); i.hasNext();) { Element e = (Element) i.next(); if (cc.toLowerCase().equals(e.getAttributeValue("code2").toLowerCase())) returnVal = e.getAttributeValue("code3"); } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return returnVal; } /** * Returns the name of the country given by the countrycode * * @param countryCode is the 2 or 3 letter country code to be searched for (both are accepted) * @return null if no matching country code is found. */ public static String getCountryOfCode(String countryCode) { String returnVal = null; SAXBuilder sb = new SAXBuilder(); try { Document d = sb.build(CountryCodeConverter.class.getResource("countrycodes.xml")); Element root = d.getRootElement(); List l = root.getChildren(); for (Iterator i = l.iterator(); i.hasNext();) { Element e = (Element) i.next(); if (countryCode.toLowerCase().equals(e.getAttributeValue("code2").toLowerCase()) || countryCode.toLowerCase().equals(e.getAttributeValue("code3").toLowerCase())) returnVal = e.getTextTrim(); } } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return returnVal; } /** * Converts a given file of comma separated values into an valid XML file needed for the country code conversion * and writes it to STDOUT.<br> * The format of the file is as follows: * <code>[country name];[2 letter code];[3 letter code];[number]</code> */ public static void convertCsvToXml(File f) { Element root = new Element("countries"); Document d = new Document(root); try { BufferedReader br = new BufferedReader(new FileReader(f)); String s = br.readLine().trim(); while (s != null) { if (s.length() > 7) { StringTokenizer st = new StringTokenizer(s, ";", false); String country = toName(st.nextToken()); String cc2 = st.nextToken().toLowerCase(); String cc3 = st.nextToken().toLowerCase(); String ccNum = st.nextToken().toLowerCase(); Element eCountry = new Element("country"); eCountry.setAttribute("code2", cc2); eCountry.setAttribute("code3", cc3); eCountry.setAttribute("number", ccNum); eCountry.addContent(country); root.addContent(eCountry); } s = br.readLine(); } } catch (IOException e) { e.printStackTrace(); } XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); try { out.output(d, System.out); } catch (IOException e) { e.printStackTrace(); } } public static String toName(String name) { StringTokenizer st = new StringTokenizer(name, " "); StringBuffer returnVal = new StringBuffer(); while (st.hasMoreElements()) { char[] token = st.nextToken().toLowerCase().toCharArray(); token[0] = Character.toUpperCase(token[0]); returnVal.append(token); returnVal.append(" "); } return returnVal.toString().trim(); } // public static void main(String[] args) { // CountryCodeConverter.convertCsvToXml(new File("data/countries.txt")); // } }