From 87bc7be5301aa33bf284a9a83afbb1f4b85e837b Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 1 Aug 2023 19:09:45 +0200 Subject: [PATCH] Exporter: rather crash than hide lifecycle errors. Part of #1187. --- .../io/file/exporter/CSVTrackExporter.java | 18 +- .../io/file/exporter/GPXTrackExporter.java | 228 ++++++++-------- .../io/file/exporter/KMLTrackExporter.java | 254 ++++++++---------- 3 files changed, 227 insertions(+), 273 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java index 9d636ba2f..360e409f5 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java @@ -153,24 +153,18 @@ public class CSVTrackExporter implements TrackExporter { } public void close() { - if (printWriter != null) { - printWriter.flush(); - printWriter = null; - } + printWriter.flush(); + printWriter = null; } public void writeHeader(List columns) { - if (printWriter != null) { - String columnNames = columns.stream().map(c -> c.columnName).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); - printWriter.println("#" + columnNames); - } + String columnNames = columns.stream().map(c -> c.columnName).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); + printWriter.println("#" + columnNames); } public void writeTrackPoint(List columns, TrackPoint trackPoint) { - if (printWriter != null) { - String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); - printWriter.println(columnNames); - } + String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); + printWriter.println(columnNames); } private static class Column { diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java index 04fd0c977..e62750fa2 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java @@ -199,42 +199,36 @@ public class GPXTrackExporter implements TrackExporter { } public void close() { - if (printWriter != null) { - printWriter.flush(); - printWriter = null; - } + printWriter.flush(); + printWriter = null; } public void writeHeader() { - if (printWriter != null) { - printWriter.println(""); - printWriter.println(""); - } + printWriter.println(""); + printWriter.println(""); } public void writeFooter() { - if (printWriter != null) { - printWriter.println(""); - } + printWriter.println(""); } private void writeMarkers(Track track) throws InterruptedException { @@ -254,49 +248,43 @@ public class GPXTrackExporter implements TrackExporter { } public void writeMarker(ZoneOffset zoneOffset, Marker marker) { - if (printWriter != null) { - printWriter.println(""); - if (marker.hasAltitude()) { - printWriter.println("" + ALTITUDE_FORMAT.format(marker.getAltitude().toM()) + ""); - } - printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(marker.getName()) + ""); - printWriter.println("" + StringUtils.formatCData(marker.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(marker.getCategory()) + ""); - printWriter.println(""); + printWriter.println(""); + if (marker.hasAltitude()) { + printWriter.println("" + ALTITUDE_FORMAT.format(marker.getAltitude().toM()) + ""); } + printWriter.println(""); + printWriter.println("" + StringUtils.formatCData(marker.getName()) + ""); + printWriter.println("" + StringUtils.formatCData(marker.getDescription()) + ""); + printWriter.println("" + StringUtils.formatCData(marker.getCategory()) + ""); + printWriter.println(""); } public void writeBeginTrack(Track track) { - if (printWriter != null) { - printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getActivityTypeLocalized()) + ""); + printWriter.println(""); + printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getActivityTypeLocalized()) + ""); - printWriter.println(""); - printWriter.println("c0c0c0"); - printWriter.println("" + track.getUuid() + ""); + printWriter.println(""); + printWriter.println("c0c0c0"); + printWriter.println("" + track.getUuid() + ""); - TrackStatistics trackStatistics = track.getTrackStatistics(); - printWriter.println(""); - printWriter.println("" + trackStatistics.getTotalDistance().toM() + ""); - printWriter.println("" + trackStatistics.getTotalTime().getSeconds() + ""); - printWriter.println("" + trackStatistics.getMovingTime().getSeconds() + ""); - printWriter.println("" + trackStatistics.getStoppedTime().getSeconds() + ""); - printWriter.println("" + trackStatistics.getMaxSpeed().toMPS() + ""); - printWriter.println("" + trackStatistics.getTotalAltitudeGain() + ""); - printWriter.println("" + trackStatistics.getTotalAltitudeLoss() + ""); - printWriter.println(""); + TrackStatistics trackStatistics = track.getTrackStatistics(); + printWriter.println(""); + printWriter.println("" + trackStatistics.getTotalDistance().toM() + ""); + printWriter.println("" + trackStatistics.getTotalTime().getSeconds() + ""); + printWriter.println("" + trackStatistics.getMovingTime().getSeconds() + ""); + printWriter.println("" + trackStatistics.getStoppedTime().getSeconds() + ""); + printWriter.println("" + trackStatistics.getMaxSpeed().toMPS() + ""); + printWriter.println("" + trackStatistics.getTotalAltitudeGain() + ""); + printWriter.println("" + trackStatistics.getTotalAltitudeLoss() + ""); + printWriter.println(""); - printWriter.println(""); - } + printWriter.println(""); } public void writeEndTrack() { - if (printWriter != null) { - printWriter.println(""); - } + printWriter.println(""); } public void writeOpenSegment() { @@ -310,67 +298,65 @@ public class GPXTrackExporter implements TrackExporter { public Distance writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint, List sensorPoints, Distance trackDistance) { Distance cumulativeDistance = null; - if (printWriter != null) { + printWriter.println(""); - printWriter.println(""); - - if (trackPoint.hasAltitude()) { - printWriter.println("" + ALTITUDE_FORMAT.format(trackPoint.getAltitude().toM()) + ""); - } - - printWriter.println(""); - - { - String trackPointExtensionContent = ""; - - if (trackPoint.hasSpeed()) { - trackPointExtensionContent += "" + SPEED_FORMAT.format(trackPoint.getSpeed().toMPS()) + "\n"; - } - - if (trackPoint.hasHeartRate()) { - trackPointExtensionContent += "" + HEARTRATE_FORMAT.format(trackPoint.getHeartRate().getBPM()) + "\n"; - } - - if (trackPoint.hasCadence()) { - trackPointExtensionContent += "" + CADENCE_FORMAT.format(trackPoint.getCadence().getRPM()) + "\n"; - } - - if (trackPoint.hasPower()) { - trackPointExtensionContent += "" + POWER_FORMAT.format(trackPoint.getPower().getW()) + "\n"; - } - - Double cumulativeGain = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeGain() ? (double) tp.getAltitudeGain() : null); - if (cumulativeGain != null) { - trackPointExtensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeGain) + "\n"); - } - - Double cumulativeLoss = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeLoss() ? (double) tp.getAltitudeLoss() : null); - if (cumulativeLoss != null) { - trackPointExtensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeLoss) + "\n"); - } - - if (trackPoint.hasHorizontalAccuracy()) { - trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackPoint.getHorizontalAccuracy().toM()) + ""); - } - if (trackPoint.hasVerticalAccuracy()) { - trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackPoint.getVerticalAccuracy().toM()) + ""); - } - - cumulativeDistance = Distance.ofOrNull(cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasSensorDistance() ? tp.getSensorDistance().toM() : null)); - if (cumulativeDistance != null) { - trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(cumulativeDistance.toM()) + "\n"); - trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackDistance.plus(cumulativeDistance).toM()) + "\n"); - } - - if (!trackPointExtensionContent.isEmpty()) { - printWriter.println(""); - printWriter.print(trackPointExtensionContent); - printWriter.println(""); - } - } - - printWriter.println(""); + if (trackPoint.hasAltitude()) { + printWriter.println("" + ALTITUDE_FORMAT.format(trackPoint.getAltitude().toM()) + ""); } + + printWriter.println(""); + + { + String trackPointExtensionContent = ""; + + if (trackPoint.hasSpeed()) { + trackPointExtensionContent += "" + SPEED_FORMAT.format(trackPoint.getSpeed().toMPS()) + "\n"; + } + + if (trackPoint.hasHeartRate()) { + trackPointExtensionContent += "" + HEARTRATE_FORMAT.format(trackPoint.getHeartRate().getBPM()) + "\n"; + } + + if (trackPoint.hasCadence()) { + trackPointExtensionContent += "" + CADENCE_FORMAT.format(trackPoint.getCadence().getRPM()) + "\n"; + } + + if (trackPoint.hasPower()) { + trackPointExtensionContent += "" + POWER_FORMAT.format(trackPoint.getPower().getW()) + "\n"; + } + + Double cumulativeGain = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeGain() ? (double) tp.getAltitudeGain() : null); + if (cumulativeGain != null) { + trackPointExtensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeGain) + "\n"); + } + + Double cumulativeLoss = cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasAltitudeLoss() ? (double) tp.getAltitudeLoss() : null); + if (cumulativeLoss != null) { + trackPointExtensionContent += ("" + ALTITUDE_FORMAT.format(cumulativeLoss) + "\n"); + } + + if (trackPoint.hasHorizontalAccuracy()) { + trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackPoint.getHorizontalAccuracy().toM()) + ""); + } + if (trackPoint.hasVerticalAccuracy()) { + trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackPoint.getVerticalAccuracy().toM()) + ""); + } + + cumulativeDistance = Distance.ofOrNull(cumulateSensorData(trackPoint, sensorPoints, (tp) -> tp.hasSensorDistance() ? tp.getSensorDistance().toM() : null)); + if (cumulativeDistance != null) { + trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(cumulativeDistance.toM()) + "\n"); + trackPointExtensionContent += ("" + DISTANCE_FORMAT.format(trackDistance.plus(cumulativeDistance).toM()) + "\n"); + } + + if (!trackPointExtensionContent.isEmpty()) { + printWriter.println(""); + printWriter.print(trackPointExtensionContent); + printWriter.println(""); + } + } + + printWriter.println(""); + if (cumulativeDistance != null) { return cumulativeDistance; } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java index c38f21e31..0e999856b 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java @@ -212,196 +212,170 @@ public class KMLTrackExporter implements TrackExporter { @VisibleForTesting void close() { - if (printWriter != null) { - printWriter.flush(); - printWriter = null; - } + printWriter.flush(); + printWriter = null; } private void writeHeader(List tracks) { - if (printWriter != null) { - printWriter.println( - """ - - """); - printWriter.println( - """ - - """); //TODO ADD xsi:schemaLocation for atom - printWriter.println(""); - printWriter.println("1"); - printWriter.println("1"); + printWriter.println( + """ + + """); + printWriter.println( + """ + + """); //TODO ADD xsi:schemaLocation for atom + printWriter.println(""); + printWriter.println("1"); + printWriter.println("1"); - Track track = tracks.get(0); - printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); - printWriter.println("" + StringUtils.formatCData(context.getString(R.string.app_name)) + ""); + Track track = tracks.get(0); + printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); + printWriter.println("" + StringUtils.formatCData(context.getString(R.string.app_name)) + ""); - writeTrackStyle(); - writePlacemarkerStyle(); - printWriter.println(""); + writeTrackStyle(); + writePlacemarkerStyle(); + printWriter.println(""); - writeSimpleArrayStyle(EXTENDED_DATA_TYPE_SPEED, context.getString(R.string.description_speed_ms)); - writeSimpleArrayStyle(EXTENDED_DATA_TYPE_POWER, context.getString(R.string.description_sensor_power)); - writeSimpleArrayStyle(EXTENDED_DATA_TYPE_CADENCE, context.getString(R.string.description_sensor_cadence)); - writeSimpleArrayStyle(EXTENDED_DATA_TYPE_HEART_RATE, context.getString(R.string.description_sensor_heart_rate)); + writeSimpleArrayStyle(EXTENDED_DATA_TYPE_SPEED, context.getString(R.string.description_speed_ms)); + writeSimpleArrayStyle(EXTENDED_DATA_TYPE_POWER, context.getString(R.string.description_sensor_power)); + writeSimpleArrayStyle(EXTENDED_DATA_TYPE_CADENCE, context.getString(R.string.description_sensor_cadence)); + writeSimpleArrayStyle(EXTENDED_DATA_TYPE_HEART_RATE, context.getString(R.string.description_sensor_heart_rate)); - printWriter.println(""); - } + printWriter.println(""); } private void writeFooter() { - if (printWriter != null) { - printWriter.println(""); - printWriter.println(""); - } + printWriter.println(""); + printWriter.println(""); } private void writeBeginMarkers(Track track) { - if (printWriter != null) { - printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName())) + ""); - printWriter.println("1"); - } + printWriter.println(""); + printWriter.println("" + StringUtils.formatCData(context.getString(R.string.track_markers, track.getName())) + ""); + printWriter.println("1"); } private void writeMarker(Marker marker, ZoneOffset zoneOffset) { - if (printWriter != null) { - boolean existsPhoto = MarkerUtils.buildInternalPhotoFile(context, marker.getTrackId(), marker.getPhotoURI()) != null; - if (marker.hasPhoto() && exportPhotos && existsPhoto) { - float heading = getHeading(marker.getTrackId(), marker.getLocation()); - writePhotoOverlay(marker, heading, zoneOffset); - } else { - writePlacemark(marker.getName(), marker.getCategory(), marker.getDescription(), marker.getLocation(), zoneOffset); - } + boolean existsPhoto = MarkerUtils.buildInternalPhotoFile(context, marker.getTrackId(), marker.getPhotoURI()) != null; + if (marker.hasPhoto() && exportPhotos && existsPhoto) { + float heading = getHeading(marker.getTrackId(), marker.getLocation()); + writePhotoOverlay(marker, heading, zoneOffset); + } else { + writePlacemark(marker.getName(), marker.getCategory(), marker.getDescription(), marker.getLocation(), zoneOffset); } } private void writeEndMarkers() { - if (printWriter != null) { - printWriter.println(""); - } + printWriter.println(""); } private void writeMultiTrackBegin() { - if (printWriter != null) { - printWriter.println(""); - printWriter.println("" + context.getString(R.string.generic_tracks) + ""); - printWriter.println("1"); - } + printWriter.println(""); + printWriter.println("" + context.getString(R.string.generic_tracks) + ""); + printWriter.println("1"); } private void writeMultiTrackEnd() { - if (printWriter != null) { - printWriter.println(""); - } + printWriter.println(""); } private void writeBeginTrack(Track track) { - if (printWriter != null) { - printWriter.println(""); + printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getActivityType().getIconId()) + ""); - printWriter.println("" + track.getUuid() + ""); + printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getActivityType().getIconId()) + ""); + printWriter.println("" + track.getUuid() + ""); - printWriter.println("#" + TRACK_STYLE + ""); - writeActivityType(track.getActivityTypeLocalized()); - printWriter.println(""); - printWriter.println("absolute"); - printWriter.println("1"); - } + printWriter.println("#" + TRACK_STYLE + ""); + writeActivityType(track.getActivityTypeLocalized()); + printWriter.println(""); + printWriter.println("absolute"); + printWriter.println("1"); } private void writeEndTrack() { - if (printWriter != null) { - printWriter.println(""); - printWriter.println(""); - } + printWriter.println(""); + printWriter.println(""); } @VisibleForTesting void writeOpenSegment() { - if (printWriter != null) { - printWriter.println(""); - speedList.clear(); - distanceList.clear(); - powerList.clear(); - cadenceList.clear(); - heartRateList.clear(); - altitudeGainList.clear(); - altitudeLossList.clear(); - accuracyHorizontal.clear(); - accuracyVertical.clear(); - } + printWriter.println(""); + speedList.clear(); + distanceList.clear(); + powerList.clear(); + cadenceList.clear(); + heartRateList.clear(); + altitudeGainList.clear(); + altitudeLossList.clear(); + accuracyHorizontal.clear(); + accuracyVertical.clear(); } @VisibleForTesting void writeCloseSegment() { - if (printWriter != null) { - printWriter.println(""); - printWriter.println(""); - if (speedList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(speedList, EXTENDED_DATA_TYPE_SPEED); - } - if (distanceList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(distanceList, EXTENDED_DATA_TYPE_DISTANCE); - } - if (powerList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(powerList, EXTENDED_DATA_TYPE_POWER); - } - if (cadenceList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(cadenceList, EXTENDED_DATA_TYPE_CADENCE); - } - if (heartRateList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(heartRateList, EXTENDED_DATA_TYPE_HEART_RATE); - } - if (altitudeGainList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(altitudeGainList, EXTENDED_DATA_TYPE_ALTITUDE_GAIN); - } - if (altitudeLossList.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(altitudeLossList, EXTENDED_DATA_TYPE_ALTITUDE_LOSS); - } - if (accuracyHorizontal.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(accuracyHorizontal, EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL); - } - if (accuracyVertical.stream().anyMatch(Objects::nonNull)) { - writeSimpleArrayData(accuracyVertical, EXTENDED_DATA_TYPE_ACCURACY_VERTICAL); - } - printWriter.println(""); - printWriter.println(""); - printWriter.println(""); + printWriter.println(""); + printWriter.println(""); + if (speedList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(speedList, EXTENDED_DATA_TYPE_SPEED); } + if (distanceList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(distanceList, EXTENDED_DATA_TYPE_DISTANCE); + } + if (powerList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(powerList, EXTENDED_DATA_TYPE_POWER); + } + if (cadenceList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(cadenceList, EXTENDED_DATA_TYPE_CADENCE); + } + if (heartRateList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(heartRateList, EXTENDED_DATA_TYPE_HEART_RATE); + } + if (altitudeGainList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(altitudeGainList, EXTENDED_DATA_TYPE_ALTITUDE_GAIN); + } + if (altitudeLossList.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(altitudeLossList, EXTENDED_DATA_TYPE_ALTITUDE_LOSS); + } + if (accuracyHorizontal.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(accuracyHorizontal, EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL); + } + if (accuracyVertical.stream().anyMatch(Objects::nonNull)) { + writeSimpleArrayData(accuracyVertical, EXTENDED_DATA_TYPE_ACCURACY_VERTICAL); + } + printWriter.println(""); + printWriter.println(""); + printWriter.println(""); } @VisibleForTesting void writeTrackPoint(ZoneOffset zoneOffset, TrackPoint trackPoint) { - if (printWriter != null) { - printWriter.println("" + getTime(zoneOffset, trackPoint.getLocation()) + ""); + printWriter.println("" + getTime(zoneOffset, trackPoint.getLocation()) + ""); - if (trackPoint.hasLocation()) { - printWriter.println("" + getCoordinates(trackPoint.getLocation(), " ") + ""); - } else { - printWriter.println(""); - } - speedList.add(trackPoint.hasSpeed() ? (float) trackPoint.getSpeed().toMPS() : null); - - distanceList.add(trackPoint.hasSensorDistance() ? (float) trackPoint.getSensorDistance().toM() : null); - heartRateList.add(trackPoint.hasHeartRate() ? trackPoint.getHeartRate().getBPM() : null); - cadenceList.add(trackPoint.hasCadence() ? trackPoint.getCadence().getRPM() : null); - powerList.add(trackPoint.hasPower() ? trackPoint.getPower().getW() : null); - - altitudeGainList.add(trackPoint.hasAltitudeGain() ? trackPoint.getAltitudeGain() : null); - altitudeLossList.add(trackPoint.hasAltitudeLoss() ? trackPoint.getAltitudeLoss() : null); - accuracyHorizontal.add(trackPoint.hasHorizontalAccuracy() ? (float) trackPoint.getHorizontalAccuracy().toM() : null); - accuracyVertical.add(trackPoint.hasVerticalAccuracy() ? (float) trackPoint.getVerticalAccuracy().toM() : null); + if (trackPoint.hasLocation()) { + printWriter.println("" + getCoordinates(trackPoint.getLocation(), " ") + ""); + } else { + printWriter.println(""); } + speedList.add(trackPoint.hasSpeed() ? (float) trackPoint.getSpeed().toMPS() : null); + + distanceList.add(trackPoint.hasSensorDistance() ? (float) trackPoint.getSensorDistance().toM() : null); + heartRateList.add(trackPoint.hasHeartRate() ? trackPoint.getHeartRate().getBPM() : null); + cadenceList.add(trackPoint.hasCadence() ? trackPoint.getCadence().getRPM() : null); + powerList.add(trackPoint.hasPower() ? trackPoint.getPower().getW() : null); + + altitudeGainList.add(trackPoint.hasAltitudeGain() ? trackPoint.getAltitudeGain() : null); + altitudeLossList.add(trackPoint.hasAltitudeLoss() ? trackPoint.getAltitudeLoss() : null); + accuracyHorizontal.add(trackPoint.hasHorizontalAccuracy() ? (float) trackPoint.getHorizontalAccuracy().toM() : null); + accuracyVertical.add(trackPoint.hasVerticalAccuracy() ? (float) trackPoint.getVerticalAccuracy().toM() : null); } /**