diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/project/ModelMetaData.java b/rest-api/src/main/java/lcsb/mapviewer/api/project/ModelMetaData.java index b2ace1b5a02fd0ac6a9a7132f561a33ef975f0ca..a771a5e150f483a232272590059ed07ce6fd5e77 100644 --- a/rest-api/src/main/java/lcsb/mapviewer/api/project/ModelMetaData.java +++ b/rest-api/src/main/java/lcsb/mapviewer/api/project/ModelMetaData.java @@ -3,15 +3,21 @@ package lcsb.mapviewer.api.project; import java.awt.geom.Point2D; import java.io.Serializable; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.primefaces.model.map.LatLng; import lcsb.mapviewer.common.Configuration; +import lcsb.mapviewer.model.map.MiriamData; +import lcsb.mapviewer.model.map.MiriamType; import lcsb.mapviewer.model.map.layout.Layout; import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelData; import lcsb.mapviewer.model.map.model.ModelSubmodelConnection; +import lcsb.mapviewer.model.map.reaction.Reaction; +import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.services.utils.gmap.CoordinationConverter; import lcsb.mapviewer.services.view.LayoutView; import lcsb.mapviewer.services.view.LayoutViewFactory; @@ -35,6 +41,8 @@ public class ModelMetaData implements Serializable { private Integer idObject; + private Integer publicationCount; + /** * Size in pixels of the single square tile (small image used for graphical * representation). @@ -110,6 +118,32 @@ public class ModelMetaData implements Serializable { } } this.setSubmodels(submodels); + + Set<MiriamData> publications = new HashSet<>(); + List<ModelData> models = new ArrayList<>(); + for (ModelSubmodelConnection connection : model.getSubmodels()) { + models.add(connection.getSubmodel()); + } + models.add(model); + for (ModelData modelData : models) { + for (Element element : modelData.getElements()) { + for (MiriamData md : element.getMiriamData()) { + if (md.getDataType().equals(MiriamType.PUBMED)) { + publications.add(md); + } + } + } + for (Reaction reaction : modelData.getReactions()) { + for (MiriamData md : reaction.getMiriamData()) { + if (md.getDataType().equals(MiriamType.PUBMED)) { + publications.add(md); + } + } + + } + } + + this.setPublicationCount(publications.size()); } protected ModelMetaData() { @@ -328,10 +362,28 @@ public class ModelMetaData implements Serializable { } /** - * @param idObject the idObject to set + * @param idObject + * the idObject to set * @see #idObject */ public void setIdObject(Integer idObject) { this.idObject = idObject; } + + /** + * @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; + } }