From e1bf8b039f987dd9ad25bdce33c069798a3491f9 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 2 Jan 2019 12:54:21 +0100 Subject: [PATCH] export with MULTI property separates species wth different structural state --- .../converter/model/sbml/SbmlExporter.java | 1 - .../sbml/species/SbmlSpeciesExporter.java | 15 +++++++- .../sbml/species/SbmlSpeciesExporterTest.java | 36 ++++++++++++++----- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java index 247453556b..9897735de5 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlExporter.java @@ -189,7 +189,6 @@ public class SbmlExporter { private Map<Class<?>, MultiSpeciesType> speciesTypeByClass = new HashMap<>(); - @SuppressWarnings("unchecked") protected MultiModelPlugin createSbmlMultiPlugin(Model result) { MultiModelPlugin multiPlugin = new MultiModelPlugin(result); result.addExtension("multi", multiPlugin); 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 dd6773fba2..04e566a37f 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 @@ -159,7 +159,20 @@ public class SbmlSpeciesExporter extends SbmlElementExporter<Species, org.sbml.j if (element.getComplex() != null) { complexName = element.getComplex().getName(); } - return element.getClass().getSimpleName() + "\n" + element.getName() + "\n" + compartmentName + "\n" + complexName; + String multiDistinguisher = null; + + if (isExtensionEnabled(SbmlExtension.MULTI)) { + String structuralState = null; + if (element instanceof Protein) { + structuralState = ((Protein) element).getStructuralState(); + } else if (element instanceof Complex) { + structuralState = ((Complex) element).getStructuralState(); + } + multiDistinguisher = structuralState; + } + String result =element.getClass().getSimpleName() + "\n" + element.getName() + "\n" + compartmentName + "\n" + complexName + + "\n" + multiDistinguisher; + return result; } protected LocalStyle createStyle(Species element) { diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java index 36b459def4..918231660e 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesExporterTest.java @@ -1,13 +1,14 @@ package lcsb.mapviewer.converter.model.sbml.species; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import java.util.Arrays; +import java.util.Collection; import org.apache.log4j.Logger; import org.junit.Test; import org.sbml.jsbml.SBMLDocument; -import org.sbml.jsbml.ext.layout.Layout; import lcsb.mapviewer.converter.model.sbml.SbmlExporter; import lcsb.mapviewer.converter.model.sbml.SbmlExtension; @@ -18,15 +19,14 @@ import lcsb.mapviewer.model.map.model.Model; import lcsb.mapviewer.model.map.model.ModelFullIndexed; import lcsb.mapviewer.model.map.species.Element; import lcsb.mapviewer.model.map.species.GenericProtein; +import lcsb.mapviewer.model.map.species.Protein; +import lcsb.mapviewer.model.map.species.Species; public class SbmlSpeciesExporterTest { Logger logger = Logger.getLogger(SbmlSpeciesExporterTest.class); - SbmlCompartmentExporter compartmentExporter; - org.sbml.jsbml.Model sbmlModel; - Layout sbmlLayout; @Test public void testOneElementWithTwoAliases() throws InconsistentModelException { @@ -68,19 +68,39 @@ public class SbmlSpeciesExporterTest { } private SbmlSpeciesExporter createExporter(Model model) throws InconsistentModelException { + return createExporter(model, Arrays.asList(new SbmlExtension[] { SbmlExtension.RENDER, SbmlExtension.LAYOUT })); + } + + private SbmlSpeciesExporter createExporter(Model model, Collection<SbmlExtension> sbmlExtensions) + throws InconsistentModelException { SBMLDocument doc = new SBMLDocument(3, 1); sbmlModel = doc.createModel(model.getIdModel()); SbmlExporter sbmlExporter = new SbmlExporter(); - sbmlLayout = sbmlExporter.createSbmlLayout(model, sbmlModel); + sbmlExporter.createSbmlLayout(model, sbmlModel); SbmlCompartmentExporter compartmentExporter = new SbmlCompartmentExporter(sbmlModel, model, Arrays.asList(SbmlExtension.values())); compartmentExporter.exportElements(); - SbmlSpeciesExporter result = new SbmlSpeciesExporter(sbmlModel, model, - Arrays.asList(new SbmlExtension[] { SbmlExtension.RENDER, SbmlExtension.LAYOUT }), - compartmentExporter); + + SbmlSpeciesExporter result = new SbmlSpeciesExporter(sbmlModel, model, sbmlExtensions, compartmentExporter); return result; } + @Test + public void testIdsOfSpeciesWithStructuralStates() throws InconsistentModelException { + Species protein1 = new GenericProtein("sa1"); + protein1.setName("SNCA"); + Protein protein2 = new GenericProtein("sa2"); + protein2.setName("SNCA"); + protein2.setStructuralState("X"); + Model model = new ModelFullIndexed(null); + model.addElement(protein1); + model.addElement(protein2); + + SbmlSpeciesExporter exporter = createExporter(model, Arrays.asList(SbmlExtension.values())); + + assertFalse(exporter.getSbmlIdKey(protein1).equals(exporter.getSbmlIdKey(protein2))); + } + } -- GitLab