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 56071ddde9682e481a222acbb34b1021b3363bad..ac78d8b8d3665ee9c2839b91150ed323cc98d978 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 8b4e0560e0a125cd69f1b7e2cb29b18c2378e795..58365826a5a547972bb6fe8a927ff2aa6c017c76 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 a64ef7f781d081252867ed3badc89b2f645c2a27..6f4f9a1d17c8a19eb9d1a9963ea161389d02424a 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 0000000000000000000000000000000000000000..26d0fb353bce38f7205b4181b194c8ee3555fc47 --- /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 273364a57e42d047251b7e1cf358cce2bcb69a54..62181d0b379a22f618a5cb6fa1d51622a282704e 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 0000000000000000000000000000000000000000..e2a747e9973f376d5fb3dd2c05c4f6796c3d3045 --- /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 ace3974815517e448e1de1e8908cd432a6c0854f..0d3e0349126edced91c82d2ad674c564cbd97505 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 521d3701fe25873c35726f782374abdef87d39f8..243de1dad24d1043b65385b0ad480c7f711c2be0 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;