diff --git a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java index 3c71e92602b3e6a8569883af3987c6065817f054..e14a623cf58f50f92f8e672375a8cc278c44c6fb 100644 --- a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java +++ b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java @@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.RestController; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; +// TODO: deprecate this + @RestController @RequestMapping(value = "/datasets", produces = {APPLICATION_JSON_VALUE}) @Api(value = "/datasets", description = "the datasets API") diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java index 6245ed42a849c38b0c223439d52af64a38ab37eb..10619819da6908b7abef15c96b6140aee5234f6b 100644 --- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java +++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java @@ -77,25 +77,26 @@ public class MiningApi extends WokenClientController { LOGGER.error("Cannot receive algorithm result from exareme" + e.getMessage(), e); return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE).build(); } + } else { + + return askWokenQuery(query.prepareQuery(user.getUsername()), 120, + result -> { + if (result.error().nonEmpty()) { + LOGGER.error(result.error().get()); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"error\":\"" + result.error().get() + "\"}"); + } else { + Mining mining = new Mining( + result.jobId(), + result.node(), + result.algorithm(), + result.shape(), + Date.from(result.timestamp().toInstant()), + result.data().get().compactPrint() + ); + return ResponseEntity.ok(gson.toJson(mining.jsonify())); + } + }); } - - return askWokenQuery(query.prepareQuery(user.getUsername()), 120, - result -> { - if (result.error().nonEmpty()) { - LOGGER.error(result.error().get()); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"error\":\"" + result.error().get() + "\"}"); - } else { - Mining mining = new Mining( - result.jobId(), - result.node(), - result.algorithm(), - result.shape(), - Date.from(result.timestamp().toInstant()), - result.data().get().compactPrint() - ); - return ResponseEntity.ok(gson.toJson(mining.jsonify())); - } - }); } private static boolean isExaremeAlgo(eu.hbp.mip.model.MiningQuery query) { diff --git a/src/main/java/eu/hbp/mip/model/Dataset.java b/src/main/java/eu/hbp/mip/model/Dataset.java index 69fc5ed9902450a5bb03c84f7304311a1a21fdb7..d7d1e486a42ffebfadcdeead915652747ce52e74 100644 --- a/src/main/java/eu/hbp/mip/model/Dataset.java +++ b/src/main/java/eu/hbp/mip/model/Dataset.java @@ -13,6 +13,8 @@ import java.util.Date; import java.util.LinkedList; import java.util.List; +// TODO: deprecate + @Entity @Table(name = "`dataset`") @ApiModel @@ -24,6 +26,7 @@ public class Dataset { private Date date = null; + // Aka covariables @ElementCollection @CollectionTable(name = "dataset_header", joinColumns = @JoinColumn(name = "dataset_code")) private List<String> header = new LinkedList<>(); @@ -36,6 +39,7 @@ public class Dataset { @CollectionTable(name = "dataset_variable", joinColumns = @JoinColumn(name = "dataset_code")) private List<String> variable = new LinkedList<>(); + // TODO: @Transient @JsonProperty(access = JsonProperty.Access.READ_ONLY) private Object data = null; diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java index c84c21b1a6983549e2a13c13b8edba5b4001bf67..fff0611d7f94321d5842c9fdd3ed9eb55a5a6349 100644 --- a/src/main/java/eu/hbp/mip/model/Experiment.java +++ b/src/main/java/eu/hbp/mip/model/Experiment.java @@ -119,11 +119,10 @@ public class Experiment { scala.collection.immutable.List<AlgorithmSpec> algorithmsSeq = JavaConversions.asScalaBuffer(algorithms).toList(); scala.collection.immutable.List<ValidationSpec> validationsSeq = JavaConversions.asScalaBuffer(validations).toList(); - // TODO - set values WokenConversions conv = new WokenConversions(); - scala.collection.immutable.Set<DatasetId> trainingDatasets = conv.toDatasets(""); - scala.collection.immutable.Set<DatasetId> testingDatasets = conv.toDatasets(""); - scala.collection.immutable.Set<DatasetId> validationDatasets = conv.toDatasets(""); + scala.collection.immutable.Set<DatasetId> trainingDatasets = conv.toDatasets(model.getQuery().getTrainingDatasets()); + scala.collection.immutable.Set<DatasetId> testingDatasets = conv.toDatasets(model.getQuery().getTestingDatasets()); + scala.collection.immutable.Set<DatasetId> validationDatasets = conv.toDatasets(model.getQuery().getValidationDatasets()); String filtersJson = model.getQuery().getFilters(); Option<FilterRule> filters = conv.toFilterRule(filtersJson); diff --git a/src/main/java/eu/hbp/mip/model/MiningQuery.java b/src/main/java/eu/hbp/mip/model/MiningQuery.java index 0b0c9a76fa4ab979267777bde4305974e05a3b70..49d8cadb2b743ebe532726ca208808d01d458b8d 100644 --- a/src/main/java/eu/hbp/mip/model/MiningQuery.java +++ b/src/main/java/eu/hbp/mip/model/MiningQuery.java @@ -29,6 +29,7 @@ public class MiningQuery { this.variables = new LinkedList<>(); this.covariables = new LinkedList<>(); this.grouping = new LinkedList<>(); + this.datasets = new LinkedList<>(); this.filters = ""; } @@ -99,9 +100,8 @@ public class MiningQuery { TypesConvert.variablesToIdentifiers(getGrouping()); UserId userId = new UserId(user); - // TODO - set values WokenConversions conv = new WokenConversions(); - scala.collection.immutable.Set<DatasetId> datasets = conv.toDatasets(""); + scala.collection.immutable.Set<DatasetId> datasets = conv.toDatasets(getDatasets()); String filtersJson = getFilters(); Option<FilterRule> filters = conv.toFilterRule(filtersJson); diff --git a/src/main/java/eu/hbp/mip/model/Query.java b/src/main/java/eu/hbp/mip/model/Query.java index fd12294288b8fa50149ecb603f4bd1acb3d8715d..5d372447da74b2194b4b6605795ee015c816112c 100644 --- a/src/main/java/eu/hbp/mip/model/Query.java +++ b/src/main/java/eu/hbp/mip/model/Query.java @@ -24,8 +24,6 @@ public class Query { @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id = null; - private String request = null; - @ManyToMany @JoinTable(name = "query_variable", joinColumns = { @JoinColumn(name = "id", nullable = false, updatable = false) }, @@ -47,6 +45,27 @@ public class Query { nullable = false, updatable = false) }) private List<Variable> grouping = new LinkedList<>(); + @ManyToMany + @JoinTable(name = "query_training_datasets", joinColumns = { + @JoinColumn(name = "id", nullable = false, updatable = false) }, + inverseJoinColumns = { @JoinColumn(name = "code", + nullable = false, updatable = false) }) + private List<Variable> trainingDatasets = new LinkedList<>(); + + @ManyToMany + @JoinTable(name = "query_testing_datasets", joinColumns = { + @JoinColumn(name = "id", nullable = false, updatable = false) }, + inverseJoinColumns = { @JoinColumn(name = "code", + nullable = false, updatable = false) }) + private List<Variable> testingDatasets = new LinkedList<>(); + + @ManyToMany + @JoinTable(name = "query_validation_datasets", joinColumns = { + @JoinColumn(name = "id", nullable = false, updatable = false) }, + inverseJoinColumns = { @JoinColumn(name = "code", + nullable = false, updatable = false) }) + private List<Variable> validationDatasets = new LinkedList<>(); + @Column(columnDefinition = "text") private String filters = ""; @@ -67,6 +86,7 @@ public class Query { } + @JsonProperty("variables") public List<Variable> getVariables() { return variables; } @@ -95,21 +115,39 @@ public class Query { this.grouping = grouping; } + @JsonProperty("trainingDatasets") + public List<Variable> getTrainingDatasets() { + return trainingDatasets; + } - public String getFilters() { - return filters; + public void setTrainingDatasets(List<Variable> trainingDatasets) { + this.trainingDatasets = trainingDatasets; } - public void setFilters(String filters) { - this.filters = filters; + @JsonProperty("testingDatasets") + public List<Variable> getTestingDatasets() { + return testingDatasets; + } + + public void setTestingDatasets(List<Variable> testingDatasets) { + this.testingDatasets = testingDatasets; } - public String getRequest() { - return request; + @JsonProperty("validationDatasets") + public List<Variable> getValidationDatasets() { + return validationDatasets; } - public void setRequest(String request) { - this.request = request; + public void setValidationDatasets(List<Variable> validationDatasets) { + this.validationDatasets = validationDatasets; + } + + public String getFilters() { + return filters; + } + + public void setFilters(String filters) { + this.filters = filters; } } diff --git a/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala index 5960326ec8df4f3596aacdcc7cf60ef14e138726..abdaa5d66f52446e5bcadb6d7e8fd99c09ef896b 100644 --- a/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala +++ b/src/main/scala/ch.chuv.lren/mip/portal/WokenConversions.scala @@ -1,11 +1,14 @@ package ch.chuv.lren.mip.portal +import eu.hbp.mip.model.Variable import eu.hbp.mip.woken.messages.datasets.DatasetId import eu.hbp.mip.woken.messages.query.filters.FilterRule import eu.hbp.mip.woken.messages.query.filters.queryFiltersProtocol._ import org.springframework.stereotype.Component import spray.json._ +import scala.collection.JavaConverters._ + @Component class WokenConversions { @@ -14,9 +17,7 @@ class WokenConversions { case _ => Some(json).map(_.parseJson.convertTo[FilterRule]) } - def toDatasets(commaSeparatedSets: String): Set[DatasetId] = commaSeparatedSets match { - case "" => Set() - case _ => commaSeparatedSets.split(",").map(DatasetId).toSet - } + def toDatasets(datasets: java.util.List[Variable]): Set[DatasetId] = + datasets.asScala.map(v => DatasetId(v.getCode)).toSet }