From 399e0c4c1186eeaddcbe5089a3518b8f0a656aa7 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 31 Dec 2018 10:35:01 +0100 Subject: [PATCH] multi species type is exported --- .../model/sbml/SbmlBioEntityExporter.java | 5 +++ .../sbml/species/SbmlSpeciesExporter.java | 17 ++++++++-- .../model/sbml/SbmlExporterTest.java | 32 +++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java index e28c802f96..62d6d3ab7c 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityExporter.java @@ -14,6 +14,7 @@ import org.apache.log4j.Logger; import org.sbml.jsbml.Model; import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph; import org.sbml.jsbml.ext.layout.Layout; +import org.sbml.jsbml.ext.multi.MultiModelPlugin; import org.sbml.jsbml.ext.render.ColorDefinition; import org.sbml.jsbml.ext.render.LocalRenderInformation; import org.sbml.jsbml.ext.render.LocalStyle; @@ -151,6 +152,10 @@ public abstract class SbmlBioEntityExporter<T extends BioEntity, S extends org.s return null; } + protected MultiModelPlugin getMultiPlugin() { + return (MultiModelPlugin) sbmlModel.getExtension("multi"); + } + protected lcsb.mapviewer.model.map.model.Model getMinervaModel() { return minervaModel; } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java index 7cbc779867..f72ce30209 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporter.java @@ -6,6 +6,8 @@ import java.util.List; import org.apache.log4j.Logger; import org.sbml.jsbml.ext.layout.AbstractReferenceGlyph; import org.sbml.jsbml.ext.layout.Layout; +import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin; +import org.sbml.jsbml.ext.multi.MultiSpeciesType; import org.sbml.jsbml.ext.render.LocalStyle; import lcsb.mapviewer.converter.model.sbml.SbmlElementExporter; @@ -15,13 +17,13 @@ import lcsb.mapviewer.model.map.InconsistentModelException; import lcsb.mapviewer.model.map.species.Species; public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.jsbml.Species> { - + /** * Default class logger. */ @SuppressWarnings("unused") private static Logger logger = Logger.getLogger(SbmlSpeciesExporter.class); - + private SbmlCompartmentExporter compartmentExporter; public SbmlSpeciesExporter(Layout layout, @@ -49,9 +51,20 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j if (element.getConstant() != null) { result.setConstant(element.getConstant()); } + if (isExtensionEnabled(SbmlExtension.MULTI)) { + MultiSpeciesPlugin multiExtension = new MultiSpeciesPlugin(result); + multiExtension.setSpeciesType(getMultiSpeciesType(element)); + result.addExtension("multi", multiExtension); + } return result; } + private String getMultiSpeciesType(Species element) { + MultiSpeciesType speciesType = getMultiPlugin() + .getSpeciesType("minerva_species_type_" + element.getClass().getSimpleName()); + return speciesType.getId(); + } + @Override protected AbstractReferenceGlyph createElementGlyph(String sbmlElementId, String glyphId) { AbstractReferenceGlyph speciesGlyph = getLayout().createSpeciesGlyph(glyphId, sbmlElementId); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java index 44b0b66d7c..65b86191f8 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/SbmlExporterTest.java @@ -21,6 +21,7 @@ import org.junit.Test; import org.reflections.Reflections; import org.sbml.jsbml.SBMLDocument; import org.sbml.jsbml.ext.multi.MultiModelPlugin; +import org.sbml.jsbml.ext.multi.MultiSpeciesPlugin; import org.sbml.jsbml.ext.multi.MultiSpeciesType; import org.sbml.jsbml.ext.multi.PossibleSpeciesFeatureValue; import org.sbml.jsbml.ext.multi.SpeciesFeatureType; @@ -537,4 +538,35 @@ public class SbmlExporterTest { } } + @Test + public void testMultiExtensionTypeDefinition() throws Exception { + String structuralState = "xxx"; + Model model = createEmptyModel(); + GenericProtein element = new GenericProtein("id"); + element.setName("test name"); + element.setX(10); + element.setWidth(10); + element.setY(10); + element.setHeight(10); + element.setStructuralState(structuralState); + model.addElement(element); + org.sbml.jsbml.Model sbmlModel = exporter.toSbmlDocument(model).getModel(); + + MultiModelPlugin multiPlugin = (MultiModelPlugin) sbmlModel.getExtension("multi"); + + org.sbml.jsbml.Species sbmlSpecies = sbmlModel.getSpecies(0); + MultiSpeciesPlugin speciesExtension = (MultiSpeciesPlugin) sbmlSpecies.getExtension("multi"); + assertNotNull("Multi extension not defined for species", speciesExtension); + String speciesTypeString = speciesExtension.getSpeciesType(); + + MultiSpeciesType speciesType = null; + for (MultiSpeciesType type : multiPlugin.getListOfSpeciesTypes()) { + if (type.getId().equals(speciesTypeString)) { + speciesType = type; + } + } + assertNotNull("Species type is not set in multi extension", speciesType); + + } + } -- GitLab