aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java')
-rw-r--r--main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
new file mode 100644
index 0000000..66ca5f7
--- /dev/null
+++ b/main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java
@@ -0,0 +1,82 @@
+package cgeo.geocaching.connector.trackable;
+
+import cgeo.geocaching.R;
+import cgeo.geocaching.Trackable;
+import cgeo.geocaching.cgeoapplication;
+import cgeo.geocaching.utils.Log;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+import android.sax.Element;
+import android.sax.EndTextElementListener;
+import android.sax.RootElement;
+import android.sax.StartElementListener;
+import android.util.Xml;
+
+public class GeokretyParser {
+
+ public static Trackable parse(final String page) {
+ final Trackable trackable = new Trackable();
+
+ final RootElement root = new RootElement("gkxml");
+ final Element geokret = root.getChild("geokrety").getChild("geokret");
+
+ geokret.setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String name) {
+ trackable.setName(name);
+ }
+ });
+
+ geokret.setStartElementListener(new StartElementListener() {
+
+ @Override
+ public void start(Attributes attributes) {
+ try {
+ if (attributes.getIndex("id") > -1) {
+ trackable.setGeocode(geocode(Integer.valueOf(attributes.getValue("id"))));
+ }
+ if (attributes.getIndex("dist") > -1) {
+ trackable.setDistance(Float.valueOf(attributes.getValue("dist")));
+ }
+ if (attributes.getIndex("type") > -1) {
+ trackable.setType(getType(Integer.valueOf(attributes.getValue("type"))));
+ }
+ } catch (final NumberFormatException e) {
+ Log.e("Parsing geokret", e);
+ }
+ }
+ });
+
+ try {
+ Xml.parse(page, root.getContentHandler());
+ return trackable;
+ } catch (final SAXException e) {
+ Log.w("Cannot parse geokrety", e);
+ }
+
+ return null;
+ }
+
+ protected static String getType(int type) {
+ switch (type) {
+ case 0:
+ return cgeoapplication.getInstance().getString(R.string.geokret_type_traditional);
+ case 1:
+ return cgeoapplication.getInstance().getString(R.string.geokret_type_book_or_media);
+ case 2:
+ return cgeoapplication.getInstance().getString(R.string.geokret_type_human);
+ case 3:
+ return cgeoapplication.getInstance().getString(R.string.geokret_type_coin);
+ case 4:
+ return cgeoapplication.getInstance().getString(R.string.geokret_type_post);
+ }
+ return null;
+ }
+
+ protected static String geocode(final int id) {
+ return String.format("GK%04X", id);
+ }
+}