From 6f235bae19e23ee88d52380108c1814303628dfc Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 2 Feb 2018 11:53:10 +0100
Subject: [PATCH] export of unit definition added

---
 .../celldesigner/CellDesignerXmlParser.java   |  2 ++
 .../unit/UnitCollectionXmlParser.java         | 10 +++++++
 .../celldesigner/unit/UnitXmlParser.java      | 26 +++++++++++++++++++
 3 files changed, 38 insertions(+)

diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
index d4255f49b5..f918d97a6e 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
@@ -592,6 +592,7 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter {
 
     SpeciesCollectionXmlParser speciesCollectionXmlParser = new SpeciesCollectionXmlParser(elements);
     ReactionCollectionXmlParser reactionCollectionXmlParser = new ReactionCollectionXmlParser(model, elements, false);
+    UnitCollectionXmlParser unitCollectionXmlParser = new UnitCollectionXmlParser();
     FunctionCollectionXmlParser functionCollectionXmlParser = new FunctionCollectionXmlParser();
     ParameterCollectionXmlParser parameterCollectionXmlParser = new ParameterCollectionXmlParser(model);
 
@@ -611,6 +612,7 @@ public class CellDesignerXmlParser extends XmlParser implements IConverter {
       result.append("</notes>");
     }
 
+    result.append(unitCollectionXmlParser.toXml(model.getUnits()));
     result.append(functionCollectionXmlParser.toXml(model.getFunctions()));
     result.append(parameterCollectionXmlParser.toXml(model.getParameters()));
     result.append(annotationToXml(model, elements));
diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java
index 1cf70a8067..a442d3c394 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitCollectionXmlParser.java
@@ -21,4 +21,14 @@ public class UnitCollectionXmlParser extends XmlParser {
     return result;
   }
 
+  public String toXml(Set<SbmlUnit> units) {
+    StringBuilder builder = new StringBuilder();
+    builder.append("<listOfUnitDefinitions>\n");
+    for (SbmlUnit unit: units) {
+      builder.append(unitParser.toXml(unit));
+    }
+    builder.append("</listOfUnitDefinitions>\n");
+    return builder.toString();
+  }
+
 }
diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java
index fe1ca925a0..d93d4f2951 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/unit/UnitXmlParser.java
@@ -67,4 +67,30 @@ public class UnitXmlParser extends XmlParser {
     }
     return new SbmlUnitTypeFactor(unitType, exponent, scale, multiplier);
   }
+
+  public String toXml(SbmlUnit unit) {
+    StringBuilder result = new StringBuilder();
+    result.append("<unitDefinition ");
+    result.append("id=\"" + unit.getUnitId() + "\" ");
+    result.append("name=\"" + unit.getName() + "\" ");
+    result.append(">\n");
+    result.append("<listOfUnits>\n");
+    for (SbmlUnitTypeFactor factor : unit.getUnitTypeFactors()) {
+      result.append(toXml(factor));
+    }
+    result.append("</listOfUnits>\n");
+    result.append("</unitDefinition>");
+    return result.toString();
+  }
+
+  private String toXml(SbmlUnitTypeFactor factor) {
+    StringBuilder result = new StringBuilder();
+    result.append("<unit ");
+    result.append("kind=\"" + factor.getUnitType().toString().toLowerCase() + "\" ");
+    result.append("scale=\"" + factor.getScale() + "\" ");
+    result.append("exponent=\"" + factor.getExponent() + "\" ");
+    result.append("multiplier=\"" + factor.getMultiplier() + "\" ");
+    result.append("/>\n");
+    return result.toString();
+  }
 }
-- 
GitLab