Cleanup: use Java17 switch statements.

AndroidStudio code cleanup.
This commit is contained in:
Dennis Guse
2023-04-13 14:52:20 +02:00
parent 3a8e547e10
commit efddb31391
30 changed files with 355 additions and 640 deletions
@@ -93,23 +93,9 @@ public class CSVTrackExporter implements TrackExporter {
@Override
public boolean writeTrack(Track[] tracks, @NonNull OutputStream outputStream) {
List<Column> columns = Collections.unmodifiableList(Arrays.asList(
new Column("time", null),
new Column("trackpoint_type", t -> quote(t.getType().name())),
new Column("latitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLatitude()) : ""),
new Column("longitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLongitude()) : ""),
new Column("altitude", t -> t.hasAltitude() ? COORDINATE_FORMAT.format(t.getAltitude().toM()) : ""),
new Column("accuracy_horizontal", t -> t.hasHorizontalAccuracy() ? DISTANCE_FORMAT.format(t.getHorizontalAccuracy().toM()) : ""),
new Column("accuracy_vertical", t -> t.hasVerticalAccuracy() ? DISTANCE_FORMAT.format(t.getVerticalAccuracy().toM()) : ""),
List<Column> columns = Collections.unmodifiableList(Arrays.asList(new Column("time", null), new Column("trackpoint_type", t -> quote(t.getType().name())), new Column("latitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLatitude()) : ""), new Column("longitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLongitude()) : ""), new Column("altitude", t -> t.hasAltitude() ? COORDINATE_FORMAT.format(t.getAltitude().toM()) : ""), new Column("accuracy_horizontal", t -> t.hasHorizontalAccuracy() ? DISTANCE_FORMAT.format(t.getHorizontalAccuracy().toM()) : ""), new Column("accuracy_vertical", t -> t.hasVerticalAccuracy() ? DISTANCE_FORMAT.format(t.getVerticalAccuracy().toM()) : ""),
new Column("speed", t -> t.hasSpeed() ? SPEED_FORMAT.format(t.getSpeed().toKMH()) : ""),
new Column("altitude_gain", t -> t.hasAltitudeGain() ? DISTANCE_FORMAT.format(t.getAltitudeGain()) : ""),
new Column("altitude_loss", t -> t.hasAltitudeLoss() ? DISTANCE_FORMAT.format(t.getAltitudeLoss()) : ""),
new Column("sensor_distance", t -> t.hasSensorDistance() ? DISTANCE_FORMAT.format(t.getSensorDistance().toM()) : ""),
new Column("heartrate", t -> t.hasHeartRate() ? HEARTRATE_FORMAT.format(t.getHeartRate().getBPM()) : ""),
new Column("cadence", t -> t.hasCadence() ? CADENCE_FORMAT.format(t.getCadence().getRPM()) : ""),
new Column("power", t -> t.hasPower() ? ALTITUDE_FORMAT.format(t.getPower().getW()) : "")
));
new Column("speed", t -> t.hasSpeed() ? SPEED_FORMAT.format(t.getSpeed().toKMH()) : ""), new Column("altitude_gain", t -> t.hasAltitudeGain() ? DISTANCE_FORMAT.format(t.getAltitudeGain()) : ""), new Column("altitude_loss", t -> t.hasAltitudeLoss() ? DISTANCE_FORMAT.format(t.getAltitudeLoss()) : ""), new Column("sensor_distance", t -> t.hasSensorDistance() ? DISTANCE_FORMAT.format(t.getSensorDistance().toM()) : ""), new Column("heartrate", t -> t.hasHeartRate() ? HEARTRATE_FORMAT.format(t.getHeartRate().getBPM()) : ""), new Column("cadence", t -> t.hasCadence() ? CADENCE_FORMAT.format(t.getCadence().getRPM()) : ""), new Column("power", t -> t.hasPower() ? ALTITUDE_FORMAT.format(t.getPower().getW()) : "")));
try {
prepare(outputStream);
@@ -144,15 +130,10 @@ public class CSVTrackExporter implements TrackExporter {
TrackPoint trackPoint = trackPointIterator.next();
switch (trackPoint.getType()) {
case SEGMENT_START_MANUAL:
case SEGMENT_END_MANUAL:
case SEGMENT_START_AUTOMATIC:
case SENSORPOINT:
case TRACKPOINT:
writeTrackPoint(columns, trackPoint);
break;
default:
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
case SEGMENT_START_MANUAL, SEGMENT_END_MANUAL, SEGMENT_START_AUTOMATIC, SENSORPOINT, TRACKPOINT ->
writeTrackPoint(columns, trackPoint);
default ->
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
}
}
}
@@ -171,18 +152,14 @@ public class CSVTrackExporter implements TrackExporter {
public void writeHeader(List<Column> columns) {
if (printWriter != null) {
String columnNames = columns.stream().map(c -> c.columnName)
.reduce((s, s2) -> s + "," + s2)
.orElseThrow(() -> new RuntimeException("No columns defined"));
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<Column> 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"));
String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined"));
printWriter.println(columnNames);
}
}
@@ -30,14 +30,9 @@ public class ExportServiceResultReceiver extends ResultReceiver {
protected void onReceiveResult(int resultCode, Bundle resultData) {
Track.Id trackId = resultData.getParcelable(ExportServiceResultReceiver.RESULT_EXTRA_TRACK_ID);
switch (resultCode) {
case RESULT_CODE_SUCCESS:
receiver.onExportSuccess(trackId);
break;
case RESULT_CODE_ERROR:
receiver.onExportError(trackId);
break;
default:
throw new RuntimeException("Unknown resultCode.");
case RESULT_CODE_SUCCESS -> receiver.onExportSuccess(trackId);
case RESULT_CODE_ERROR -> receiver.onExportError(trackId);
default -> throw new RuntimeException("Unknown resultCode.");
}
}
@@ -145,37 +145,32 @@ public class GPXTrackExporter implements TrackExporter {
}
switch (trackPoint.getType()) {
case SEGMENT_START_MANUAL:
Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_START_MANUAL.name() + " is not supported.");
break;
case SEGMENT_END_MANUAL:
case SEGMENT_START_MANUAL ->
Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_START_MANUAL.name() + " is not supported.");
case SEGMENT_END_MANUAL -> {
if (wroteSegment) writeCloseSegment();
wroteSegment = false;
Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_END_MANUAL.name() + " is not supported.");
break;
case SEGMENT_START_AUTOMATIC:
}
case SEGMENT_START_AUTOMATIC -> {
if (wroteSegment) writeCloseSegment();
writeOpenSegment();
wroteSegment = true;
trackDistance = trackDistance.plus(writeTrackPoint(track.getZoneOffset(), trackPoint, sensorPoints, trackDistance));
sensorPoints.clear();
break;
case SENSORPOINT:
sensorPoints.add(trackPoint);
break;
case TRACKPOINT:
}
case SENSORPOINT -> sensorPoints.add(trackPoint);
case TRACKPOINT -> {
if (!wroteSegment) {
// Might happen for older data (pre v3.15.0)
writeOpenSegment();
wroteSegment = true;
}
trackDistance = trackDistance.plus(writeTrackPoint(track.getZoneOffset(), trackPoint, sensorPoints, trackDistance));
sensorPoints.clear();
break;
default:
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
}
default ->
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
}
}
@@ -169,30 +169,28 @@ public class KMLTrackExporter implements TrackExporter {
}
switch (trackPoint.getType()) {
case SEGMENT_START_MANUAL:
case SEGMENT_START_AUTOMATIC:
case SEGMENT_START_MANUAL, SEGMENT_START_AUTOMATIC -> {
if (wroteSegment) writeCloseSegment();
writeOpenSegment();
writeTrackPoint(track.getZoneOffset(), trackPoint);
wroteSegment = true;
break;
case SEGMENT_END_MANUAL:
}
case SEGMENT_END_MANUAL -> {
if (!wroteSegment) writeOpenSegment();
writeTrackPoint(track.getZoneOffset(), trackPoint);
writeCloseSegment();
wroteSegment = false;
break;
case SENSORPOINT:
case TRACKPOINT:
}
case SENSORPOINT, TRACKPOINT -> {
if (!wroteSegment) {
// Might happen for older data (pre v3.15.0)
writeOpenSegment();
wroteSegment = true;
}
writeTrackPoint(track.getZoneOffset(), trackPoint);
break;
default:
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
}
default ->
throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType());
}
}
@@ -156,103 +156,94 @@ public class GpxTrackImporter extends DefaultHandler implements XMLImporter.Trac
@Override
public void endElement(String uri, String localName, String tag) {
switch (tag) {
case TAG_GPX:
onFileEnd();
break;
case TAG_MARKER:
onMarkerEnd();
break;
case TAG_TRACK:
case TAG_GPX -> onFileEnd();
case TAG_MARKER -> onMarkerEnd();
case TAG_TRACK -> {
trackImporter.setTrack(context, name, uuid, description, category, null, zoneOffset);
zoneOffset = null;
break;
case TAG_TRACK_SEGMENT:
onTrackSegmentEnd();
break;
case TAG_TRACK_POINT:
currentSegment.add(createTrackPoint());
break;
case TAG_NAME:
}
case TAG_TRACK_SEGMENT -> onTrackSegmentEnd();
case TAG_TRACK_POINT -> currentSegment.add(createTrackPoint());
case TAG_NAME -> {
if (content != null) {
name = content.trim();
}
break;
case TAG_DESCRIPTION:
}
case TAG_DESCRIPTION -> {
if (content != null) {
description = content.trim();
}
break;
case TAG_TYPE:
}
case TAG_TYPE -> {
if (content != null) {
category = content.trim();
}
break;
case TAG_TIME:
}
case TAG_TIME -> {
if (content != null) {
time = content.trim();
}
break;
case TAG_ALTITUDE:
}
case TAG_ALTITUDE -> {
if (content != null) {
altitude = content.trim();
}
break;
case TAG_COMMENT:
}
case TAG_COMMENT -> {
if (content != null) {
markerType = content.trim();
}
break;
case TAG_EXTENSION_SPEED:
case TAG_EXTENSION_SPEED_COMPAT:
}
case TAG_EXTENSION_SPEED, TAG_EXTENSION_SPEED_COMPAT -> {
if (content != null) {
speed = content.trim();
}
break;
case TAG_EXTENSION_HEARTRATE:
}
case TAG_EXTENSION_HEARTRATE -> {
if (content != null) {
heartrate = content.trim();
}
break;
case TAG_EXTENSION_CADENCE:
}
case TAG_EXTENSION_CADENCE -> {
if (content != null) {
cadence = content.trim();
}
break;
case TAG_EXTENSION_POWER:
}
case TAG_EXTENSION_POWER -> {
if (content != null) {
power = content.trim();
}
break;
case TAG_ID:
}
case TAG_ID -> {
if (content != null) {
uuid = content.trim();
}
break;
case TAG_EXTENSION_GAIN:
}
case TAG_EXTENSION_GAIN -> {
if (content != null) {
gain = content.trim();
}
break;
case TAG_EXTENSION_LOSS:
}
case TAG_EXTENSION_LOSS -> {
if (content != null) {
loss = content.trim();
}
break;
case TAG_EXTENSION_DISTANCE:
}
case TAG_EXTENSION_DISTANCE -> {
if (content != null) {
sensorDistance = content.trim();
}
break;
case TAG_EXTENSION_ACCURACY_HORIZONTAL:
}
case TAG_EXTENSION_ACCURACY_HORIZONTAL -> {
if (content != null) {
accuracyHorizontal = content.trim();
}
break;
case TAG_EXTENSION_ACCURACY_VERTICAL:
}
case TAG_EXTENSION_ACCURACY_VERTICAL -> {
if (content != null) {
accuracyVertical = content.trim();
}
break;
}
}
content = "";
@@ -79,19 +79,17 @@ public class ImportViewModel extends AndroidViewModel implements ImportServiceRe
String message = resultData.getString(ImportServiceResultReceiver.RESULT_EXTRA_MESSAGE);
switch (resultCode) {
case ImportServiceResultReceiver.RESULT_CODE_ERROR:
case ImportServiceResultReceiver.RESULT_CODE_ERROR -> {
summary.errorCount++;
summary.fileErrors.add(getApplication().getString(R.string.import_error_info, fileName, message));
break;
case ImportServiceResultReceiver.RESULT_CODE_IMPORTED:
}
case ImportServiceResultReceiver.RESULT_CODE_IMPORTED -> {
summary.importedTrackIds.addAll(trackIds);
summary.successCount++;
break;
case ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS:
summary.existsCount++;
break;
default:
throw new RuntimeException(TAG + ": import service result code invalid: " + resultCode);
}
case ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS -> summary.existsCount++;
default ->
throw new RuntimeException(TAG + ": import service result code invalid: " + resultCode);
}
importData.postValue(summary);
@@ -136,27 +136,18 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac
@Override
public void startElement(String uri, String localName, String tag, Attributes attributes) throws SAXException {
switch (tag) {
case TAG_PLACEMARK:
case TAG_PHOTO_OVERLAY:
case TAG_PLACEMARK, TAG_PHOTO_OVERLAY ->
// Note that a track is contained in a Placemark, calling onMarkerStart will clear various track variables like name, category, and description.
onMarkerStart();
break;
case TAG_MULTI_TRACK:
case TAG_KML22_MULTI_TRACK:
trackImporter.newTrack();
break;
case TAG_TRACK:
case TAG_KML22_TRACK:
onMarkerStart();
case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> trackImporter.newTrack();
case TAG_TRACK, TAG_KML22_TRACK -> {
if (trackImporter == null) {
throw new SAXException("Missing " + TAG_MULTI_TRACK);
}
onTrackSegmentStart();
break;
case TAG_DATA_CATEGORY:
case TAG_SIMPLE_ARRAY_DATA:
case TAG_KML22_SIMPLE_ARRAY_DATA:
dataType = attributes.getValue(ATTRIBUTE_NAME);
break;
}
case TAG_DATA_CATEGORY, TAG_SIMPLE_ARRAY_DATA, TAG_KML22_SIMPLE_ARRAY_DATA ->
dataType = attributes.getValue(ATTRIBUTE_NAME);
}
}
@@ -168,32 +159,18 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac
@Override
public void endElement(String uri, String localName, String tag) throws SAXException {
switch (tag) {
case TAG_KML:
onFileEnd();
break;
case TAG_PLACEMARK:
case TAG_PHOTO_OVERLAY:
case TAG_KML -> onFileEnd();
case TAG_PLACEMARK, TAG_PHOTO_OVERLAY ->
// Note that a track is contained in a Placemark, calling onMarkerEnd is save since markerType is not set for a track.
onMarkerEnd();
break;
case TAG_COORDINATES:
onMarkerLocationEnd();
break;
case TAG_MULTI_TRACK:
case TAG_KML22_MULTI_TRACK:
onMarkerEnd();
case TAG_COORDINATES -> onMarkerLocationEnd();
case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> {
trackImporter.setTrack(context, name, uuid, description, category, icon, zoneOffset);
zoneOffset = null;
break;
case TAG_TRACK:
case TAG_KML22_TRACK:
onTrackSegmentEnd();
break;
case TAG_COORD:
case TAG_KML22_COORD:
onCoordEnded();
break;
case TAG_VALUE:
case TAG_KML22_VALUE:
}
case TAG_TRACK, TAG_KML22_TRACK -> onTrackSegmentEnd();
case TAG_COORD, TAG_KML22_COORD -> onCoordEnded();
case TAG_VALUE, TAG_KML22_VALUE -> {
if (KMLTrackExporter.EXTENDED_DATA_TYPE_CATEGORY.equals(dataType)) {
if (content != null) {
category = content.trim();
@@ -201,28 +178,28 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac
} else {
onExtendedDataValueEnd();
}
break;
case TAG_NAME:
}
case TAG_NAME -> {
if (content != null) {
name = content.trim();
}
break;
case TAG_UUID:
}
case TAG_UUID -> {
if (content != null) {
uuid = content.trim();
}
break;
case TAG_DESCRIPTION:
}
case TAG_DESCRIPTION -> {
if (content != null) {
description = content.trim();
}
break;
case TAG_ICON:
}
case TAG_ICON -> {
if (content != null) {
icon = content.trim();
}
break;
case TAG_WHEN:
}
case TAG_WHEN -> {
if (content != null) {
try {
OffsetDateTime time = StringUtils.parseTime(content.trim());
@@ -234,18 +211,17 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac
throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse time: %s", content.trim())), e);
}
}
break;
case TAG_STYLE_URL:
}
case TAG_STYLE_URL -> {
if (content != null) {
markerType = content.trim();
}
break;
case TAG_HREF:
}
case TAG_HREF -> {
if (content != null) {
photoUrl = content.trim();
}
break;
}
}
// Reset element content
@@ -436,35 +412,19 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac
}
}
switch (dataType) {
case KMLTrackExporter.EXTENDED_DATA_TYPE_SPEED:
sensorSpeedList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_DISTANCE:
sensorDistanceList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_POWER:
sensorPowerList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_HEART_RATE:
sensorHeartRateList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_CADENCE:
sensorCadenceList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_GAIN:
altitudeGainList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_LOSS:
altitudeLossList.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL:
accuracyHorizontal.add(value);
break;
case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_VERTICAL:
accuracyVertical.add(value);
break;
default:
Log.w(TAG, "Data from extended data " + dataType + " is not (yet) supported.");
case KMLTrackExporter.EXTENDED_DATA_TYPE_SPEED -> sensorSpeedList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_DISTANCE -> sensorDistanceList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_POWER -> sensorPowerList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_HEART_RATE -> sensorHeartRateList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_CADENCE -> sensorCadenceList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_GAIN -> altitudeGainList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_LOSS -> altitudeLossList.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL ->
accuracyHorizontal.add(value);
case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_VERTICAL ->
accuracyVertical.add(value);
default ->
Log.w(TAG, "Data from extended data " + dataType + " is not (yet) supported.");
}
}