From e4b8601403cbab9bd08d3634bd0c01c2a0ce71ba Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 4 Jan 2019 10:31:03 +0100 Subject: [PATCH] export/import of model notes added --- .../converter/model/sbml/NotesUtility.java | 32 +++++++++++++++++++ .../model/sbml/SbmlBioEntityParser.java | 23 +------------ .../converter/model/sbml/SbmlExporter.java | 7 ++++ .../converter/model/sbml/SbmlParser.java | 1 + .../model/sbml/SbmlExporterTest.java | 10 ++++++ 5 files changed, 51 insertions(+), 22 deletions(-) create mode 100644 converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/NotesUtility.java diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/NotesUtility.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/NotesUtility.java new file mode 100644 index 0000000000..7a0bac687e --- /dev/null +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/NotesUtility.java @@ -0,0 +1,32 @@ +package lcsb.mapviewer.converter.model.sbml; + +import javax.xml.stream.XMLStreamException; + +import org.sbml.jsbml.AbstractNamedSBase; + +import lcsb.mapviewer.converter.InvalidInputDataExecption; + +public class NotesUtility { + public static String extractNotes(AbstractNamedSBase sbmlElement) throws InvalidInputDataExecption { + String notes = ""; + try { + notes = sbmlElement.getNotesString(); + } catch (XMLStreamException e) { + throw new InvalidInputDataExecption(sbmlElement.getId() + " Invalid notes", e); + } + if (sbmlElement.getNotes() != null) { + if (sbmlElement.getNotes().getChildCount() > 1) { + if (sbmlElement.getNotes().getChild(1).getChildCount() > 1) { + if (sbmlElement.getNotes().getChild(1).getChild(1).getChildCount() > 0) { + notes = sbmlElement.getNotes().getChild(1).getChild(1).getChild(0).getCharacters(); + } else { + notes = sbmlElement.getNotes().getChild(1).getChild(1).getCharacters(); + } + } + } + } + return notes; + } + + +} diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java index acbffb2c09..b53c544c8b 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlBioEntityParser.java @@ -95,7 +95,7 @@ public class SbmlBioEntityParser extends XmlParser { if (result.getName() == null || result.getName().isEmpty()) { result.setName(result.getElementId()); } - String notes = extractNotes(sbmlElement); + String notes = NotesUtility.extractNotes(sbmlElement); result.setNotes(notes); if (result instanceof Element) { @@ -104,27 +104,6 @@ public class SbmlBioEntityParser extends XmlParser { } } - private String extractNotes(AbstractNamedSBase sbmlElement) throws InvalidInputDataExecption { - String notes = ""; - try { - notes = sbmlElement.getNotesString(); - } catch (XMLStreamException e) { - throw new InvalidInputDataExecption(sbmlElement.getId() + " Invalid notes", e); - } - if (sbmlElement.getNotes() != null) { - if (sbmlElement.getNotes().getChildCount() > 1) { - if (sbmlElement.getNotes().getChild(1).getChildCount() > 1) { - if (sbmlElement.getNotes().getChild(1).getChild(1).getChildCount() > 0) { - notes = sbmlElement.getNotes().getChild(1).getChild(1).getChild(0).getCharacters(); - } else { - notes = sbmlElement.getNotes().getChild(1).getChild(1).getCharacters(); - } - } - } - } - return notes; - } - protected String getNextId() { return (idCounter++) + ""; } 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 79d3012885..45d496c6ce 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 @@ -9,6 +9,7 @@ import java.util.Set; import javax.xml.stream.XMLStreamException; import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.commons.lang3.StringEscapeUtils; import org.apache.log4j.Logger; import org.sbml.jsbml.Model; import org.sbml.jsbml.SBMLDocument; @@ -78,6 +79,12 @@ public class SbmlExporter { SBMLDocument doc = new SBMLDocument(3, 2); Model result = doc.createModel(model.getIdModel()); result.setName(model.getName()); + try { + result.setNotes(StringEscapeUtils.escapeXml(model.getNotes())); + } catch (XMLStreamException e) { + throw new InvalidStateException(e); + } + if (usedExtensions.contains(SbmlExtension.LAYOUT)) { createSbmlLayout(model, result); } diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java index 48f4e8d3ac..7bf2917282 100644 --- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java +++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java @@ -68,6 +68,7 @@ public class SbmlParser implements IConverter { org.sbml.jsbml.Model sbmlModel = sbmlDocument.getModel(); model.setIdModel(sbmlModel.getId()); model.setName(sbmlModel.getName()); + model.setNotes(NotesUtility.extractNotes(sbmlModel)); checkAvailableExtensions(sbmlModel); Layout layout = getSbmlLayout(sbmlModel); 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 92b27dcc63..37a79998a3 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 @@ -614,4 +614,14 @@ public class SbmlExporterTest { } + @Test + public void testExportNotes() throws Exception { + Model model = createEmptyModel(); + model.setNotes("XX"); + Model deserializedModel = getModelAfterSerializing(model); + + assertEquals("Notes weren't exported/imported properly", model.getNotes(), deserializedModel.getNotes()); + + } + } -- GitLab