From 8e33399aa7c96e343642b3a474b7bdd2d60cce08 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 8 Aug 2017 13:50:22 +0200 Subject: [PATCH] info about models is returned when accessing models (not a project) --- .../java/lcsb/mapviewer/api/BaseRestImpl.java | 22 ++++++- .../api/projects/ProjectMetaData.java | 39 ------------- .../api/projects/ProjectRestImpl.java | 11 +--- .../api/projects/models/ModelController.java | 40 +++++++++++++ .../projects/{ => models}/ModelMetaData.java | 2 +- .../api/projects/models/ModelRestImpl.java | 58 +++++++++++++++++++ .../publications/PublicationsRestImpl.java | 3 +- .../api/projects/ModelMetaDataTest.java | 2 +- 8 files changed, 126 insertions(+), 51 deletions(-) create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java rename rest-api/src/main/java/lcsb/mapviewer/api/projects/{ => models}/ModelMetaData.java (94%) create mode 100644 rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java index 56071ddde9..ac78d8b8d3 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java @@ -26,6 +26,7 @@ import lcsb.mapviewer.model.map.reaction.Reaction; import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.services.SecurityException; import lcsb.mapviewer.services.interfaces.IModelService; +import lcsb.mapviewer.services.interfaces.IProjectService; import lcsb.mapviewer.services.interfaces.IUserService; import lcsb.mapviewer.services.search.ElementMatcher; import lcsb.mapviewer.services.search.data.ElementIdentifier.ElementIdentifierType; @@ -33,7 +34,7 @@ import lcsb.mapviewer.services.view.AnnotationView; @Transactional(value = "txManager") public abstract class BaseRestImpl { - + /** * Default class logger. */ @@ -42,6 +43,9 @@ public abstract class BaseRestImpl { @Autowired private IModelService modelService; + @Autowired + private IProjectService projectService; + @Autowired private IUserService userService; @@ -262,4 +266,20 @@ public abstract class BaseRestImpl { } } + /** + * @return the projectService + * @see #projectService + */ + public IProjectService getProjectService() { + return projectService; + } + + /** + * @param projectService the projectService to set + * @see #projectService + */ + public void setProjectService(IProjectService projectService) { + this.projectService = projectService; + } + } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java index 8b4e0560e0..58365826a5 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java @@ -47,10 +47,6 @@ public class ProjectMetaData implements Serializable { */ private String description; - private ModelMetaData map; - - private Integer publicationCount; - /** * List of overview images attached to this model. */ @@ -169,23 +165,6 @@ public class ProjectMetaData implements Serializable { this.projectId = projectId; } - /** - * @return the map - * @see #map - */ - public ModelMetaData getMap() { - return map; - } - - /** - * @param map - * the map to set - * @see #map - */ - public void setMap(ModelMetaData map) { - this.map = map; - } - /** * @return the idObject * @see #idObject @@ -236,22 +215,4 @@ public class ProjectMetaData implements Serializable { public void setOrganism(Map<String, Object> organism) { this.organism = organism; } - - /** - * @return the publicationCount - * @see #publicationCount - */ - public Integer getPublicationCount() { - return publicationCount; - } - - /** - * @param publicationCount - * the publicationCount to set - * @see #publicationCount - */ - public void setPublicationCount(Integer publicationCount) { - this.publicationCount = publicationCount; - } - } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java index a64ef7f781..6f4f9a1d17 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java @@ -129,7 +129,7 @@ public class ProjectRestImpl extends BaseRestImpl { result.setVersion(model.getMapVersion()); result.setDescription(model.getNotes()); - Set<OverviewImage> set = new HashSet<OverviewImage>(); + Set<OverviewImage> set = new HashSet<>(); set.addAll(model.getOverviewImages()); for (OverviewImage image : model.getOverviewImages()) { for (OverviewLink ol : image.getLinks()) { @@ -144,13 +144,6 @@ public class ProjectRestImpl extends BaseRestImpl { logger.warn("Cannot determine top level image. Taking first one. " + model.getOverviewImages().get(0).getFilename()); result.setTopOverviewImage(factory.create(model.getOverviewImages().get(0))); } - result.setMap(new ModelMetaData(model)); - - List<Model> models = new ArrayList<>(); - models.add(model); - models.addAll(model.getSubmodels()); - result.setPublicationCount(publicationsRestImpl.getPublications(models).size()); - } return result; @@ -434,6 +427,8 @@ public class ProjectRestImpl extends BaseRestImpl { } result.put("reactionAnnotations", reactionAnnotations); + + result.put("publications", publicationsRestImpl.getPublications(models).size()); return result; } diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java new file mode 100644 index 0000000000..26d0fb353b --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java @@ -0,0 +1,40 @@ +package lcsb.mapviewer.api.projects.models; + +import java.util.List; + +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.ObjectNotFoundException; +import lcsb.mapviewer.common.Configuration; +import lcsb.mapviewer.services.SecurityException; + +@RestController +public class ModelController extends BaseController { + @Autowired + private ModelRestImpl modelController; + + @RequestMapping(value = "/projects/{projectId:.+}/models/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public List<ModelMetaData> getModels(// + @PathVariable(value = "projectId") String projectId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws SecurityException, ObjectNotFoundException { + return modelController.getModels(projectId, token); + } + + @RequestMapping(value = "/projects/{projectId:.+}/models/{modelId:.+}", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public ModelMetaData getModel(// + @PathVariable(value = "modelId") String modelId, // + @PathVariable(value = "projectId") String projectId, // + @CookieValue(value = Configuration.AUTH_TOKEN) String token // + ) throws SecurityException, ObjectNotFoundException { + return modelController.getModel(projectId, modelId, token); + } + +} \ No newline at end of file diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java similarity index 94% rename from rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java rename to rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java index 273364a57e..62181d0b37 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java @@ -1,4 +1,4 @@ -package lcsb.mapviewer.api.projects; +package lcsb.mapviewer.api.projects.models; import java.awt.geom.Point2D; import java.io.Serializable; diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java new file mode 100644 index 0000000000..e2a747e997 --- /dev/null +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java @@ -0,0 +1,58 @@ +package lcsb.mapviewer.api.projects.models; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; +import org.springframework.transaction.annotation.Transactional; + +import lcsb.mapviewer.api.BaseRestImpl; +import lcsb.mapviewer.api.ObjectNotFoundException; +import lcsb.mapviewer.model.Project; +import lcsb.mapviewer.model.map.model.Model; +import lcsb.mapviewer.services.SecurityException; +import lcsb.mapviewer.services.view.AuthenticationToken; + +@Transactional(value = "txManager") +public class ModelRestImpl extends BaseRestImpl { + + /** + * Default class logger. + */ + @SuppressWarnings("unused") + private Logger logger = Logger.getLogger(ModelRestImpl.class); + + public List<ModelMetaData> getModels(String projectId, String token) throws SecurityException, ObjectNotFoundException { + AuthenticationToken authenticationToken = getUserService().getToken(token); + Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken); + if (project == null) { + throw new ObjectNotFoundException("Project with given id doesn't exist"); + } + List<ModelMetaData> result = createData(project, authenticationToken); + return result; + } + + public ModelMetaData getModel(String projectId, String modelId, String token) throws SecurityException, ObjectNotFoundException { + AuthenticationToken authenticationToken = getUserService().getToken(token); + Model model = getModelService().getLastModelByProjectId(projectId, authenticationToken); + Model submodel = model.getSubmodelById(modelId); + if (submodel == null) { + return null; + } else { + return new ModelMetaData(submodel); + } + } + + private List<ModelMetaData> createData(Project project, AuthenticationToken token) { + List<ModelMetaData> result = new ArrayList<>(); + Model model = getModelService().getLastModelByProjectId(project.getProjectId(), token); + + List<Model> models = new ArrayList<>(); + models.add(model); + models.addAll(model.getSubmodels()); + for (Model model2 : models) { + result.add(new ModelMetaData(model2)); + } + return result; + } +} diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java index ace3974815..0d3e034912 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java @@ -1,6 +1,7 @@ package lcsb.mapviewer.api.projects.models.publications; import java.util.ArrayList; +import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -56,7 +57,7 @@ public class PublicationsRestImpl extends BaseRestImpl { @Autowired private OverviewImageViewFactory factory; - public SortedMap<MiriamData, List<BioEntity>> getPublications(List<Model> models) { + public SortedMap<MiriamData, List<BioEntity>> getPublications(Collection<Model> models) { SortedMap<MiriamData, List<BioEntity>> publications = new TreeMap<>(); for (Model modelData : models) { for (Element element : modelData.getElements()) { diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java index 521d3701fe..243de1dad2 100644 --- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java +++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import com.google.gson.Gson; -import lcsb.mapviewer.api.projects.ModelMetaData; +import lcsb.mapviewer.api.projects.models.ModelMetaData; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; -- GitLab