aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2014-01-29 07:55:09 +0100
committerBananeweizen <bananeweizen@gmx.de>2014-01-29 07:55:09 +0100
commit3ce1488a9fafd44992d7a408146a9b1c3702f11e (patch)
treecc87e3245dded647efb4a2149855ed1c2f3ee30e
parentb2d6de1a58e2894373b48054e4ef60a94abcbd88 (diff)
downloadcgeo-3ce1488a9fafd44992d7a408146a9b1c3702f11e.zip
cgeo-3ce1488a9fafd44992d7a408146a9b1c3702f11e.tar.gz
cgeo-3ce1488a9fafd44992d7a408146a9b1c3702f11e.tar.bz2
read premium only flag from GSAK GPX
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java156
-rw-r--r--tests/res/raw/gc3t1xg_gsak.gpx2
-rw-r--r--tests/src/cgeo/geocaching/files/GPXParserTest.java20
3 files changed, 105 insertions, 73 deletions
diff --git a/main/src/cgeo/geocaching/files/GPXParser.java b/main/src/cgeo/geocaching/files/GPXParser.java
index 8c7a853..f5380be 100644
--- a/main/src/cgeo/geocaching/files/GPXParser.java
+++ b/main/src/cgeo/geocaching/files/GPXParser.java
@@ -500,73 +500,9 @@ public abstract class GPXParser extends FileParser {
// for GPX 1.1 from extensions node
final Element cacheParent = getCacheParent(waypoint);
- // GSAK extensions
- for (final String gsakNamespace : GSAK_NS) {
- final Element gsak = cacheParent.getChild(gsakNamespace, "wptExtension");
- gsak.getChild(gsakNamespace, "Watch").setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(String watchList) {
- cache.setOnWatchlist(Boolean.valueOf(watchList.trim()));
- }
- });
-
- gsak.getChild(gsakNamespace, "UserData").setEndTextElementListener(new UserDataListener(1));
-
- for (int i = 2; i <= 4; i++) {
- gsak.getChild(gsakNamespace, "User" + i).setEndTextElementListener(new UserDataListener(i));
- }
-
- gsak.getChild(gsakNamespace, "Parent").setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(String body) {
- parentCacheCode = body;
- }
- });
+ registerGsakExtensions(cacheParent);
- gsak.getChild(gsakNamespace, "FavPoints").setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(String favoritePoints) {
- try {
- cache.setFavoritePoints(Integer.parseInt(favoritePoints));
- }
- catch (final NumberFormatException e) {
- Log.w("Failed to parse favorite points", e);
- }
- }
- });
-
- gsak.getChild(gsakNamespace, "GcNote").setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(final String personalNote) {
- cache.setPersonalNote(StringUtils.trim(personalNote));
- }
- });
- }
-
- // c:geo extensions
- final Element cgeoVisited = cacheParent.getChild(CGEO_NS, "visited");
-
- cgeoVisited.setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(String visited) {
- wptVisited = Boolean.valueOf(visited.trim());
- }
- });
-
- final Element cgeoUserDefined = cacheParent.getChild(CGEO_NS, "userdefined");
-
- cgeoUserDefined.setEndTextElementListener(new EndTextElementListener() {
-
- @Override
- public void end(String userDefined) {
- wptUserDefined = Boolean.valueOf(userDefined.trim());
- }
- });
+ registerCgeoExtensions(cacheParent);
// 3 different versions of the GC schema
for (final String nsGC : GROUNDSPEAK_NAMESPACE) {
@@ -878,6 +814,94 @@ public abstract class GPXParser extends FileParser {
}
/**
+ * Add listeners for GSAK extensions
+ *
+ * @param cacheParent
+ */
+ private void registerGsakExtensions(final Element cacheParent) {
+ for (final String gsakNamespace : GSAK_NS) {
+ final Element gsak = cacheParent.getChild(gsakNamespace, "wptExtension");
+ gsak.getChild(gsakNamespace, "Watch").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String watchList) {
+ cache.setOnWatchlist(Boolean.valueOf(watchList.trim()));
+ }
+ });
+
+ gsak.getChild(gsakNamespace, "UserData").setEndTextElementListener(new UserDataListener(1));
+
+ for (int i = 2; i <= 4; i++) {
+ gsak.getChild(gsakNamespace, "User" + i).setEndTextElementListener(new UserDataListener(i));
+ }
+
+ gsak.getChild(gsakNamespace, "Parent").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String body) {
+ parentCacheCode = body;
+ }
+ });
+
+ gsak.getChild(gsakNamespace, "FavPoints").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String favoritePoints) {
+ try {
+ cache.setFavoritePoints(Integer.parseInt(favoritePoints));
+ }
+ catch (final NumberFormatException e) {
+ Log.w("Failed to parse favorite points", e);
+ }
+ }
+ });
+
+ gsak.getChild(gsakNamespace, "GcNote").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(final String personalNote) {
+ cache.setPersonalNote(StringUtils.trim(personalNote));
+ }
+ });
+
+ gsak.getChild(gsakNamespace, "IsPremium").setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(final String premium) {
+ cache.setPremiumMembersOnly(Boolean.parseBoolean(premium));
+ }
+ });
+ }
+ }
+
+ /**
+ * Add listeners for c:geo extensions
+ *
+ * @param cacheParent
+ */
+ private void registerCgeoExtensions(final Element cacheParent) {
+ final Element cgeoVisited = cacheParent.getChild(CGEO_NS, "visited");
+
+ cgeoVisited.setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String visited) {
+ wptVisited = Boolean.valueOf(visited.trim());
+ }
+ });
+
+ final Element cgeoUserDefined = cacheParent.getChild(CGEO_NS, "userdefined");
+
+ cgeoUserDefined.setEndTextElementListener(new EndTextElementListener() {
+
+ @Override
+ public void end(String userDefined) {
+ wptUserDefined = Boolean.valueOf(userDefined.trim());
+ }
+ });
+ }
+
+ /**
* Overwrite this method in a GPX parser sub class to modify the {@link Geocache}, after it has been fully parsed
* from the GPX file and before it gets stored.
*
diff --git a/tests/res/raw/gc3t1xg_gsak.gpx b/tests/res/raw/gc3t1xg_gsak.gpx
index 3c09a97..ebb5ca5 100644
--- a/tests/res/raw/gc3t1xg_gsak.gpx
+++ b/tests/res/raw/gc3t1xg_gsak.gpx
@@ -34,7 +34,7 @@ xmlns="http://www.topografix.com/GPX/1/0">
<gsak:LastGpxDate>2014-01-26</gsak:LastGpxDate>
<gsak:Code>GC3T1XG</gsak:Code>
<gsak:Resolution></gsak:Resolution>
- <gsak:IsPremium>false</gsak:IsPremium>
+ <gsak:IsPremium>true</gsak:IsPremium>
<gsak:FavPoints>258</gsak:FavPoints>
<gsak:GcNote>Personal Note Test</gsak:GcNote>
<gsak:Guid>d09416d5-dba9-4347-86a6-12f7b5ef2fff</gsak:Guid>
diff --git a/tests/src/cgeo/geocaching/files/GPXParserTest.java b/tests/src/cgeo/geocaching/files/GPXParserTest.java
index d8c49c3..9297819 100644
--- a/tests/src/cgeo/geocaching/files/GPXParserTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXParserTest.java
@@ -325,19 +325,27 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
assertEquals("Wasserleitung", cache.getHint());
}
- public void testGsakFavPoints() throws IOException, ParserException {
- final List<Geocache> caches = readGPX10(R.raw.gc3t1xg_gsak);
+ private Geocache getFirstCache(int gpxResourceId) throws IOException, ParserException {
+ final List<Geocache> caches = readGPX10(gpxResourceId);
+ assertNotNull(caches);
assertEquals(1, caches.size());
final Geocache cache = caches.get(0);
+ return cache;
+ }
+
+ public void testGsakFavPoints() throws IOException, ParserException {
+ final Geocache cache = getFirstCache(R.raw.gc3t1xg_gsak);
assertEquals(258, cache.getFavoritePoints());
}
public void testGsakPersonalNote() throws IOException, ParserException {
- final List<Geocache> caches = readGPX10(R.raw.gc3t1xg_gsak);
- assertNotNull(caches);
- assertEquals(1, caches.size());
- final Geocache cache = caches.get(0);
+ final Geocache cache = getFirstCache(R.raw.gc3t1xg_gsak);
assertEquals("Personal Note Test", cache.getPersonalNote());
}
+ public void testGsakPremium() throws IOException, ParserException {
+ final Geocache cache = getFirstCache(R.raw.gc3t1xg_gsak);
+ assertTrue(cache.isPremiumMembersOnly());
+ }
+
}