From f65d30a798922644bf12c96bc2c58b84dee42b28 Mon Sep 17 00:00:00 2001
From: Manuel Spuhler <manuel.spuhler@chuv.ch>
Date: Tue, 21 May 2019 15:24:23 +0200
Subject: [PATCH] Exareme setup WIP

---
 .../eu/hbp/mip/controllers/ExperimentApi.java |   5 +-
 .../eu/hbp/mip/controllers/MethodsApi.java    |   2 +-
 .../java/eu/hbp/mip/model/Experiment.java     | 204 +-----------------
 .../eu/hbp/mip/model/ExperimentQuery.java     |   9 +
 4 files changed, 24 insertions(+), 196 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
index caa8ea97b..4f74bc820 100644
--- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java
@@ -76,11 +76,12 @@ public class ExperimentApi extends WokenClientController {
         experiment.setName(expQuery.getName());
         experiment.setCreatedBy(user);
         experiment.setModel(modelRepository.findOne(expQuery.getModel()));
+        experiment.setSource(expQuery.getSource());
         experimentRepository.save(experiment);
 
         LOGGER.info("Experiment saved");
 
-        if (!experiment.isExaremeAlgorithm()._1) {
+        if (experiment.getSource() != "exareme") {
             sendExperiment(experiment);
         } else {
             String algoCode = expQuery.getAlgorithms().get(0).getCode();
@@ -286,7 +287,7 @@ public class ExperimentApi extends WokenClientController {
         // >> Temporary: we should integrate exareme in a proper way in the future
         // this runs in the background. For future optimization: use a thread pool
         new Thread(() -> {
-            String query = experiment.computeExaremeQuery(params);
+            String query = ""; //experiment.computeExaremeQuery(params);
             String url = miningExaremeQueryUrl + "/" + algoCode;
 
             // Results are stored in the experiment object
diff --git a/src/main/java/eu/hbp/mip/controllers/MethodsApi.java b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
index 29e69e325..21d3b9f2f 100644
--- a/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java
@@ -26,7 +26,7 @@ public class MethodsApi extends WokenClientController {
     private static final Logger LOGGER = LoggerFactory.getLogger(MethodsApi.class);
 
     private static final Gson gson = new Gson();
-d
+
     @Value("#{'${services.exareme.algorithmsUrl:http://localhost:9090/mining/algorithms.json}'}")
     private String exaremeAlgorithmsUrl;
 
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 8f4dd0a34..c0a179909 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -19,7 +19,6 @@ import scala.collection.JavaConversions;
 import javax.persistence.*;
 import java.lang.reflect.Type;
 import java.util.*;
-import scala.Tuple2;
 
 /**
  * Created by habfast on 21/04/16.
@@ -28,12 +27,6 @@ import scala.Tuple2;
 @Table(name = "`experiment`")
 public class Experiment {
 
-    public static final String WP_K_MEANS = "K_MEANS";
-    public static final String WP_LINEAR_REGRESSION = "WP_LINEAR_REGRESSION";
-    public static final String WP_VARIABLES_HISTOGRAM = "WP_VARIABLES_HISTOGRAM";
-    public static final String WP_REGRESSION_TREE = "PIPELINE_ISOUP_REGRESSION_TREE_SERIALIZER";
-    public static final String WP_MODEL_TREE = "PIPELINE_ISOUP_MODEL_TREE_SERIALIZER";
-
     private static final Logger LOGGER = LoggerFactory.getLogger(Experiment.class);
 
     private static final Gson gson = new Gson();
@@ -89,6 +82,10 @@ public class Experiment {
     @Expose
     private boolean resultsViewed = false;
 
+    @Column(columnDefinition="TEXT")
+    @Expose
+    private String source;
+
     public Experiment() {
         /*
         *  Empty constructor is needed by Hibernate
@@ -137,159 +134,10 @@ public class Experiment {
                 validationsSeq, Option.empty());
     }
 
-    private String chainsParams(List<String> params, String operator) {
-        StringBuilder sb = new StringBuilder();
-        int i = 0;
-        for (String s : params)
-        {
-            i++;
-            sb.append(s);
-            if (i < params.size()) {
-                sb.append(operator);
-            }
-        }
-        return sb.toString();
-    }
-
-    public String computeExaremeQuery(List<AlgorithmParam> params) {
-        List<ExaremeQueryElement> queryElements = new LinkedList<>();
-
-        // parameters
-        String design = ""; // TODO: don't assign to a global
-        String nobuckets = "";
-
-        if (params != null) {
-            for (AlgorithmParam p : params)
-            {
-                ExaremeQueryElement paramEl = new ExaremeQueryElement();
-                paramEl.setName(p.getCode());
-                paramEl.setDesc("");
-                paramEl.setValue(p.getValue());
-                queryElements.add(paramEl);
-
-                if (p.getCode().equals("design")) {
-                    design = p.getValue();
-                }
-
-                if (p.getCode().equals("nobuckets")) {
-                    nobuckets = p.getValue();
-                }
-            }
-        }
-
-        List<String> variables = new ArrayList<>();
-        List<String> covariables = new ArrayList<>();
-        List<String> groupings = new ArrayList<>();
-
-        for (Variable var : model.getQuery().getVariables()) { variables.add(var.getCode()); }
-        for (Variable var : model.getQuery().getCovariables()) { covariables.add(var.getCode()); }
-        for (Variable var : model.getQuery().getGrouping()) { groupings.add(var.getCode()); }
-
-        // Set algorithm specific queries
-        String algoName = this.isExaremeAlgorithm()._2;
-        if (algoName.equals(WP_K_MEANS)) {
-            // columns
-            List<String> columns = variables;
-            columns.addAll(covariables);
-            columns.addAll(groupings);
-
-            ExaremeQueryElement columnsEl = new ExaremeQueryElement();
-            columnsEl.setName("columns");
-            columnsEl.setDesc("");
-            columnsEl.setValue(chainsParams(columns, ","));
-            queryElements.add(columnsEl);
-        } else if (algoName.equals(WP_LINEAR_REGRESSION)) {
-            List<String> nominals = covariables.isEmpty() ? groupings : covariables;
-            nominals.addAll(groupings);
-
-            String operator = design.equals("factorial") ? "*" : "+";
-
-            ExaremeQueryElement xEl = new ExaremeQueryElement();
-            xEl.setName("x");
-            xEl.setDesc("");
-            xEl.setValue(chainsParams(nominals, operator));
-            queryElements.add(xEl);
-
-            ExaremeQueryElement yEl = new ExaremeQueryElement();
-            yEl.setName("y");
-            yEl.setDesc("");
-            yEl.setValue(chainsParams(variables, ","));
-            queryElements.add(yEl);
-        } else if (algoName.equals(WP_VARIABLES_HISTOGRAM)) {
-            List<String> column1 = variables;
-            ExaremeQueryElement columnsEl = new ExaremeQueryElement();
-            columnsEl.setName("column1");
-            columnsEl.setDesc("");
-            columnsEl.setValue(chainsParams(column1, ","));
-            queryElements.add(columnsEl);
-
-            List<String> column2 = covariables.isEmpty() ? groupings : covariables;
-            ExaremeQueryElement columnsEl2 = new ExaremeQueryElement();
-            columnsEl2.setName("column2");
-            columnsEl2.setDesc("");
-            columnsEl2.setValue(chainsParams(column2, ","));
-            queryElements.add(columnsEl2);
-
-            if (!nobuckets.isEmpty()) {
-                ExaremeQueryElement columnsEl3 = new ExaremeQueryElement();
-                columnsEl3.setName("nobuckets");
-                columnsEl3.setDesc("");
-                columnsEl3.setValue(nobuckets);
-                queryElements.add(columnsEl3);
-            }
-        } else if (algoName.equals(WP_REGRESSION_TREE) || algoName.equals(WP_MODEL_TREE)) {
-            List<String> target = variables;
-            List<String> descriptive = covariables.isEmpty() ? groupings : covariables;
-            descriptive.addAll(groupings);
-
-            ExaremeQueryElement xEl = new ExaremeQueryElement();
-            xEl.setName("target_attributes");
-            xEl.setDesc("");
-            xEl.setValue(chainsParams(target, ","));
-            queryElements.add(xEl);
-
-            ExaremeQueryElement yEl = new ExaremeQueryElement();
-            yEl.setName("descriptive_attributes");
-            yEl.setDesc("");
-            yEl.setValue(chainsParams(descriptive, ","));
-            queryElements.add(yEl);
-        }
-
-        // datasets
-        StringBuilder datasets = new StringBuilder();
-        List<Variable> trainingDatasets = model.getQuery().getTrainingDatasets();
-        int j = 0;
-        for (Variable var : trainingDatasets)
-        {
-            j++;
-            datasets.append(var.getCode());
-            if (j < trainingDatasets.size() ) {
-                datasets.append(",");
-            }
-        }
-
-        ExaremeQueryElement datasetsEl = new ExaremeQueryElement();
-        datasetsEl.setName("dataset");
-        datasetsEl.setDesc("");
-        // datasetsEl.setValue("adni,ppmi,edsd,fbf,clm");
-        datasetsEl.setValue(datasets.toString());
-        queryElements.add(datasetsEl);
-
-        // filter
-        String filter = model.getQuery().getFilters();
-        ExaremeQueryElement filterEl = new ExaremeQueryElement();
-        filterEl.setName("filter");
-        filterEl.setDesc("");
-        filterEl.setValue(filter);
-        queryElements.add(filterEl);
-
-        return gson.toJson(queryElements);
-    }
-
     public JsonObject jsonify() {
         JsonObject exp = gson.toJsonTree(this).getAsJsonObject();
         JsonParser parser = new JsonParser();
-        Tuple2<Boolean, String> isExaremeAlgorithm = this.isExaremeAlgorithm();
+        Boolean isExaremeAlgorithm = this.getSource() == "exareme";
 
         if (this.algorithms != null)
         {
@@ -308,7 +156,7 @@ public class Experiment {
         if (this.result != null && !this.hasServerError) {
             exp.remove("result");
 
-            if (!isExaremeAlgorithm._1) {
+            if (!isExaremeAlgorithm) {
                 JsonElement jsonResult = parser.parse(this.result);
                 exp.add("result", jsonResult);
             } else {
@@ -331,18 +179,6 @@ public class Experiment {
                 JsonObject jsonData = tryJson;
                 jsonObjectResult.add("data", jsonData);
 
-                // add mime-type
-                String algo = isExaremeAlgorithm._2;
-                if (jsonData.get("Error") != null) {
-                    jsonObjectResult.add("type", new JsonPrimitive("text/plain+error"));
-                } else if (algo.equals( WP_K_MEANS) || algo.equals( WP_VARIABLES_HISTOGRAM)) {
-                    jsonObjectResult.add("type", new JsonPrimitive("application/vnd.highcharts+json"));
-                } else if (algo.equals(WP_LINEAR_REGRESSION)) {
-                    jsonObjectResult.add("type", new JsonPrimitive("application/vnd.dataresource+json"));
-                } else if (algo.equals(WP_REGRESSION_TREE) || algo.equals(WP_MODEL_TREE)) {
-                    jsonObjectResult.add("type", new JsonPrimitive("application/vnd.visjs+javascript"));
-                }
-
                 jsonArrayResult.add(jsonObjectResult);
 
                 exp.add("result", jsonArrayResult);
@@ -456,29 +292,11 @@ public class Experiment {
         this.shared = shared;
     }
 
-    public Tuple2<Boolean, String> isExaremeAlgorithm() {
-        Boolean isExareme = false;
-        String algorithm = "";
-
-        String algorithms = this.algorithms;
-
-        if (algorithms.contains(WP_K_MEANS)) {
-            isExareme = true;
-            algorithm = WP_K_MEANS;
-        } else if (algorithms.contains(WP_LINEAR_REGRESSION)) {
-            isExareme = true;
-            algorithm = WP_LINEAR_REGRESSION;
-        } else if (algorithms.contains(WP_VARIABLES_HISTOGRAM)) {
-            isExareme = true;
-            algorithm = WP_VARIABLES_HISTOGRAM;
-        } else if (algorithms.contains(WP_REGRESSION_TREE)) {
-            isExareme = true;
-            algorithm = WP_REGRESSION_TREE;
-        } else if (algorithms.contains(WP_MODEL_TREE)) {
-            isExareme = true;
-            algorithm = WP_MODEL_TREE;
-        }
+    public String getSource() {
+        return this.source;
+    }
 
-        return new Tuple2<Boolean, String>(isExareme, algorithm);
+    public void setSource(String source) {
+        this.source = source;
     }
 }
diff --git a/src/main/java/eu/hbp/mip/model/ExperimentQuery.java b/src/main/java/eu/hbp/mip/model/ExperimentQuery.java
index 333751c43..2e7e6fd81 100644
--- a/src/main/java/eu/hbp/mip/model/ExperimentQuery.java
+++ b/src/main/java/eu/hbp/mip/model/ExperimentQuery.java
@@ -9,6 +9,7 @@ public class ExperimentQuery {
 
     private String name;
     private String model;
+    private String source;
     private List<ExperimentValidator> validations;
     private List<Algorithm> algorithms;
 
@@ -28,6 +29,14 @@ public class ExperimentQuery {
         this.model = model;
     }
 
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
     public List<ExperimentValidator> getValidations() {
         return validations;
     }
-- 
GitLab