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 605f4b8c5ff35a64fc498456ab3cd14704d705be..580deecbb6f5d2301dff945374b6922c6f005b23 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 67e13918475d16c3ad17a005f0d601d2d789e884..ef9da4db73f43dd08b3ee0c90691189516fca5dc 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 876a08866dba110b8b5d022691a4541a81582c05..af039111ebceda389bf4e94ace29bd648fdddd30 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 4b17dfa7715602f28499226864a40e2cbefb02c7..c3f9c5bfa68cd7d53f0ee37331f53875e4f15805 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 2a049eecec810853e37d1db9f6255c4989176cbc..c82b00a7e468e9216c66a5aa151999427068216c 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); } + }