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() {