diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/AbstractDataImportResponse.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/AbstractDataImportResponse.java
new file mode 100644
index 00000000000..44e3bb1c876
--- /dev/null
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/AbstractDataImportResponse.java
@@ -0,0 +1,75 @@
+package com.sap.sailing.gwt.ui.adminconsole.resulthandling;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.logging.Logger;
+
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.core.client.JsArray;
+import com.google.gwt.json.client.JSONParser;
+
+/**
+ * Abstract super-class for data import response overlay type providing convenience methods.
+ */
+class AbstractDataImportResponse extends JavaScriptObject {
+
+ private static final Logger logger = Logger.getLogger(AbstractDataImportResponse.class.getName());
+
+ /**
+ * {@link JSONParser#parseStrict(String) Strictly parses} the provided {@link String} representation into JSON and
+ * {@link JavaScriptObject#cast() casts} it to the provided {@link Class type class}.
+ *
+ * @param json
+ * {@link String} representation to parse into JSON
+ * @param clazz
+ * {@link Class type class} to cast parse result to
+ * @return the parsed and casted object or null if any {@link Exception exception} occurs
+ */
+ protected static final T parse(String json, Class clazz) {
+ try {
+ return JSONParser.parseStrict(json).isObject().getJavaScriptObject().cast();
+ } catch (Exception e) {
+ logger.severe(() -> "Failed to parse import " + clazz.getSimpleName());
+ return null;
+ }
+ }
+
+ protected AbstractDataImportResponse() {
+ }
+
+ /**
+ * Maps an array containing element of any type into a {@link List list} of the same type by keeping their order.
+ *
+ * @param array
+ * the array which should be mapped
+ * @return the {@link List list} containing the array's elements or an empty list if the array is null
+ * or empty
+ */
+ protected final List asList(T[] array) {
+ return (array == null || array.length == 0) ? Collections.emptyList() : Arrays.asList(array);
+ }
+
+ /**
+ * Maps a {@link JsArray JavaScript array} containing any type of {@link JavaScriptObject JavaScript objects} into a
+ * {@link List list} of the same type by keeping their order.
+ *
+ * @param array
+ * the {@link JsArray JavaScript array} which should be mapped
+ * @return the {@link List list} containing the array's elements or an empty list if the array is null
+ * or empty
+ */
+ protected final List asList(JsArray array) {
+ if (array == null || array.length() == 0) {
+ return Collections.emptyList();
+ } else {
+ final List list = new ArrayList(array.length());
+ for (int index = 0; index < array.length(); index++) {
+ list.add(array.get(index));
+ }
+ return list;
+ }
+ }
+
+}
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/ExpeditionDataImportResponse.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/ExpeditionDataImportResponse.java
index 09df258f0f4..8da6afafe8a 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/ExpeditionDataImportResponse.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/ExpeditionDataImportResponse.java
@@ -1,22 +1,11 @@
package com.sap.sailing.gwt.ui.adminconsole.resulthandling;
import java.util.UUID;
-import java.util.logging.Logger;
-import com.google.gwt.core.client.JavaScriptObject;
-import com.google.gwt.json.client.JSONParser;
-
-public class ExpeditionDataImportResponse extends JavaScriptObject {
-
- private static final Logger logger = Logger.getLogger(ExpeditionDataImportResponse.class.getName());
+public class ExpeditionDataImportResponse extends AbstractDataImportResponse {
public static final ExpeditionDataImportResponse parse(String json) {
- try {
- return (ExpeditionDataImportResponse) JSONParser.parseStrict(json).isObject().getJavaScriptObject();
- } catch (Exception e) {
- logger.severe("Failed to parse ExpeditionDataImportResponse object!");
- return null;
- }
+ return AbstractDataImportResponse.parse(json, ExpeditionDataImportResponse.class);
}
protected ExpeditionDataImportResponse() {
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResponse.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResponse.java
index 7b60ea897e1..e7cd4d272a9 100644
--- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResponse.java
+++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/resulthandling/SensorDataImportResponse.java
@@ -1,62 +1,36 @@
package com.sap.sailing.gwt.ui.adminconsole.resulthandling;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
-import java.util.logging.Logger;
-import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
-import com.google.gwt.json.client.JSONParser;
-public class SensorDataImportResponse extends JavaScriptObject {
- private static final Logger logger = Logger.getLogger(SensorDataImportResponse.class.getName());
+public class SensorDataImportResponse extends AbstractDataImportResponse {
public static final SensorDataImportResponse parse(String json) {
- try {
- return (SensorDataImportResponse) JSONParser.parseStrict(json).isObject().getJavaScriptObject();
- } catch (Exception e) {
- logger.severe("failed to parse result");
- return null;
- }
+ return AbstractDataImportResponse.parse(json, SensorDataImportResponse.class);
}
protected SensorDataImportResponse() {
}
public final List getUploads() {
- final String[] uploads = uploads();
- if (uploads == null || uploads.length == 0) {
- return Collections.emptyList();
- } else {
- return Arrays.asList(uploads);
- }
+ return asList(this.uploads());
}
public final List getErrors() {
- final JsArray errors = errors();
- if (errors == null || errors.length() == 0) {
- return Collections.emptyList();
- } else {
- final ArrayList errorsAsList = new ArrayList<>(errors.length());
- for (int i = 0; i < errors.length(); i++) {
- errorsAsList.add(errors.get(i));
- }
- return errorsAsList;
- }
+ return asList(this.errors());
}
private final native String[] uploads() /*-{
- return this.uploads;
+ return this.uploads;
}-*/;
private final native JsArray errors() /*-{
- return this.errors;
+ return this.errors;
}-*/;
public final boolean didSucceedImportingAnyFile() {
- return getUploads() != null && getUploads().size() > 0;
+ return getUploads() != null && !getUploads().isEmpty();
}
public final boolean hasErrors() {