diff --git a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java index d0e0db36aa029c95bebed143ff9755682dba899e..9e9c518b3f7f9b96be1030b7245bfa207d52c1be 100644 --- a/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java +++ b/src/main/java/eu/hbp/mip/controllers/ExperimentApi.java @@ -4,8 +4,6 @@ import akka.dispatch.OnSuccess; import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import eu.hbp.mip.akka.WokenClientController; import eu.hbp.mip.configuration.SecurityConfiguration; import eu.hbp.mip.model.Experiment; @@ -15,8 +13,6 @@ import eu.hbp.mip.repositories.ExperimentRepository; import eu.hbp.mip.repositories.ModelRepository; import eu.hbp.mip.utils.HTTPUtil; import eu.hbp.mip.utils.JSONUtil; -import eu.hbp.mip.woken.messages.query.MethodsQuery$; -import eu.hbp.mip.woken.messages.query.MethodsResponse; import eu.hbp.mip.woken.messages.query.QueryResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,17 +21,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.cache.annotation.Cacheable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import scala.concurrent.ExecutionContext; import scala.concurrent.Future; -import java.io.BufferedReader; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.util.Date; import java.util.Iterator; import java.util.List; @@ -61,10 +53,6 @@ public class ExperimentApi extends WokenClientController { .excludeFieldsWithoutExposeAnnotation() .create(); - private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json"; - - private static final String EXAREME_LR_ALGO = "WP_LINEAR_REGRESSION"; - @Value("#{'${services.exareme.miningExaremeUrl:http://hbps2.chuv.ch:9090/mining/query}'}") private String miningExaremeQueryUrl; @@ -174,7 +162,7 @@ public class ExperimentApi extends WokenClientController { } @ApiOperation(value = "list experiments", response = Experiment.class, responseContainer = "List") - @RequestMapping(value = "/mine", method = RequestMethod.GET, params = {"maxResultCount"}) + @RequestMapping(method = RequestMethod.GET, params = {"maxResultCount"}) public ResponseEntity<String> listExperiments( @ApiParam(value = "maxResultCount") @RequestParam int maxResultCount ) { @@ -198,28 +186,6 @@ public class ExperimentApi extends WokenClientController { return doListExperiments(false, modelSlug); } - @ApiOperation(value = "List available methods and validations", response = String.class) - @Cacheable(value = "methods", unless = "#result.getStatusCode().value()!=200") - @RequestMapping(path = "/methods", method = RequestMethod.GET) - public ResponseEntity listAvailableMethodsAndValidations() { - LOGGER.info("List available methods and validations"); - - return askWoken(MethodsQuery$.MODULE$, 10, r -> { - MethodsResponse result = (MethodsResponse) r; - - // >> Temporary : should return result.methods() in the future - JsonObject catalog = new JsonParser().parse(result.methods()).getAsJsonObject(); - InputStream is = ExperimentApi.class.getClassLoader().getResourceAsStream(EXAREME_ALGO_JSON_FILE); - InputStreamReader isr = new InputStreamReader(is); - BufferedReader br = new BufferedReader(isr); - JsonObject exaremeAlgo = new JsonParser().parse(br).getAsJsonObject(); - catalog.get("algorithms").getAsJsonArray().add(exaremeAlgo); - // << Temporary - - return ResponseEntity.ok(gson.toJson(catalog)); - }); - } - private ResponseEntity<String> doListExperiments( boolean mine, String modelSlug @@ -333,12 +299,12 @@ public class ExperimentApi extends WokenClientController { { experiment.setResult("Unsupported variables !"); } - finishExperimient(experiment); + finishExperiment(experiment); }).start(); // << Temporary } - private void finishExperimient(Experiment experiment) + private void finishExperiment(Experiment experiment) { experiment.setFinished(new Date()); experimentRepository.save(experiment); diff --git a/src/main/java/eu/hbp/mip/controllers/MethodsApi.java b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java new file mode 100644 index 0000000000000000000000000000000000000000..e7f81753d804e7964f9fc51617b199285268d1b9 --- /dev/null +++ b/src/main/java/eu/hbp/mip/controllers/MethodsApi.java @@ -0,0 +1,56 @@ +package eu.hbp.mip.controllers; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import eu.hbp.mip.akka.WokenClientController; +import eu.hbp.mip.woken.messages.query.MethodsQuery$; +import eu.hbp.mip.woken.messages.query.MethodsResponse; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; + +import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + +@RestController +@RequestMapping(value = "/methods", produces = {APPLICATION_JSON_VALUE}) +@Api(value = "/methods", description = "the methods API") +public class MethodsApi extends WokenClientController { + + private static final Logger LOGGER = LoggerFactory.getLogger(MethodsApi.class); + + private static final Gson gson = new Gson(); + + private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json"; + + @ApiOperation(value = "List available methods and validations", response = String.class) + @Cacheable(value = "methods", unless = "#result.getStatusCode().value()!=200") + @RequestMapping(method = RequestMethod.GET) + public ResponseEntity listAvailableMethodsAndValidations() { + LOGGER.info("List available methods and validations"); + + return askWoken(MethodsQuery$.MODULE$, 10, r -> { + MethodsResponse result = (MethodsResponse) r; + + // >> Temporary : should return result.methods() in the future + JsonObject catalog = new JsonParser().parse(result.methods()).getAsJsonObject(); + InputStream is = MethodsApi.class.getClassLoader().getResourceAsStream(EXAREME_ALGO_JSON_FILE); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + JsonObject exaremeAlgo = new JsonParser().parse(br).getAsJsonObject(); + catalog.get("algorithms").getAsJsonArray().add(exaremeAlgo); + // << Temporary + + return ResponseEntity.ok(gson.toJson(catalog)); + }); + } + +} diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java index 10619819da6908b7abef15c96b6140aee5234f6b..97d5943420ae4a47d6631e591079e21f80ffe358 100644 --- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java +++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java @@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.Cacheable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -39,6 +40,9 @@ public class MiningApi extends WokenClientController { @Autowired private SecurityConfiguration securityConfiguration; + @Value("#{'${services.query.miningExaremeUrl:http://hbps2.chuv.ch:9090/mining/query}'}") + public String queryUrl; + @ApiOperation(value = "Run an algorithm", response = String.class) @Cacheable(value = "mining", condition = "#query != null and #query.getAlgorithm().getCode() == 'histograms'", key = "#query.toString()", unless = "#result.getStatusCode().value()!=200") @RequestMapping(method = RequestMethod.POST) @@ -51,7 +55,7 @@ public class MiningApi extends WokenClientController { String algorithm = query.getAlgorithm().getCode(); String exaremeQuery = ExaremeQuery.query(query); - String url = ExaremeQuery.queryUrl + "/" + algorithm; + String url = queryUrl + "/" + algorithm; // TODO: Threaded call try { diff --git a/src/main/java/eu/hbp/mip/model/ExaremeQuery.java b/src/main/java/eu/hbp/mip/model/ExaremeQuery.java index 0e930ecbf8617794ade4bea5ab9ca38d06bc3d9f..fef81a5eab14240216c1063a3b14e248c7a17cd2 100644 --- a/src/main/java/eu/hbp/mip/model/ExaremeQuery.java +++ b/src/main/java/eu/hbp/mip/model/ExaremeQuery.java @@ -9,9 +9,6 @@ import java.util.List; public class ExaremeQuery { - @Value("#{'${services.query.miningExaremeUrl:http://hbps2.chuv.ch:9090/mining/query}'}") - public static String queryUrl; - private static final Gson gson = new Gson(); public static String query(MiningQuery query) {