aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/files/GPXParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/cgeo/geocaching/files/GPXParser.java')
-rw-r--r--main/src/cgeo/geocaching/files/GPXParser.java156
1 files changed, 90 insertions, 66 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.
*