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 247453556b083223d2be67ee0988a309db47dea4..9897735de5cfc5ffaa43123b20eeb70f84616ef8 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 dd6773fba2eff1313261d53372f032de7e200162..04e566a37f31ae43e4bef280bc642d2ac2cc6d77 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 36b459def474ea5cbe0e122c85fefe04fdec45f7..918231660e7b3cb5c78cf36877f51fcd868263cc 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))); + } + }