From a13465391fed79d33b228e537f37c1653a83198d Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Tue, 2 Mar 2021 23:14:20 +0100 Subject: [PATCH] Import: replaced SAXParserException as it only shows the message of it's cause. --- .../opentracks/util/StringUtilsTest.java | 9 ---- .../importer/AbstractFileTrackImporter.java | 48 ++++++++++++------- .../io/file/importer/ImportService.java | 16 +++---- 3 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java index 01e60cf76..983d166b8 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/util/StringUtilsTest.java @@ -94,18 +94,12 @@ public class StringUtilsTest { assertEquals("there]]>", StringUtils.formatCData("hello]]>there")); } - /** - * Tests {@link StringUtils#parseTime(String)} with fractional seconds. - */ @Test public void testGetTime_fractional() { assertGetTime("2010-05-04T03:02:01.352Z", 2010, 5, 4, 3, 2, 1, 352); assertGetTime("2010-05-04T03:02:01.3529Z", 2010, 5, 4, 3, 2, 1, 352); } - /** - * Tests {@link StringUtils#parseTime(String)} with time zone. - */ @Test public void testGetTime_timezone() { assertGetTime("2010-05-04T03:02:01", 2010, 5, 4, 3, 2, 1, 0); @@ -118,9 +112,6 @@ public class StringUtilsTest { assertGetTime("2010-05-04T03:02:01-05:00", 2010, 5, 4, 8, 2, 1, 0); } - /** - * Tests {@link StringUtils#parseTime(String)} with fractional seconds and time zone. - */ @Test public void testGetTime_fractionalAndTimezone() { assertGetTime("2010-05-04T03:02:01.352Z", 2010, 5, 4, 3, 2, 1, 352); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java index b9f0b2897..add4516eb 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/AbstractFileTrackImporter.java @@ -21,6 +21,8 @@ import android.database.sqlite.SQLiteConstraintException; import android.net.Uri; import android.util.Log; +import androidx.annotation.NonNull; + import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -122,7 +124,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track try { SAXParserFactory.newInstance().newSAXParser().parse(inputStream, this); return trackIds.get(0); - } catch (IOException | SAXException | ParserConfigurationException e) { + } catch (IOException | SAXException | ParserConfigurationException | ParsingException e) { Log.e(TAG, "Unable to import file", e); if (trackIds.size() > 0) { cleanImport(); @@ -304,7 +306,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track } } - protected void addMarker() throws SAXException { + protected void addMarker() throws ParsingException { // Markers must have a time, else cannot match to the track points if (time == null) { Log.w(TAG, "Marker without time ignored."); @@ -335,7 +337,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track markers.add(marker); } - protected TrackPoint getTrackPoint() throws SAXException { + protected TrackPoint getTrackPoint() throws ParsingException { TrackPoint trackPoint = createTrackPoint(); if (trackPoint.hasLocation()) { @@ -350,7 +352,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track trackPoint.setTime(time); } else if (!LocationUtils.isValidLocation(trackPoint.getLocation())) { - throw new SAXException(createErrorMessage("Invalid location detected: " + trackPoint)); + throw new ParsingException(createErrorMessage("Invalid location detected: " + trackPoint)); } } @@ -424,16 +426,13 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track return null; } - /** - * Creates a location. - */ - private TrackPoint createTrackPoint() throws SAXException { + private TrackPoint createTrackPoint() throws ParsingException { TrackPoint trackPoint = new TrackPoint(TrackPoint.Type.TRACKPOINT); try { trackPoint.setTime(StringUtils.parseTime(time)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse time: %s", time)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse time: %s", time)), e); } if (latitude == null || longitude == null) { @@ -444,7 +443,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track trackPoint.setLatitude(Double.parseDouble(latitude)); trackPoint.setLongitude(Double.parseDouble(longitude)); } catch (NumberFormatException e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse latitude longitude: %s %s", latitude, longitude)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse latitude longitude: %s %s", latitude, longitude)), e); } @@ -452,7 +451,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track try { trackPoint.setAltitude(Double.parseDouble(altitude)); } catch (NumberFormatException e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse altitude: %s", altitude)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse altitude: %s", altitude)), e); } } @@ -460,14 +459,14 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track try { trackPoint.setSpeed(Float.parseFloat(speed)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse speed: %s", speed)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse speed: %s", speed)), e); } } if (heartrate != null) { try { trackPoint.setHeartRate_bpm(Float.parseFloat(heartrate)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse heart rate: %s", heartrate)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse heart rate: %s", heartrate)), e); } } @@ -475,7 +474,7 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track try { trackPoint.setCyclingCadence_rpm(Float.parseFloat(cadence)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse cadence: %s", cadence)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse cadence: %s", cadence)), e); } } @@ -483,14 +482,14 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track try { trackPoint.setElevationGain(Float.parseFloat(gain)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse elevation gain: %s", gain)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse elevation gain: %s", gain)), e); } } if (loss != null) { try { trackPoint.setElevationLoss(Float.parseFloat(loss)); } catch (Exception e) { - throw new SAXException(createErrorMessage(String.format(Locale.US, "Unable to parse elevation loss: %s", loss)), e); + throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse elevation loss: %s", loss)), e); } } @@ -546,4 +545,21 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track // The buffered locations final List bufferedTrackPoints = new ArrayList<>(); } + + public static class ParsingException extends RuntimeException { + + private ParsingException(@NonNull String message) { + super(message); + } + + private ParsingException(@NonNull String message, Exception cause) { + super(message, cause); + } + + @NonNull + @Override + public String toString() { + return "" + getMessage(); + } + } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java index 3d3de8c66..dc7d30511 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportService.java @@ -57,33 +57,33 @@ public class ImportService extends JobIntentService { trackImporter = new KmzTrackImporter(this, file.getUri()); } else { Log.d(TAG, "Unsupported file format."); - sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file.getName(), getString(R.string.import_unsupported_format)); + sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file, getString(R.string.import_unsupported_format)); return; } try (InputStream inputStream = getContentResolver().openInputStream(file.getUri())) { Track.Id trackId = trackImporter.importFile(inputStream); if (trackId != null) { - sendResult(ImportServiceResultReceiver.RESULT_CODE_IMPORTED, trackId, file.getName(), getString(R.string.import_file_imported, file.getName())); + sendResult(ImportServiceResultReceiver.RESULT_CODE_IMPORTED, trackId, file, getString(R.string.import_file_imported, file.getName())); } else { - sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, trackId, file.getName(), getString(R.string.import_unable_to_import_file, file.getName())); + sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, trackId, file, getString(R.string.import_unable_to_import_file, file.getName())); } } catch (IOException e) { Log.d(TAG, "Unable to import file", e); - sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file.getName(), getString(R.string.import_unable_to_import_file, e.getMessage())); + sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file, getString(R.string.import_unable_to_import_file, e.getMessage())); } catch (ImportParserException e) { Log.d(TAG, "Parser error: " + e.getMessage(), e); - sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file.getName(), getString(R.string.import_parser_error, e.getMessage())); + sendResult(ImportServiceResultReceiver.RESULT_CODE_ERROR, null, file, getString(R.string.import_parser_error, e.getMessage())); } catch (ImportAlreadyExistsException e) { Log.d(TAG, "Track already exists: " + e.getMessage(), e); - sendResult(ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS, null, file.getName(), e.getMessage()); + sendResult(ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS, null, file, e.getMessage()); } } - private void sendResult(int resultCode, Track.Id trackId, String fileName, String message) { + private void sendResult(int resultCode, Track.Id trackId, DocumentFile file, String message) { Bundle bundle = new Bundle(); bundle.putParcelable(ImportServiceResultReceiver.RESULT_EXTRA_TRACK_ID, trackId); - bundle.putString(ImportServiceResultReceiver.RESULT_EXTRA_FILENAME, fileName); + bundle.putString(ImportServiceResultReceiver.RESULT_EXTRA_FILENAME, file.getName()); bundle.putString(ImportServiceResultReceiver.RESULT_EXTRA_MESSAGE, message); resultReceiver.send(resultCode, bundle); }