From a62c4f8177b5f94f7ee80afeaa8d40045302437e Mon Sep 17 00:00:00 2001 From: Papick Garcia Taboada Date: Thu, 14 Dec 2017 17:16:17 +0100 Subject: [PATCH] Deliver error to client if no importer succeeded to process the file --- .../SensorDataImportResultsDialog.java | 14 ++++++++------ .../gateway/trackfiles/impl/JsonHolder.java | 7 +++++++ .../impl/TrackFilesImportServlet.java | 19 ++++++++++++++----- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResultsDialog.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResultsDialog.java index 5a722b1ad9d..8b124cd6047 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResultsDialog.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResultsDialog.java @@ -16,7 +16,6 @@ public class SensorDataImportResultsDialog { List errorMessages = response.getErrors(); SafeHtmlBuilder shb = new SafeHtmlBuilder(); shb.appendHtmlConstant("
"); - if (response.didSucceedImportingAnyFile()) { shb.appendHtmlConstant("

Succesful uploads

"); shb.appendHtmlConstant("
    "); @@ -27,17 +26,20 @@ public class SensorDataImportResultsDialog { } else { shb.appendHtmlConstant("

    No succesful upload

    "); } - if (response.hasErrors()) { shb.appendHtmlConstant("

    Error messages

    "); for (ErrorMessage errorMsg : errorMessages) { shb.appendHtmlConstant("
    ").appendEscaped(errorMsg.getMessage()) .appendHtmlConstant("
    "); shb.appendHtmlConstant("
      "); - shb.appendHtmlConstant("
    • ServerLog UUID: ").appendEscaped(errorMsg.getExUUID()) - .appendHtmlConstant("
    • "); - shb.appendHtmlConstant("
    • Exception Classname: ").appendEscaped(errorMsg.getClassName()) - .appendHtmlConstant("
    • "); + if (!isNullOrEmpty(errorMsg.getExUUID())) { + shb.appendHtmlConstant("
    • ServerLog UUID: ").appendEscaped(errorMsg.getExUUID()) + .appendHtmlConstant("
    • "); + } + if (!isNullOrEmpty(errorMsg.getClassName())) { + shb.appendHtmlConstant("
    • Exception Classname: ").appendEscaped(errorMsg.getClassName()) + .appendHtmlConstant("
    • "); + } if (!isNullOrEmpty(errorMsg.getFilename())) { shb.appendHtmlConstant("
    • Filename: ").appendEscaped(errorMsg.getFilename()) .appendHtmlConstant("
    • "); diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/JsonHolder.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/JsonHolder.java index eb9c4f72349..42d337710c6 100644 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/JsonHolder.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/JsonHolder.java @@ -69,4 +69,11 @@ public class JsonHolder { resp.setContentType("text/html"); jsonResponseObj.writeJSONString(resp.getWriter()); } + + public void noImporterSucceeded(String filename) { + JSONObject jsonExceptionObj = new JSONObject(); + jsonErrorObj.add(jsonExceptionObj); + jsonExceptionObj.put("filename", filename); + jsonExceptionObj.put("message", "No importer succeeded to process file"); + } } \ No newline at end of file diff --git a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/TrackFilesImportServlet.java b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/TrackFilesImportServlet.java index a56e08c6c71..b80a9e24a3d 100755 --- a/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/TrackFilesImportServlet.java +++ b/java/com.sap.sailing.server.gateway/src/com/sap/sailing/server/gateway/trackfiles/impl/TrackFilesImportServlet.java @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -96,20 +97,25 @@ public class TrackFilesImportServlet extends AbstractFileUploadServlet { importersToTry.addAll(getGPSFixImporters(null)); logger.log(Level.INFO, "System knows " + importersToTry.size() + " importers: " + importersToTry.stream().map(i -> i.getType()).collect(Collectors.joining(", "))); - + AtomicBoolean succeeded = new AtomicBoolean(false); parsersLoop: for (GPSFixImporter importer : importersToTry) { - boolean succeeded = false; + logger.log(Level.INFO, "Trying to import file " + fileName + " with importer " + importer.getType()); try (BufferedInputStream in = new BufferedInputStream(fileItem.getInputStream())) { try { - succeeded = importer.importFixes(in, new Callback() { + boolean ok = importer.importFixes(in, new Callback() { @Override public void addFix(GPSFix fix, TrackFileImportDeviceIdentifier device) { storeFix(fix, device); jsonResult.addDeviceIndentifier(device); } }, true, fileName); - + if (ok) { + succeeded.set(ok); + } else { + logger.log(Level.FINE, + "Importer " + importer.getType() + " did not succesfully import fixes"); + } } catch (Exception e) { logger.log(Level.INFO, "Failed with " + e.getClass().getSimpleName() + " while importing file using " + importer.getType()); @@ -118,11 +124,14 @@ public class TrackFilesImportServlet extends AbstractFileUploadServlet { } } } - if (succeeded) { + if (succeeded.get()) { logger.log(Level.INFO, "Successfully imported file " + fileName + " using " + importer.getType()); break parsersLoop; } } + if (!succeeded.get()) { + jsonResult.noImporterSucceeded(fileName); + } } }