From 02dbfaf799253408da0fa8863027a62fa6767bab Mon Sep 17 00:00:00 2001 From: Ludovic Claude <ludovic.claude@laposte.net> Date: Fri, 16 Mar 2018 00:22:49 +0100 Subject: [PATCH] Use ApplicationStartupEvent to connect to Woken and fill the local db --- src/main/java/eu/hbp/mip/StartupTasks.java | 43 +++++++++++++++++++ .../eu/hbp/mip/controllers/DatasetsApi.java | 29 +------------ 2 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 src/main/java/eu/hbp/mip/StartupTasks.java diff --git a/src/main/java/eu/hbp/mip/StartupTasks.java b/src/main/java/eu/hbp/mip/StartupTasks.java new file mode 100644 index 000000000..880603a9c --- /dev/null +++ b/src/main/java/eu/hbp/mip/StartupTasks.java @@ -0,0 +1,43 @@ +package eu.hbp.mip; + +import eu.hbp.mip.controllers.DatasetsApi; +import eu.hbp.mip.model.Variable; +import eu.hbp.mip.repositories.VariableRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +@Component +public class StartupTasks implements ApplicationListener<ApplicationReadyEvent> { + + private static final Logger LOGGER = LoggerFactory.getLogger(StartupTasks.class); + + @Autowired + private VariableRepository variableRepository; + + @Autowired + private DatasetsApi datasetsApi; + + @Override + public void onApplicationEvent(ApplicationReadyEvent event) { + // Pre-fill the local variable repository with the list of datasets, interpreted here as variables + // (a bit like a categorical variable can be split into a set of variables (a.k.a one hot encoding in Data science) ) + try { + for (ch.chuv.lren.woken.messages.datasets.Dataset dataset: datasetsApi.fetchDatasets()) { + final String code = dataset.dataset().code(); + Variable v = variableRepository.findOne(code); + if (v == null) { + v = new Variable(code); + variableRepository.save(v); + } + } + } catch (Exception e) { + LOGGER.error("Cannot initialise the variable repository. Is the connection to Woken working?", e); + } + + LOGGER.info("MIP Portal backend is ready!"); + } +} diff --git a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java index f4f67edd9..28d101a18 100644 --- a/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java +++ b/src/main/java/eu/hbp/mip/controllers/DatasetsApi.java @@ -7,17 +7,13 @@ package eu.hbp.mip.controllers; import ch.chuv.lren.woken.messages.datasets.DatasetsQuery; import ch.chuv.lren.woken.messages.datasets.DatasetsResponse; -import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import eu.hbp.mip.akka.WokenClientController; import eu.hbp.mip.model.Dataset; -import eu.hbp.mip.model.Variable; -import eu.hbp.mip.repositories.VariableRepository; import io.swagger.annotations.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; @@ -25,10 +21,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import scala.Option; -import javax.annotation.PostConstruct; - import java.util.Set; -import java.util.stream.Stream; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; @@ -39,24 +32,6 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; public class DatasetsApi extends WokenClientController { private static final Logger LOGGER = LoggerFactory.getLogger(DatasetsApi.class); - private static final Gson gson = new Gson(); - - @Autowired - private VariableRepository variableRepository; - - @PostConstruct - public void init() throws Exception { - // Pre-fill the local variable repository with the list of datasets, interpreted here as variables - // (a bit like a categorical variable can be split into a set of variables (a.k.a one hot encoding in Data science) ) - for (ch.chuv.lren.woken.messages.datasets.Dataset dataset: fetchDatasets()) { - final String code = dataset.dataset().code(); - Variable v = variableRepository.findOne(code); - if (v == null) { - v = new Variable(code); - variableRepository.save(v); - } - } - } @ApiOperation(value = "Get dataset list", response = Dataset.class, responseContainer = "List") @RequestMapping(method = RequestMethod.GET) @@ -66,7 +41,7 @@ public class DatasetsApi extends WokenClientController { try { JsonArray datasets = new JsonArray(); - Stream<JsonObject> values = fetchDatasets().stream().map(d -> { + fetchDatasets().stream().map(d -> { JsonObject jsObject = new JsonObject(); jsObject.addProperty("code", d.dataset().code()); jsObject.addProperty("label", d.label()); @@ -83,7 +58,7 @@ public class DatasetsApi extends WokenClientController { } - private Set<ch.chuv.lren.woken.messages.datasets.Dataset> fetchDatasets() throws Exception { + public Set<ch.chuv.lren.woken.messages.datasets.Dataset> fetchDatasets() throws Exception { DatasetsResponse result = askWoken(new DatasetsQuery(Option.empty()), 30); return scala.collection.JavaConversions.setAsJavaSet(result.datasets()); } -- GitLab