diff options
| author | rsudev <rasch@munin-soft.de> | 2013-05-28 23:17:56 -0700 |
|---|---|---|
| committer | rsudev <rasch@munin-soft.de> | 2013-05-28 23:17:56 -0700 |
| commit | f6779ac30d6ac1357d67654ea17afa1f1d6fa770 (patch) | |
| tree | e1e84fca95948ef7ba13be7e12809388b24d3267 /main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java | |
| parent | d6f1bc648361076c3b2038a6ab9b175e1de39b3d (diff) | |
| parent | a7de49db675048db5ae0c05ccd730a8579e6876e (diff) | |
| download | cgeo-f6779ac30d6ac1357d67654ea17afa1f1d6fa770.zip cgeo-f6779ac30d6ac1357d67654ea17afa1f1d6fa770.tar.gz cgeo-f6779ac30d6ac1357d67654ea17afa1f1d6fa770.tar.bz2 | |
Merge pull request #2787 from rsudev/ocde_okapi_2
Implements OKAPI access for opencaching.de
Diffstat (limited to 'main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java')
| -rw-r--r-- | main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java b/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java new file mode 100644 index 0000000..725dfff --- /dev/null +++ b/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java @@ -0,0 +1,172 @@ +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + + +public class GenerateAttributes { + + /** + * @param args + */ + public static void main(String[] args) { + + File inFile = new File(args[0]); + InputStream inputStream; + + try { + + writeHeader(); + + inputStream = new FileInputStream(inFile); + Reader reader = new InputStreamReader(inputStream,"UTF-8"); + + InputSource is = new InputSource(reader); + is.setEncoding("UTF-8"); + + parseAttributes(is); + + writeTrailer(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void writeHeader() { + System.out.print( +"// This is a generated file, do not change manually!\n" + +"\n" + +"package cgeo.geocaching.connector.oc;\n" + +"\n" + +"import java.util.HashMap;\n" + +"import java.util.Map;\n" + +"\n" + +"public class AttributeParser {\n" + +"\n" + +" private final static Map<String, Integer> attrMapDe;\n" + +" private final static Map<String, Integer> attrMapPl;\n" + +"\n" + +" static {\n" + +" attrMapDe = new HashMap<String, Integer>();\n" + +" attrMapPl = new HashMap<String, Integer>();\n" + +"\n" + +" // last header line\n"); + } + + private static void writeAttr(AttrInfo attr) { + + for(String name : attr.names) { + if (attr.oc_de_id > 0) { + System.out.println(" attrMapDe.put(\"" + name + "\", " + attr.oc_de_id + ");"); + } + if (attr.oc_pl_id > 0) { + System.out.println(" attrMapPl.put(\"" + name + "\", " + attr.oc_pl_id + ");"); + } + } + + } + + private static void writeTrailer() { + System.out.print( +" // first trailer line\n" + +"\n" + +" }\n" + +"\n" + +" public static int getOcDeId(final String name) {\n" + +"\n" + +" int result = 0;\n" + +"\n" + +" if (attrMapDe.containsKey(name)) {\n" + +" result = attrMapDe.get(name);\n" + +" }\n" + +" return result;\n" + +" }\n" + +"}\n"); + } + + private static void parseAttributes(InputSource stream) { + + try { + + SAXParserFactory factory = SAXParserFactory.newInstance(); + SAXParser saxParser = factory.newSAXParser(); + + DefaultHandler handler = new DefaultHandler() { + + AttrInfo attr; + ArrayList<String> names; + boolean readingName; + + public void startElement(String uri, String localName, + String qName, Attributes attributes) + throws SAXException { + + if (qName.equalsIgnoreCase("attr")) { + attr = new AttrInfo(); + names = new ArrayList<String>(); + } + + if (attr != null && qName.equalsIgnoreCase("opencaching")) { + if ("http://opencaching.de/".equalsIgnoreCase(attributes.getValue("site_url"))) { + attr.oc_de_id = Integer.parseInt(attributes.getValue("id")); + } else if ("http://opencaching.pl/".equalsIgnoreCase(attributes.getValue("site_url"))) { + attr.oc_pl_id = Integer.parseInt(attributes.getValue("id")); + } + } + + if (names != null && qName.equalsIgnoreCase("name")) { + readingName = true; + } + } + + public void endElement(String uri, String localName, + String qName) + throws SAXException { + + if (attr != null && qName.equalsIgnoreCase("attr")) { + attr.names = names.toArray(new String[]{}); + names = null; + writeAttr(attr); + attr = null; + } + + readingName = false; + } + + public void characters(char ch[], int start, int length) + throws SAXException { + + if (readingName) { + names.add(new String(ch, start, length)); + } + } + + }; + + saxParser.parse(stream, handler); + + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + static class AttrInfo { + public int oc_de_id; + public int oc_pl_id; + public String[] names; + } + +} |
