From 0e9f18f5c9ae54ce97be10d4074579cace70a678 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 7 Feb 2018 18:02:43 +0100 Subject: [PATCH] export of modifier type added --- .../sbml/reaction/SBOTermModifierType.java | 24 +++++++- .../sbml/reaction/SbmlReactionExporter.java | 4 ++ .../sbml/reaction/SbmlReactionParser.java | 55 ++++++++++--------- .../sbml/GenericSbmlToXmlParserTest.java | 3 +- .../sbml/species/SbmlSpeciesParserTest.java | 2 + 5 files changed, 59 insertions(+), 29 deletions(-) diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java index 605f4b8c5f..580deecbb6 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SBOTermModifierType.java @@ -1,7 +1,7 @@ package lcsb.mapviewer.converter.model.sbml.reaction; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import org.apache.log4j.Logger; @@ -19,7 +19,7 @@ public enum SBOTermModifierType { ; private static Logger logger = Logger.getLogger(SBOTermModifierType.class); - private Set<String> sboTerms = new HashSet<>(); + private List<String> sboTerms = new ArrayList<>(); Class<? extends Modifier> clazz; private SBOTermModifierType(Class<? extends Modifier> clazz, String[] inputSboTerms) { @@ -47,4 +47,22 @@ public enum SBOTermModifierType { } return result; } + + public static String getTermByType(Class<? extends Modifier> clazz) { + for (SBOTermModifierType term : values()) { + if (clazz.equals(term.clazz)) { + return term.getSBO(); + } + } + logger.warn("Cannot find SBO term for class: " + clazz); + return null; + } + + private String getSBO() { + if (sboTerms.size() != 0) { + return sboTerms.get(0); + } + logger.warn("Cannot find SBO term for class: " + clazz); + return null; + } } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java index 67e1391847..ef9da4db73 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionExporter.java @@ -78,6 +78,10 @@ public class SbmlReactionExporter extends SbmlBioEntityExporter<Reaction, org.sb Species sbmlSymbol = speciesExporter.getSbmlElementByElementId(modifier.getElement().getElementId()); SimpleSpeciesReference speciesReference = result.createModifier(sbmlSymbol); speciesReferenceByReactionNode.put(modifier, speciesReference); + String term = SBOTermModifierType.getTermByType(modifier.getClass()); + if (term != null) { + speciesReference.setSBOTerm(term); + } } if (reaction.getKinetics() != null) { result.setKineticLaw(createKineticLaw(reaction)); diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java index 876a08866d..af039111eb 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/reaction/SbmlReactionParser.java @@ -109,32 +109,33 @@ public class SbmlReactionParser extends SbmlBioEntityParser { SpeciesGlyph speciesGlyph = layout.getSpeciesGlyph(speciesRefernceGlyph.getSpeciesGlyph()); ReactionNode minervaNode = null; Class<? extends ReactionNode> nodeClass = null; - switch (speciesRefernceGlyph.getRole()) { - case ACTIVATOR: - nodeClass = Trigger.class; - break; - case INHIBITOR: - nodeClass = Inhibition.class; - break; - case MODIFIER: - nodeClass = Modulation.class; - break; - case PRODUCT: - nodeClass = Product.class; - break; - case SIDEPRODUCT: - nodeClass = Product.class; - break; - case SIDESUBSTRATE: - nodeClass = Reactant.class; - break; - case SUBSTRATE: - nodeClass = Reactant.class; - break; - case UNDEFINED: - nodeClass = null; - break; + if (speciesRefernceGlyph.getRole() != null) { + switch (speciesRefernceGlyph.getRole()) { + case ACTIVATOR: + nodeClass = Trigger.class; + break; + case INHIBITOR: + nodeClass = Inhibition.class; + break; + case PRODUCT: + nodeClass = Product.class; + break; + case SIDEPRODUCT: + nodeClass = Product.class; + break; + case SIDESUBSTRATE: + nodeClass = Reactant.class; + break; + case SUBSTRATE: + nodeClass = Reactant.class; + break; + case UNDEFINED: + case MODIFIER: + nodeClass = null; + break; + } } + if (reactionWithLayout.isReversible() && (nodeClass == Reactant.class || nodeClass == Product.class)) { nodeClass = null; } @@ -148,7 +149,11 @@ public class SbmlReactionParser extends SbmlBioEntityParser { } } } + if (nodeClass == Modifier.class) { + nodeClass = Modulation.class; + } if (minervaNode == null) { + logger.debug(nodeClass); throw new InvalidInputDataExecption( "Cannot find reaction node for layouted reaction: " + speciesGlyph.getSpecies() + ", " + glyph.getId()); } diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java index 4b17dfa771..c3f9c5bfa6 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/GenericSbmlToXmlParserTest.java @@ -53,6 +53,7 @@ public class GenericSbmlToXmlParserTest { @Test public void toXmlModelTest() throws Exception { try { + String dir = Files.createTempDirectory("sbgn-temp-images-dir").toFile().getAbsolutePath(); IConverter converter = new SbmlParser(); @@ -64,7 +65,7 @@ public class GenericSbmlToXmlParserTest { + filePath.getFileName().toString().substring(0, filePath.getFileName().toString().indexOf(".xml")); String xmlFilePath = pathWithouExtension.concat(".xml"); converter.exportModelToFile(model, xmlFilePath); - + Model model2 = converter.createModel(new ConverterParams().filename(xmlFilePath)); model2.setName(null); diff --git a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java index 2a049eecec..c82b00a7e4 100644 --- a/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java +++ b/converter-sbml/src/test/java/lcsb/mapviewer/converter/model/sbml/species/SbmlSpeciesParserTest.java @@ -6,6 +6,7 @@ import java.io.FileNotFoundException; import org.apache.log4j.Logger; import org.junit.Test; +import org.sbml.jsbml.SBMLDocument; import lcsb.mapviewer.converter.ConverterParams; import lcsb.mapviewer.converter.InvalidInputDataExecption; @@ -128,4 +129,5 @@ public class SbmlSpeciesParserTest { assertTrue(element instanceof Unknown); } + } -- GitLab