From cdf52aecc9612eb8c85aed9af546bc9e96a51c13 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 8 Feb 2018 12:49:14 +0100 Subject: [PATCH] rest API for sbml functions --- .../model/map/kinetics/SbmlParameter.java | 4 + .../model/map/kinetics/SbmlUnit.java | 4 + rest-api/jsbml.log | 1 - .../models/functions/FunctionsRestImpl.java | 1 + .../parameters/ParametersController.java | 45 +++++++++ .../models/parameters/ParametersRestImpl.java | 95 +++++++++++++++++++ .../resources/applicationContext-rest.xml | 1 + 7 files changed, 150 insertions(+), 1 deletion(-) delete mode 100644 rest-api/jsbml.log create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersController.java create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersRestImpl.java diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java index acd4e885ec..aa27e7764a 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlParameter.java @@ -115,4 +115,8 @@ public class SbmlParameter implements Serializable, SbmlArgument { return getParameterId(); } + public int getId() { + return id; + } + } diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java index f1a1339c6a..07c8f01aa9 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnit.java @@ -121,4 +121,8 @@ public class SbmlUnit implements Serializable { return new SbmlUnit(this); } + public int getId() { + return id; + } + } diff --git a/rest-api/jsbml.log b/rest-api/jsbml.log deleted file mode 100644 index 66a05c7b2e..0000000000 --- a/rest-api/jsbml.log +++ /dev/null @@ -1 +0,0 @@ -2018-02-08 12:13:41,962 INFO o.r.Reflections [main] Reflections took 57 ms to scan 1 urls, producing 34 keys and 433 values diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java index 94dd0f42d3..975151ba92 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/functions/FunctionsRestImpl.java @@ -21,6 +21,7 @@ public class FunctionsRestImpl extends BaseRestImpl { /** * Default class logger. */ + @SuppressWarnings("unused") private Logger logger = Logger.getLogger(FunctionsRestImpl.class); public Map<String, Object> getFunction(String projectId, String modelId, String token, String functionId) diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersController.java new file mode 100644 index 0000000000..4316a71f8b --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersController.java @@ -0,0 +1,45 @@ +package lcsb.mapviewer.api.projects.models.parameters; + +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.CookieValue; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import lcsb.mapviewer.api.BaseController; +import lcsb.mapviewer.api.QueryException; +import lcsb.mapviewer.common.Configuration; +import lcsb.mapviewer.services.SecurityException; + +@RestController +public class ParametersController extends BaseController { + @Autowired + private ParametersRestImpl parameterController; + + @RequestMapping(value = "/projects/{projectId}/models/{modelId}/parameters/{parameterId}", method = { + RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public Map<String, Object> getParameter(// + @PathVariable(value = "projectId") String projectId, // + @PathVariable(value = "modelId") String modelId, // + @PathVariable(value = "parameterId") String parameterId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws QueryException, SecurityException { + return parameterController.getParameter(projectId, modelId, token, parameterId); + } + + @RequestMapping(value = "/projects/{projectId}/models/{modelId}/parameters/", method = { + RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<Map<String, Object>> getParameters(// + @PathVariable(value = "projectId") String projectId, // + @PathVariable(value = "modelId") String modelId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws QueryException, SecurityException { + return parameterController.getParameters(projectId, modelId, token); + } + +} \ No newline at end of file diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersRestImpl.java new file mode 100644 index 0000000000..c76f1bed4e --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/parameters/ParametersRestImpl.java @@ -0,0 +1,95 @@ +package lcsb.mapviewer.api.projects.models.parameters; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.log4j.Logger; +import org.springframework.transaction.annotation.Transactional; + +import lcsb.mapviewer.api.BaseRestImpl; +import lcsb.mapviewer.api.ObjectNotFoundException; +import lcsb.mapviewer.api.QueryException; +import lcsb.mapviewer.model.map.kinetics.SbmlParameter; +import lcsb.mapviewer.model.map.model.Model; +import lcsb.mapviewer.model.map.reaction.Reaction; +import lcsb.mapviewer.services.SecurityException; + +@Transactional(value = "txManager") +public class ParametersRestImpl extends BaseRestImpl { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private Logger logger = Logger.getLogger(ParametersRestImpl.class); + + public Map<String, Object> getParameter(String projectId, String modelId, String token, String parameterId) + throws SecurityException, QueryException { + Set<SbmlParameter> globalParameters = getGlobalParametersFromProject(projectId, modelId, token); + Set<SbmlParameter> parameters = getParametersFromProject(projectId, modelId, token); + int id = Integer.valueOf(parameterId); + for (SbmlParameter parameter : parameters) { + if (parameter.getId() == id) { + return parameterToMap(parameter, globalParameters.contains(parameter)); + } + } + throw new ObjectNotFoundException("Parameter with given id doesn't exist"); + } + + private Set<SbmlParameter> getParametersFromProject(String projectId, String modelId, String token) + throws SecurityException { + List<Model> models = getModels(projectId, modelId, token); + Set<SbmlParameter> parameters = new HashSet<>(); + + for (Model model : models) { + parameters.addAll(model.getParameters()); + for (Reaction reaction : model.getReactions()) { + if (reaction.getKinetics() != null) { + parameters.addAll(reaction.getKinetics().getParameters()); + } + } + } + return parameters; + } + + private Set<SbmlParameter> getGlobalParametersFromProject(String projectId, String modelId, String token) + throws SecurityException { + List<Model> models = getModels(projectId, modelId, token); + Set<SbmlParameter> parameters = new HashSet<>(); + + for (Model model : models) { + parameters.addAll(model.getParameters()); + } + return parameters; + } + + private Map<String, Object> parameterToMap(SbmlParameter parameter, boolean global) { + Map<String, Object> result = new HashMap<>(); + result.put("id", parameter.getId()); + result.put("parameterId", parameter.getParameterId()); + result.put("name", parameter.getName()); + result.put("value", parameter.getValue()); + result.put("global", global); + if (parameter.getUnits() != null) { + result.put("unitsId", parameter.getUnits().getId()); + } else { + result.put("unitsId", null); + } + return result; + } + + public List<Map<String, Object>> getParameters(String projectId, String modelId, String token) + throws SecurityException { + List<Map<String, Object>> result = new ArrayList<>(); + Set<SbmlParameter> globalParameters = getGlobalParametersFromProject(projectId, modelId, token); + Set<SbmlParameter> parameters = getParametersFromProject(projectId, modelId, token); + for (SbmlParameter parameter : parameters) { + result.add(parameterToMap(parameter, globalParameters.contains(parameter))); + } + return result; + } +} diff --git a/rest-api/src/main/resources/applicationContext-rest.xml b/rest-api/src/main/resources/applicationContext-rest.xml index 460411f87d..8393530a34 100644 --- a/rest-api/src/main/resources/applicationContext-rest.xml +++ b/rest-api/src/main/resources/applicationContext-rest.xml @@ -22,6 +22,7 @@ <bean id="ChemicalRestImpl" class="lcsb.mapviewer.api.projects.chemicals.ChemicalRestImpl"/> <bean id="ElementsRestImpl" class="lcsb.mapviewer.api.projects.models.bioEntities.elements.ElementsRestImpl"/> <bean id="FunctionsRestImpl" class="lcsb.mapviewer.api.projects.models.functions.FunctionsRestImpl"/> + <bean id="ParametersRestImpl" class="lcsb.mapviewer.api.projects.models.parameters.ParametersRestImpl"/> <bean id="DrugRestImpl" class="lcsb.mapviewer.api.projects.drugs.DrugRestImpl"/> <bean id="MiRnaRestImpl" class="lcsb.mapviewer.api.projects.mirnas.MiRnaRestImpl"/> <bean id="OverlayRestImpl" class="lcsb.mapviewer.api.projects.overlays.OverlayRestImpl"/> -- GitLab