diff options
Diffstat (limited to 'main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java')
| -rw-r--r-- | main/src/cgeo/geocaching/connector/trackable/GeokretyParser.java | 82 |
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); + } +} |
