Skip to content
Snippets Groups Projects
Commit 9d495e55 authored by Ludovic Claude's avatar Ludovic Claude
Browse files

Define datasets to filter queries in a federation

Define datasets property for Mining query; trainingDatasets,
testingDatasets and validationDatasets for Experiment query
parent 18c7073a
No related branches found
No related tags found
No related merge requests found
......@@ -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")
......
......@@ -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) {
......
......@@ -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;
......
......@@ -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);
......
......@@ -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);
......
......@@ -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;
}
}
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
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment