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