From 8bf97b9b06f25a74c87f1a7b1c051651ed955ea6 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 20 Jun 2017 09:35:17 +0200
Subject: [PATCH] parsing of compartment notes added

---
 .../compartment/CompartmentXmlParser.java     | 15 +++-
 .../CellDesignerXmlParserTest.java            | 13 ++++
 .../testFiles/compartment_with_notes.xml      | 76 +++++++++++++++++++
 3 files changed, 100 insertions(+), 4 deletions(-)
 create mode 100644 converter-CellDesigner/testFiles/compartment_with_notes.xml

diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParser.java
index 5c51659632..f19b6d621b 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/compartment/CompartmentXmlParser.java
@@ -7,6 +7,7 @@ import org.w3c.dom.NodeList;
 import lcsb.mapviewer.common.Pair;
 import lcsb.mapviewer.common.exception.InvalidXmlSchemaException;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerElementCollection;
+import lcsb.mapviewer.converter.model.celldesigner.annotation.RestAnnotationParser;
 import lcsb.mapviewer.converter.model.celldesigner.annotation.XmlAnnotationParser;
 import lcsb.mapviewer.converter.model.celldesigner.species.AbstractElementXmlParser;
 import lcsb.mapviewer.converter.model.celldesigner.structure.CellDesignerCompartment;
@@ -26,12 +27,12 @@ public class CompartmentXmlParser extends AbstractElementXmlParser<CellDesignerC
 	 * Default class logger.
 	 */
 	@SuppressWarnings("unused")
-	private static Logger					logger							= Logger.getLogger(CompartmentXmlParser.class.getName());
+	private static Logger									logger							= Logger.getLogger(CompartmentXmlParser.class.getName());
 
 	/**
 	 * Parser used to retrieve Miriam data for the element.
 	 */
-	private XmlAnnotationParser		xmlAnnotationParser	= new XmlAnnotationParser();
+	private XmlAnnotationParser						xmlAnnotationParser	= new XmlAnnotationParser();
 
 	/**
 	 * Collection of {@link CellDesignerElement cell designer elements} parsed
@@ -39,6 +40,11 @@ public class CompartmentXmlParser extends AbstractElementXmlParser<CellDesignerC
 	 */
 	private CellDesignerElementCollection	elements;
 
+	/**
+	 * Xml parser used for processing notes into structurized data.
+	 */
+	private RestAnnotationParser					rap									= new RestAnnotationParser();
+
 	/**
 	 * Default constructor.
 	 * 
@@ -63,6 +69,8 @@ public class CompartmentXmlParser extends AbstractElementXmlParser<CellDesignerC
 			if (node.getNodeType() == Node.ELEMENT_NODE) {
 				if (node.getNodeName().equalsIgnoreCase("annotation")) {
 					parseAnnotationNode(compartment, node);
+				} else if (node.getNodeName().equalsIgnoreCase("notes")) {
+					compartment.setNotes(rap.getNotes(node));
 				} else {
 					throw new InvalidXmlSchemaException("Unknown element of Compartment: " + node.getNodeName());
 				}
@@ -132,8 +140,7 @@ public class CompartmentXmlParser extends AbstractElementXmlParser<CellDesignerC
 		sb.append("size=\"1\" ");
 		sb.append("units=\"volume\" ");
 		String parentName = "default";
-		
-		
+
 		if (compartment.getCompartment() != null && !(compartment.getCompartment() instanceof PathwayCompartment)) {
 			parentName = elements.getElementId(compartment.getCompartment());
 		}
diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParserTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParserTest.java
index d61b82e9ce..631f0c5f74 100644
--- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParserTest.java
+++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParserTest.java
@@ -975,4 +975,17 @@ public class CellDesignerXmlParserTest extends CellDesignerTestFunctions {
 		}
 	}
 
+	@Test
+	public void testCompartmentWithNotes() throws Exception {
+		try {
+			CellDesignerXmlParser parser = new CellDesignerXmlParser();
+			Model model = parser.createModel(new ConverterParams().filename("testFiles/compartment_with_notes.xml"));
+			assertNotNull(model);
+			assertEquals("notes", model.getCompartments().get(0).getNotes());
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
 }
diff --git a/converter-CellDesigner/testFiles/compartment_with_notes.xml b/converter-CellDesigner/testFiles/compartment_with_notes.xml
new file mode 100644
index 0000000000..9dfe7f29ee
--- /dev/null
+++ b/converter-CellDesigner/testFiles/compartment_with_notes.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sbml xmlns="http://www.sbml.org/sbml/level2/version4" xmlns:celldesigner="http://www.sbml.org/2001/ns/celldesigner" level="2" version="4">
+<model metaid="untitled" id="untitled">
+<annotation>
+<celldesigner:extension>
+<celldesigner:modelVersion>4.0</celldesigner:modelVersion>
+<celldesigner:modelDisplay sizeX="600" sizeY="400"/>
+<celldesigner:listOfCompartmentAliases>
+<celldesigner:compartmentAlias id="ca1" compartment="c1">
+<celldesigner:class>SQUARE</celldesigner:class>
+<celldesigner:bounds x="108.0" y="82.0" w="265.0" h="160.0"/>
+<celldesigner:namePoint x="233.0" y="205.5"/>
+<celldesigner:doubleLine thickness="12.0" outerWidth="2.0" innerWidth="1.0"/>
+<celldesigner:paint color="ffcccc00" scheme="Color"/>
+<celldesigner:info state="empty" angle="-1.5707963267948966"/>
+</celldesigner:compartmentAlias>
+</celldesigner:listOfCompartmentAliases>
+<celldesigner:listOfComplexSpeciesAliases/>
+<celldesigner:listOfSpeciesAliases/>
+<celldesigner:listOfGroups/>
+<celldesigner:listOfProteins/>
+<celldesigner:listOfGenes/>
+<celldesigner:listOfRNAs/>
+<celldesigner:listOfAntisenseRNAs/>
+<celldesigner:listOfLayers/>
+<celldesigner:listOfBlockDiagrams/>
+</celldesigner:extension>
+</annotation>
+<listOfUnitDefinitions>
+<unitDefinition metaid="substance" id="substance" name="substance">
+<listOfUnits>
+<unit metaid="CDMT00001" kind="mole"/>
+</listOfUnits>
+</unitDefinition>
+<unitDefinition metaid="volume" id="volume" name="volume">
+<listOfUnits>
+<unit metaid="CDMT00002" kind="litre"/>
+</listOfUnits>
+</unitDefinition>
+<unitDefinition metaid="area" id="area" name="area">
+<listOfUnits>
+<unit metaid="CDMT00003" kind="metre" exponent="2"/>
+</listOfUnits>
+</unitDefinition>
+<unitDefinition metaid="length" id="length" name="length">
+<listOfUnits>
+<unit metaid="CDMT00004" kind="metre"/>
+</listOfUnits>
+</unitDefinition>
+<unitDefinition metaid="time" id="time" name="time">
+<listOfUnits>
+<unit metaid="CDMT00005" kind="second"/>
+</listOfUnits>
+</unitDefinition>
+</listOfUnitDefinitions>
+<listOfCompartments>
+<compartment metaid="default" id="default" size="1" units="volume"/>
+<compartment metaid="c1" id="c1" name="c1" size="1" units="volume" outside="default">
+<notes>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title/>
+</head>
+<body>notes
+</body>
+</html>
+</notes>
+<annotation>
+<celldesigner:extension>
+<celldesigner:name>c1</celldesigner:name>
+</celldesigner:extension>
+</annotation>
+</compartment>
+</listOfCompartments>
+</model>
+</sbml>
-- 
GitLab