From ea5cfa107123deaf358bf75a7cf8835fc95acc8f Mon Sep 17 00:00:00 2001 From: rsudev Date: Sun, 26 May 2013 09:27:34 +0200 Subject: Generate okapi attribute parser --- .../AttrGen/src/GenerateAttributes.java | 172 +++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java (limited to 'main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java') 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..6b8af60 --- /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 org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory;; + + +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 attrMapDe;\n" + +" private final static Map attrMapPl;\n" + +"\n" + +" static {\n" + +" attrMapDe = new HashMap();\n" + +" attrMapPl = new HashMap();\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 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(); + } + + 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; + } + +} -- cgit v1.1 From 938049304233c0b84b6dd4f914a51c4af3d8ea37 Mon Sep 17 00:00:00 2001 From: rsudev Date: Sun, 26 May 2013 22:48:47 +0200 Subject: Fixes after review --- .../AttrGen/src/GenerateAttributes.java | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java') diff --git a/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java b/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java index 6b8af60..725dfff 100644 --- a/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java +++ b/main/project/attributes_okapi/AttrGen/src/GenerateAttributes.java @@ -5,14 +5,14 @@ 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; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory;; - public class GenerateAttributes { @@ -20,24 +20,24 @@ 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(); } @@ -65,7 +65,7 @@ public class GenerateAttributes { } 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 + ");"); @@ -74,9 +74,9 @@ public class GenerateAttributes { System.out.println(" attrMapPl.put(\"" + name + "\", " + attr.oc_pl_id + ");"); } } - + } - + private static void writeTrailer() { System.out.print( " // first trailer line\n" + @@ -92,13 +92,13 @@ public class GenerateAttributes { " }\n" + " return result;\n" + " }\n" + -"}\n"); +"}\n"); } private static void parseAttributes(InputSource stream) { - + try { - + SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); @@ -133,14 +133,14 @@ public class GenerateAttributes { 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; } -- cgit v1.1