diff --git a/src/main/java/org/hbp/mip/controllers/MiningApi.java b/src/main/java/org/hbp/mip/controllers/MiningApi.java index 5378750433106b7cd4bf13774ad1daf14ac08a2d..cb1549019a9b29f8e1ae93d9d6baeccc25021470 100644 --- a/src/main/java/org/hbp/mip/controllers/MiningApi.java +++ b/src/main/java/org/hbp/mip/controllers/MiningApi.java @@ -4,8 +4,10 @@ package org.hbp.mip.controllers; -import com.google.gson.JsonParser; +import com.google.gson.*; import io.swagger.annotations.*; +import org.hbp.mip.model.algorithm.Algorithm; +import org.hbp.mip.model.algorithm.Catalog; import org.hbp.mip.utils.HTTPUtil; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; @@ -15,6 +17,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.UnknownHostException; @RestController @@ -22,6 +27,12 @@ import java.net.UnknownHostException; @Api(value = "/mining", description = "Forward mining API") public class MiningApi { + private static final String EXAREME_ALGO_JSON_FILE="data/exareme_algorithms.json"; + + private static final String ML_SOURCE = "ML"; + + private static final String EXAREME_SOURCE = "exareme"; + @Value("#{'${workflow.listMethodsUrl:http://hbps1.chuv.ch:8087/list-methods}'}") private String listMethodsUrl; @@ -37,9 +48,45 @@ public class MiningApi { public ResponseEntity<String> postMining( @RequestBody @ApiParam(value = "Query for the data mining", required = true) String query ) throws Exception { - // TODO : switch between sources - return null; + StringBuilder response = new StringBuilder(); + + int code = HTTPUtil.sendGet(listMethodsUrl, response); + if (code < 200 || code > 299) { + return new ResponseEntity<>(response.toString(), HttpStatus.valueOf(code)); + } + + Catalog catalog = new Gson().fromJson(response.toString(), Catalog.class); + for (Algorithm algo: catalog.getAlgorithms()) { + algo.setSource(ML_SOURCE); + } + + InputStream is = MiningApi.class.getClassLoader().getResourceAsStream(EXAREME_ALGO_JSON_FILE); + InputStreamReader isr = new InputStreamReader(is); + BufferedReader br = new BufferedReader(isr); + Algorithm exaremeGLR = new Gson().fromJson(br, Algorithm.class); + exaremeGLR.setSource(EXAREME_SOURCE); + catalog.getAlgorithms().add(exaremeGLR); + + String algoCode = new JsonParser().parse(query).getAsJsonObject() + .get("algorithm").getAsJsonObject() + .get("code").getAsString(); + + for(Algorithm algo : catalog.getAlgorithms()) + { + if (algo.getCode().equals(algoCode)) + { + if(algo.getSource().equals(ML_SOURCE)) { + return postMipMining(query); + } + else if(algo.getSource().equals(EXAREME_SOURCE)) + { + return postExaremeMining(algoCode, query); + } + } + } + + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } private ResponseEntity<String> postMipMining(String query) throws Exception { @@ -56,7 +103,7 @@ public class MiningApi { } - public ResponseEntity<String> postExaremeMining(String algo, String query) throws Exception { + private ResponseEntity<String> postExaremeMining(String algo, String query) throws Exception { try { /* Launch computation */