From 24e54dd753b3ce8c649437e91db8cec42cb02827 Mon Sep 17 00:00:00 2001
From: kfilippopolitis <kostasfilippop@gmail.com>
Date: Thu, 13 Jan 2022 03:32:48 -0800
Subject: [PATCH 1/2] Small changes

---
 .../models/DTOs/MIPEngineAlgorithmResultDTO.java | 11 +++++++++--
 .../mip/models/DTOs/TabularVisualizationDTO.java | 16 ++++++++++++++--
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
index 4491ddb44..69332ed5b 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
@@ -9,6 +9,13 @@ import java.util.List;
 @AllArgsConstructor
 public class MIPEngineAlgorithmResultDTO {
     private final String title;
-    private final List<TabularVisualizationDTO.Field> columns;
-    private final List<List<Object>> data;
+    private final List<Column> columns;
+
+    @Data
+    @AllArgsConstructor
+    public static class Column {
+        private final String name;
+        private final String type;
+        private final List<Object> data;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java
index 3e17932f7..8804c9576 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java
@@ -17,17 +17,29 @@ public class TabularVisualizationDTO {
 
     public TabularVisualizationDTO(MIPEngineAlgorithmResultDTO mipEngineAlgorithmResultDTO) {
         HashMap<String, List<TabularVisualizationDTO.Field>> schema = new HashMap<>();
-        schema.put("fields", mipEngineAlgorithmResultDTO.getColumns());
+        List<Field> fields = new ArrayList<TabularVisualizationDTO.Field>();
+        List<List<Object>> data = new ArrayList<ArrayList<TabularVisualizationDTO.Field>>()
+        for (Column column : mipEngineAlgorithmResultDTO.getColumns())
+        {
+            fields.add(new Field(column));
+            data.add(column.getData());
+        }
+        schema.put("fields", fields);
         this.name = mipEngineAlgorithmResultDTO.getTitle();
         this.profile = "tabular-data-resource";
         this.schema = schema;
-        this.data = mipEngineAlgorithmResultDTO.getData();
+        this.data = data;
     }
     @Data
     @AllArgsConstructor
     public static class Field {
         private final String name;
         private final String type;
+        public Field(Column column)
+        {
+            this.name = column.getName();
+            this.type = column.getType();
+        }
     }
 }
 
-- 
GitLab


From ef064540b5615cb2fdfd14bc7f405c39c3af3999 Mon Sep 17 00:00:00 2001
From: kfilippopolitis <kostasfilippop@gmail.com>
Date: Thu, 20 Jan 2022 00:57:28 -0800
Subject: [PATCH 2/2] Now mipengine result will be more flexible

---
 .../eu/hbp/mip/controllers/AlgorithmsAPI.java |  1 -
 .../mip/models/DTOs/ExaremeAlgorithmDTO.java  | 14 +++---
 .../eu/hbp/mip/models/DTOs/ExperimentDTO.java |  4 +-
 .../models/DTOs/MIPEngineAlgorithmDTO.java    |  9 ++++
 .../DTOs/MIPEngineAlgorithmResultDTO.java     | 21 ---------
 .../models/DTOs/TabularVisualizationDTO.java  | 45 -------------------
 .../hbp/mip/services/ExperimentService.java   | 30 ++++++-------
 7 files changed, 35 insertions(+), 89 deletions(-)
 delete mode 100644 src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
 delete mode 100644 src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java

diff --git a/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java b/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java
index a15fd37cd..2746a2b7b 100644
--- a/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java
+++ b/src/main/java/eu/hbp/mip/controllers/AlgorithmsAPI.java
@@ -151,7 +151,6 @@ public class AlgorithmsAPI {
             StringBuilder response = new StringBuilder();
             HTTPUtil.sendGet(mipengineAlgorithmsUrl, response);
             logger.LogUserAction(response.toString());
-
             mipEngineAlgorithms = gson.fromJson(
                     response.toString(),
                     new TypeToken<ArrayList<MIPEngineAlgorithmDTO>>() {
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java
index 584ffd424..07459a27e 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/ExaremeAlgorithmDTO.java
@@ -37,15 +37,19 @@ public class ExaremeAlgorithmDTO {
         this.desc = mipEngineAlgorithm.getDesc();
         this.type = "mipengine";
         List<ExaremeAlgorithmRequestParamDTO> parameters = new ArrayList<>();
+        if (mipEngineAlgorithm.getInputdata().getY().isPresent()){
+            parameters.add(new ExaremeAlgorithmRequestParamDTO("y", mipEngineAlgorithm.getInputdata().getY().get()));
+        }
         parameters.add(new ExaremeAlgorithmRequestParamDTO("x", mipEngineAlgorithm.getInputdata().getX()));
-        parameters.add(new ExaremeAlgorithmRequestParamDTO("y", mipEngineAlgorithm.getInputdata().getY()));
         parameters.add(new ExaremeAlgorithmRequestParamDTO("pathology", mipEngineAlgorithm.getInputdata().getPathology()));
         parameters.add(new ExaremeAlgorithmRequestParamDTO("dataset", mipEngineAlgorithm.getInputdata().getDatasets()));
         parameters.add(new ExaremeAlgorithmRequestParamDTO("filter", mipEngineAlgorithm.getInputdata().getFilter()));
-        mipEngineAlgorithm.getParameters().forEach((name, parameterDTO) -> {
-            ExaremeAlgorithmRequestParamDTO parameter = new ExaremeAlgorithmRequestParamDTO(name, parameterDTO);
-            parameters.add(parameter);
-        });
+        if (mipEngineAlgorithm.getParameters().isPresent()){
+            mipEngineAlgorithm.getParameters().get().forEach((name, parameterDTO) -> {
+                ExaremeAlgorithmRequestParamDTO parameter = new ExaremeAlgorithmRequestParamDTO(name, parameterDTO);
+                parameters.add(parameter);
+            });
+        }
         this.setParameters(parameters);
     }
     @Data
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
index 378bb5126..d87297591 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/ExperimentDTO.java
@@ -25,8 +25,8 @@ public class ExperimentDTO {
     private Boolean shared;
     private Boolean viewed;
     // Result is a list of objects because there is a limitation that java has in types.
-    // Exareme has result in the type of a List<HashMap<String, Object>>
-    // Galaxy has result in the type of a List<HashMap<String, List<Object>>>
+    // Exareme has result in the type of List<HashMap<String, Object>>
+    // Galaxy has result in the type of List<HashMap<String, List<Object>>>
     //And there is no generic type that describes either an object or a list of objects
     private List<Object> result;
     private ExperimentDAO.Status status;
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java
index 5edfbfe77..d991fde80 100644
--- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java
+++ b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmDTO.java
@@ -6,6 +6,7 @@ import lombok.Data;
 
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Optional;
 
 @Data
 @AllArgsConstructor
@@ -32,6 +33,9 @@ public class MIPEngineAlgorithmDTO {
     @SerializedName("inputdata")
     private MIPEngineAlgorithmInputdataDTO inputdata;
 
+    public Optional<Hashtable<String, MIPEngineAlgorithmParameterDTO>> getParameters() {
+        return Optional.ofNullable(parameters);
+    }
     @Data
     @AllArgsConstructor
     public static class MIPEngineAlgorithmParameterDTO {
@@ -67,6 +71,7 @@ public class MIPEngineAlgorithmDTO {
     @Data
     @AllArgsConstructor
     public static class MIPEngineAlgorithmInputdataDTO {
+
         @SerializedName("x")
         private MIPEngineAlgorithmInputDataDetailDTO x;
 
@@ -81,6 +86,10 @@ public class MIPEngineAlgorithmDTO {
 
         @SerializedName("filter")
         private MIPEngineAlgorithmInputDataDetailDTO filter;
+
+        public Optional<MIPEngineAlgorithmInputDataDetailDTO> getY() {
+            return Optional.ofNullable(y);
+        }
     }
 
     @Data
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
deleted file mode 100644
index 69332ed5b..000000000
--- a/src/main/java/eu/hbp/mip/models/DTOs/MIPEngineAlgorithmResultDTO.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package eu.hbp.mip.models.DTOs;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-public class MIPEngineAlgorithmResultDTO {
-    private final String title;
-    private final List<Column> columns;
-
-    @Data
-    @AllArgsConstructor
-    public static class Column {
-        private final String name;
-        private final String type;
-        private final List<Object> data;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java b/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java
deleted file mode 100644
index 8804c9576..000000000
--- a/src/main/java/eu/hbp/mip/models/DTOs/TabularVisualizationDTO.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package eu.hbp.mip.models.DTOs;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-
-import java.util.HashMap;
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-public class TabularVisualizationDTO {
-    private final String name;
-    private final String profile;
-    private final HashMap<String, List<Field>> schema;
-    private final List<List<Object>> data;
-
-
-    public TabularVisualizationDTO(MIPEngineAlgorithmResultDTO mipEngineAlgorithmResultDTO) {
-        HashMap<String, List<TabularVisualizationDTO.Field>> schema = new HashMap<>();
-        List<Field> fields = new ArrayList<TabularVisualizationDTO.Field>();
-        List<List<Object>> data = new ArrayList<ArrayList<TabularVisualizationDTO.Field>>()
-        for (Column column : mipEngineAlgorithmResultDTO.getColumns())
-        {
-            fields.add(new Field(column));
-            data.add(column.getData());
-        }
-        schema.put("fields", fields);
-        this.name = mipEngineAlgorithmResultDTO.getTitle();
-        this.profile = "tabular-data-resource";
-        this.schema = schema;
-        this.data = data;
-    }
-    @Data
-    @AllArgsConstructor
-    public static class Field {
-        private final String name;
-        private final String type;
-        public Field(Column column)
-        {
-            this.name = column.getName();
-            this.type = column.getType();
-        }
-    }
-}
-
diff --git a/src/main/java/eu/hbp/mip/services/ExperimentService.java b/src/main/java/eu/hbp/mip/services/ExperimentService.java
index 8ba133261..1a4403d76 100644
--- a/src/main/java/eu/hbp/mip/services/ExperimentService.java
+++ b/src/main/java/eu/hbp/mip/services/ExperimentService.java
@@ -390,18 +390,6 @@ public class ExperimentService {
         return experimentDatasets;
     }
 
-    private List<Object> convertMIPEngineToExaremeAlgorithmResult(
-            MIPEngineAlgorithmResultDTO mipEngineAlgorithmResultDTO
-    ) {
-        Map<String, Object> exaremeResultElement = new HashMap<>();
-        exaremeResultElement.put("data", new TabularVisualizationDTO(mipEngineAlgorithmResultDTO));
-        exaremeResultElement.put("type", "application/vnd.dataresource+json");
-
-        List<Object> exaremeResult = new ArrayList<>();
-        exaremeResult.add(exaremeResultElement);
-        return exaremeResult;
-    }
-
     /**
      * Creates an experiment and runs it on the background.
      * Uses the exareme or mip-engine engine that run an experiment synchronously.
@@ -527,9 +515,9 @@ public class ExperimentService {
 
         List<Object> exaremeAlgorithmResult = new ArrayList<>();
         if (requestResponseCode == 200) {
-            MIPEngineAlgorithmResultDTO mipEngineAlgorithmResultDTO =
-                    JsonConverters.convertJsonStringToObject(String.valueOf(requestResponseBody), MIPEngineAlgorithmResultDTO.class);
-            exaremeAlgorithmResult = convertMIPEngineToExaremeAlgorithmResult(mipEngineAlgorithmResultDTO);
+            Object mipEngineResult =
+                    JsonConverters.convertJsonStringToObject(String.valueOf(requestResponseBody), Object.class);
+            exaremeAlgorithmResult.add(mipEngineResult);
 
         } else if (requestResponseCode == 400) {
             Map<String, Object> exaremeAlgorithmResultElement = new HashMap<>();
@@ -543,6 +531,12 @@ public class ExperimentService {
             exaremeAlgorithmResultElement.put("type", "text/plain+user_error");
             exaremeAlgorithmResult.add(exaremeAlgorithmResultElement);
 
+        } else if (requestResponseCode == 461) {
+            Map<String, Object> exaremeAlgorithmResultElement = new HashMap<>();
+            exaremeAlgorithmResultElement.put("data", String.valueOf(requestResponseBody));
+            exaremeAlgorithmResultElement.put("type", "text/plain+error");
+            exaremeAlgorithmResult.add(exaremeAlgorithmResultElement);
+
         } else if (requestResponseCode == 500) {
             Map<String, Object> exaremeAlgorithmResultElement = new HashMap<>();
             exaremeAlgorithmResultElement.put("data",
@@ -551,6 +545,12 @@ public class ExperimentService {
             exaremeAlgorithmResultElement.put("type", "text/plain+error");
             exaremeAlgorithmResult.add(exaremeAlgorithmResultElement);
 
+        } else if (requestResponseCode == 512) {
+            Map<String, Object> exaremeAlgorithmResultElement = new HashMap<>();
+            exaremeAlgorithmResultElement.put("data", String.valueOf(requestResponseBody));
+            exaremeAlgorithmResultElement.put("type", "text/plain+error");
+            exaremeAlgorithmResult.add(exaremeAlgorithmResultElement);
+
         } else {
             logger.LogUserAction(
                     "MIP-Engine execution responded with an unexpected status code: " + requestResponseCode
-- 
GitLab