+ // photo, audio
+ if (inPoint.getPhoto() != null && inSettings.getExportPhotoPoints())
+ {
+ inWriter.write("\t\t\t\t");
+ inWriter.write(makeMediaLink(inPoint.getPhoto()));
+ inWriter.write("\n");
+ }
+ if (inPoint.getAudio() != null && inSettings.getExportAudioPoints()) {
+ inWriter.write(makeMediaLink(inPoint.getAudio()));
+ }
+ inWriter.write("\t\t\t</trkpt>\n");
+ }
+
+
+ /**
+ * Make the xml for the media link(s)
+ * @param inPoint point to generate text for
+ * @return link tags, or null if no links
+ */
+ private static String makeMediaLink(DataPoint inPoint)
+ {
+ Photo photo = inPoint.getPhoto();
+ AudioClip audio = inPoint.getAudio();
+ if (photo == null && audio == null) {
+ return null;
+ }
+ String linkText = "";
+ if (photo != null) {
+ linkText = makeMediaLink(photo);
+ }
+ if (audio != null) {
+ linkText += makeMediaLink(audio);
+ }
+ return linkText;
+ }
+
+ /**
+ * Make the media link for a single media item
+ * @param inMedia media item, either photo or audio
+ * @return link for this media
+ */
+ private static String makeMediaLink(MediaObject inMedia)
+ {
+ if (inMedia.getFile() != null)
+ // file link
+ return "<link href=\"" + inMedia.getFile().getAbsolutePath() + "\"><text>" + inMedia.getName() + "</text></link>";
+ if (inMedia.getUrl() != null)
+ // url link
+ return "<link href=\"" + inMedia.getUrl() + "\"><text>" + inMedia.getName() + "</text></link>";
+ // No link available, must have been loaded from zip file - no link possible
+ return "";
+ }
+
+
+ /**
+ * Strip the time from a GPX point source string
+ * @param inPointSource point source to copy
+ * @return point source with timestamp removed
+ */
+ private static String stripTime(String inPointSource)
+ {
+ return inPointSource.replaceAll("[ \t]*<time>.*?</time>", "");
+ }
+
+ /**
+ * Get the timestamp from the point or its media
+ * @param inPoint point object
+ * @param inSettings export settings
+ * @return Timestamp object if available, or null
+ */
+ private static Timestamp getPointTimestamp(DataPoint inPoint, SettingsForExport inSettings)
+ {
+ if (inPoint.hasTimestamp())
+ {
+ return inPoint.getTimestamp();
+ }
+ if (inPoint.getPhoto() != null && inSettings.getExportPhotoPoints())
+ {
+ if (inPoint.getPhoto().hasTimestamp())
+ {
+ return inPoint.getPhoto().getTimestamp();
+ }
+ }
+ if (inPoint.getAudio() != null && inSettings.getExportAudioPoints())
+ {
+ if (inPoint.getAudio().hasTimestamp())
+ {
+ return inPoint.getAudio().getTimestamp();
+ }
+ }
+ return null;