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