From 76e497fd5404d86d61864f826571f392d96c4431 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 8 Feb 2018 12:59:00 +0100 Subject: [PATCH] rest API for units --- .../map/kinetics/SbmlUnitTypeFactor.java | 4 + .../models/units/UnitsController.java | 45 +++++++++++ .../projects/models/units/UnitsRestImpl.java | 75 +++++++++++++++++++ .../resources/applicationContext-rest.xml | 1 + 4 files changed, 125 insertions(+) create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsController.java create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsRestImpl.java diff --git a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java index b718204ce9..f1d6f1975b 100644 --- a/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java +++ b/model/src/main/java/lcsb/mapviewer/model/map/kinetics/SbmlUnitTypeFactor.java @@ -124,4 +124,8 @@ public class SbmlUnitTypeFactor implements Serializable { return new SbmlUnitTypeFactor(this); } + public int getId() { + return id; + } + } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsController.java new file mode 100644 index 0000000000..c55f3b092c --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsController.java @@ -0,0 +1,45 @@ +package lcsb.mapviewer.api.projects.models.units; + +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 UnitsController extends BaseController { + @Autowired + private UnitsRestImpl unitController; + + @RequestMapping(value = "/projects/{projectId}/models/{modelId}/units/{unitId}", method = { + RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public Map<String, Object> getUnit(// + @PathVariable(value = "projectId") String projectId, // + @PathVariable(value = "modelId") String modelId, // + @PathVariable(value = "unitId") String unitId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws QueryException, SecurityException { + return unitController.getUnit(projectId, modelId, token, unitId); + } + + @RequestMapping(value = "/projects/{projectId}/models/{modelId}/units/", method = { + RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<Map<String, Object>> getUnits(// + @PathVariable(value = "projectId") String projectId, // + @PathVariable(value = "modelId") String modelId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws QueryException, SecurityException { + return unitController.getUnits(projectId, modelId, token); + } + +} \ No newline at end of file diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsRestImpl.java new file mode 100644 index 0000000000..887b551fbe --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/units/UnitsRestImpl.java @@ -0,0 +1,75 @@ +package lcsb.mapviewer.api.projects.models.units; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +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.SbmlUnit; +import lcsb.mapviewer.model.map.kinetics.SbmlUnitTypeFactor; +import lcsb.mapviewer.model.map.model.Model; +import lcsb.mapviewer.services.SecurityException; + +@Transactional(value = "txManager") +public class UnitsRestImpl extends BaseRestImpl { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private Logger logger = Logger.getLogger(UnitsRestImpl.class); + + public Map<String, Object> getUnit(String projectId, String modelId, String token, String unitId) + throws SecurityException, QueryException { + List<Model> models = getModels(projectId, modelId, token); + int id = Integer.valueOf(unitId); + for (Model model : models) { + for (SbmlUnit unit : model.getUnits()) { + if (unit.getId() == id) { + return unitToMap(unit); + } + } + } + throw new ObjectNotFoundException("Unit with given id doesn't exist"); + } + + private Map<String, Object> unitToMap(SbmlUnit unit) { + Map<String, Object> result = new HashMap<>(); + result.put("id", unit.getId()); + result.put("unitId", unit.getUnitId()); + result.put("name", unit.getName()); + List<Map<String, Object>> factors = new ArrayList<>(); + for (SbmlUnitTypeFactor factor : unit.getUnitTypeFactors()) { + factors.add(factorToMap(factor)); + } + result.put("unitTypeFactors", factors); + return result; + } + + private Map<String, Object> factorToMap(SbmlUnitTypeFactor factor) { + Map<String, Object> result = new HashMap<>(); + result.put("id", factor.getId()); + result.put("exponent", factor.getExponent()); + result.put("multiplier", factor.getMultiplier()); + result.put("scale", factor.getScale()); + result.put("unitType", factor.getUnitType()); + return result; + } + + public List<Map<String, Object>> getUnits(String projectId, String modelId, String token) throws SecurityException { + List<Map<String, Object>> result = new ArrayList<>(); + List<Model> models = getModels(projectId, modelId, token); + for (Model model : models) { + for (SbmlUnit unit : model.getUnits()) { + result.add(unitToMap(unit)); + } + } + return result; + } +} diff --git a/rest-api/src/main/resources/applicationContext-rest.xml b/rest-api/src/main/resources/applicationContext-rest.xml index 8393530a34..fac20694fa 100644 --- a/rest-api/src/main/resources/applicationContext-rest.xml +++ b/rest-api/src/main/resources/applicationContext-rest.xml @@ -23,6 +23,7 @@ <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="UnitsRestImpl" class="lcsb.mapviewer.api.projects.models.units.UnitsRestImpl"/> <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