aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/export/GpxExport.java
diff options
context:
space:
mode:
authorBananeweizen <Bananeweizen@gmx.de>2012-06-24 01:07:10 -0700
committerBananeweizen <Bananeweizen@gmx.de>2012-06-24 01:07:10 -0700
commit512ed533c855bd87ef883196f8f349e933a07c12 (patch)
treeb26d22f8014236bbefedc90f354c996d987ae828 /main/src/cgeo/geocaching/export/GpxExport.java
parent9a2e705e968434da0abfd4a636941cfadc0a5a22 (diff)
parentade487e941987fd6569d3cec05290dad385efbf3 (diff)
downloadcgeo-512ed533c855bd87ef883196f8f349e933a07c12.zip
cgeo-512ed533c855bd87ef883196f8f349e933a07c12.tar.gz
cgeo-512ed533c855bd87ef883196f8f349e933a07c12.tar.bz2
Merge pull request #1774 from marco-jacob/issue#1740
Diffstat (limited to 'main/src/cgeo/geocaching/export/GpxExport.java')
-rw-r--r--main/src/cgeo/geocaching/export/GpxExport.java97
1 files changed, 69 insertions, 28 deletions
diff --git a/main/src/cgeo/geocaching/export/GpxExport.java b/main/src/cgeo/geocaching/export/GpxExport.java
index 2a3b321..398212d 100644
--- a/main/src/cgeo/geocaching/export/GpxExport.java
+++ b/main/src/cgeo/geocaching/export/GpxExport.java
@@ -33,6 +33,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -169,7 +170,9 @@ class GpxExport extends AbstractExport {
gpx.write("</type>");
gpx.write("<groundspeak:cache ");
- gpx.write("available=\"");
+ gpx.write("id=\"");
+ gpx.write(cache.getCacheId());
+ gpx.write("\" available=\"");
gpx.write(!cache.isDisabled() ? "True" : "False");
gpx.write("\" archived=\"");
gpx.write(cache.isArchived() ? "True" : "False");
@@ -272,35 +275,73 @@ class GpxExport extends AbstractExport {
}
private void writeWaypoints(final cgCache cache) throws IOException {
+ List<cgWaypoint> waypoints = cache.getWaypoints();
+ List<cgWaypoint> ownWaypoints = new ArrayList<cgWaypoint>(waypoints.size());
+ List<cgWaypoint> originWaypoints = new ArrayList<cgWaypoint>(waypoints.size());
for (cgWaypoint wp : cache.getWaypoints()) {
- gpx.write("<wpt lat=\"");
- final Geopoint coords = wp.getCoords();
- gpx.write(coords != null ? Double.toString(coords.getLatitude()) : ""); // TODO: check whether is the best way to handle unknown waypoint coordinates
- gpx.write("\" lon=\"");
- gpx.write(coords != null ? Double.toString(coords.getLongitude()) : "");
- gpx.write("\">");
-
- gpx.write("<name>");
- gpx.write(StringEscapeUtils.escapeXml(wp.getPrefix()));
- gpx.write(StringEscapeUtils.escapeXml(cache.getGeocode().substring(2)));
- gpx.write("</name>");
-
- gpx.write("<cmt />");
-
- gpx.write("<desc>");
- gpx.write(StringEscapeUtils.escapeXml(wp.getNote()));
- gpx.write("</desc>");
-
- gpx.write("<sym>");
- gpx.write(StringEscapeUtils.escapeXml(wp.getWaypointType().toString())); //TODO: Correct identifier string
- gpx.write("</sym>");
-
- gpx.write("<type>Waypoint|");
- gpx.write(StringEscapeUtils.escapeXml(wp.getWaypointType().toString())); //TODO: Correct identifier string
- gpx.write("</type>");
-
- gpx.write("</wpt>");
+ if (wp.isUserDefined()) {
+ ownWaypoints.add(wp);
+ } else {
+ originWaypoints.add(wp);
+ }
}
+ int maxPrefix = 0;
+ for (cgWaypoint wp : originWaypoints) {
+ String prefix = wp.getPrefix();
+ try {
+ maxPrefix = Math.max(Integer.parseInt(prefix), maxPrefix);
+ } catch (NumberFormatException ex) {
+ Log.e("Unexpected origin waypoint prefix='" + prefix + "'", ex);
+ }
+ writeCacheWaypoint(wp, prefix);
+ }
+ for (cgWaypoint wp : ownWaypoints) {
+ maxPrefix++;
+ String prefix = String.valueOf(maxPrefix);
+ if (prefix.length() == 1) {
+ prefix = "0" + prefix;
+ }
+ writeCacheWaypoint(wp, prefix);
+ }
+ }
+
+ /**
+ * Writes one waypoint entry for cache waypoint.
+ *
+ * @param cache
+ * The
+ * @param wp
+ * @param prefix
+ * @throws IOException
+ */
+ private void writeCacheWaypoint(final cgWaypoint wp, final String prefix) throws IOException {
+ gpx.write("<wpt lat=\"");
+ final Geopoint coords = wp.getCoords();
+ gpx.write(coords != null ? Double.toString(coords.getLatitude()) : ""); // TODO: check whether is the best way to handle unknown waypoint coordinates
+ gpx.write("\" lon=\"");
+ gpx.write(coords != null ? Double.toString(coords.getLongitude()) : "");
+ gpx.write("\">");
+
+ gpx.write("<name>");
+ gpx.write(StringEscapeUtils.escapeXml(prefix));
+ gpx.write(StringEscapeUtils.escapeXml(wp.getGeocode().substring(2)));
+ gpx.write("</name>");
+
+ gpx.write("<cmt />");
+
+ gpx.write("<desc>");
+ gpx.write(StringEscapeUtils.escapeXml(wp.getNote()));
+ gpx.write("</desc>");
+
+ gpx.write("<sym>");
+ gpx.write(StringEscapeUtils.escapeXml(wp.getWaypointType().toString())); //TODO: Correct identifier string
+ gpx.write("</sym>");
+
+ gpx.write("<type>Waypoint|");
+ gpx.write(StringEscapeUtils.escapeXml(wp.getWaypointType().toString())); //TODO: Correct identifier string
+ gpx.write("</type>");
+
+ gpx.write("</wpt>");
}
private void writeLogs(final cgCache cache) throws IOException {