From d627c4fed8558fdd353e71183d6a0fb6290c9ef9 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 8 Feb 2018 14:32:17 +0100
Subject: [PATCH] reaction contains kinetic law info

---
 .../src/main/js/map/data/KineticLaw.js        | 31 +++++++
 frontend-js/src/main/js/map/data/Reaction.js  | 20 ++++-
 .../src/test/js/map/data/KineticLaw-test.js   | 25 ++++++
 .../src/test/js/map/data/Reaction-test.js     | 82 +++++++++++--------
 4 files changed, 121 insertions(+), 37 deletions(-)
 create mode 100644 frontend-js/src/main/js/map/data/KineticLaw.js
 create mode 100644 frontend-js/src/test/js/map/data/KineticLaw-test.js

diff --git a/frontend-js/src/main/js/map/data/KineticLaw.js b/frontend-js/src/main/js/map/data/KineticLaw.js
new file mode 100644
index 0000000000..81133f5dc6
--- /dev/null
+++ b/frontend-js/src/main/js/map/data/KineticLaw.js
@@ -0,0 +1,31 @@
+"use strict";
+
+function KineticLaw(jsonObject) {
+  var self = this;
+  self.setParameterIds(jsonObject.parameterIds);
+  self.setFunctionIds(jsonObject.functionIds);
+  self.setDefinition(jsonObject.definition);
+}
+
+KineticLaw.prototype.setParameterIds = function (parameterIds) {
+  this._parameterIds = parameterIds;
+};
+KineticLaw.prototype.getParameterIds = function () {
+  return this._parameterIds;
+};
+
+KineticLaw.prototype.setFunctionIds = function (functionIds) {
+  this._functionIds = functionIds;
+};
+KineticLaw.prototype.getFunctionIds = function () {
+  return this._functionIds;
+};
+
+KineticLaw.prototype.setDefinition = function (definition) {
+  this._definition = definition;
+};
+KineticLaw.prototype.getDefinition = function () {
+  return this._definition;
+};
+
+module.exports = KineticLaw;
diff --git a/frontend-js/src/main/js/map/data/Reaction.js b/frontend-js/src/main/js/map/data/Reaction.js
index e43e94c88b..a8883197e8 100644
--- a/frontend-js/src/main/js/map/data/Reaction.js
+++ b/frontend-js/src/main/js/map/data/Reaction.js
@@ -4,6 +4,7 @@
 
 var Alias = require('./Alias');
 var BioEntity = require("./BioEntity");
+var KineticLaw = require("./KineticLaw");
 
 var logger = require('../../logger');
 
@@ -79,7 +80,7 @@ Reaction.prototype.getEndLines = function () {
 
 Reaction.prototype.setCenter = function (center) {
   if (center === null || center === undefined) {
-    throw new Error("Setting undefined center: ", center);
+    throw new Error("Setting undefined center: " + center);
   }
   this._center = center;
 };
@@ -103,22 +104,26 @@ Reaction.prototype.update = function (javaObject) {
   this.setReferences(javaObject.references);
   this.setType(javaObject.type);
 
-  if (javaObject.reactants !== "") {
+  if (javaObject.reactants !== "" && javaObject.reactants !== undefined) {
     this.setReactants(javaObject.reactants.split(","));
   } else {
     this.setReactants([]);
   }
-  if (javaObject.products !== "") {
+  if (javaObject.products !== "" && javaObject.products !== undefined) {
     this.setProducts(javaObject.products.split(","));
   } else {
     this.setProducts([]);
   }
-  if (javaObject.modifiers !== "") {
+  if (javaObject.modifiers !== "" && javaObject.modifiers !== undefined) {
     this.setModifiers(javaObject.modifiers.split(","));
   } else {
     this.setModifiers([]);
   }
 
+  if (javaObject.kineticLaw !== undefined && javaObject.kineticLaw !== null) {
+    this.setKineticLaw(new KineticLaw(javaObject.kineticLaw));
+  }
+
   this.setHierarchyVisibilityLevel(javaObject.hierarchyVisibilityLevel);
   this.setIsComplete(true);
 };
@@ -219,4 +224,11 @@ Reaction.prototype.getModifiers = function () {
   return this._modifiers;
 };
 
+Reaction.prototype.setKineticLaw = function (kineticLaw) {
+  this._kineticLaw = kineticLaw;
+};
+Reaction.prototype.getKineticLaw = function () {
+  return this._kineticLaw;
+};
+
 module.exports = Reaction;
diff --git a/frontend-js/src/test/js/map/data/KineticLaw-test.js b/frontend-js/src/test/js/map/data/KineticLaw-test.js
new file mode 100644
index 0000000000..ea819abb40
--- /dev/null
+++ b/frontend-js/src/test/js/map/data/KineticLaw-test.js
@@ -0,0 +1,25 @@
+"use strict";
+
+var KineticLaw = require('../../../../main/js/map/data/KineticLaw');
+var chai = require('chai');
+var assert = chai.assert;
+var logger = require('../../logger');
+
+describe('Comment', function () {
+  beforeEach(function () {
+    logger.flushBuffer();
+  });
+
+  it("constructor", function () {
+    var kineticLaw = new KineticLaw({
+      "parameterIds": [],
+      "definition": '<math xmlns="http://www.w3.org/1998/Math/MathML">' +
+      '<apply xmlns="http://www.w3.org/1998/Math/MathML">' +
+      '<divide/><apply><times/><ci>ca1</ci><apply><plus/><ci>sa1</ci><ci>sa2</ci></apply></apply><cn type=\"integer\"> 2 </cn>' +
+      '</apply></math>',
+      "functionIds": []
+    });
+    assert.ok(kineticLaw);
+    assert.ok(kineticLaw.getDefinition().indexOf("apply") >= 0);
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/Reaction-test.js b/frontend-js/src/test/js/map/data/Reaction-test.js
index c1d97443cd..f6050668e5 100644
--- a/frontend-js/src/test/js/map/data/Reaction-test.js
+++ b/frontend-js/src/test/js/map/data/Reaction-test.js
@@ -3,47 +3,63 @@
 require("../../mocha-config.js");
 
 var Reaction = require('../../../../main/js/map/data/Reaction');
+var KineticLaw = require('../../../../main/js/map/data/KineticLaw');
 var assert = require('assert');
 
 var logger = require('../../logger');
 
 describe('Reaction', function () {
 
-  it("constructor from invalid", function () {
-    var javaObject = {
-      lines: [{
-        start: Object,
-        end: Object,
-        type: "UNK"
-      }]
-
-    };
-    try {
-      new Reaction(javaObject);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("Unknown line type") >= 0);
-    }
-  });
 
-  it("constructor from invalid 2", function () {
-    var javaObject = {
-      lines: []
+  describe("constructor", function () {
+    it("invalid line type", function () {
+      var javaObject = {
+        lines: [{
+          start: Object,
+          end: Object,
+          type: "UNK"
+        }]
+      };
+      try {
+        new Reaction(javaObject);
+      } catch (exception) {
+        assert.ok(exception.message.indexOf("Unknown line type") >= 0);
+      }
+    });
+    it("invalid center point", function () {
+      var javaObject = {
+        lines: []
+      };
+      try {
+        new Reaction(javaObject);
+      } catch (exception) {
+        assert.ok(exception.message.indexOf("undefined center") >= 0);
+      }
+    });
 
-    };
-    try {
-      new Reaction(javaObject);
-    } catch (exception) {
-      assert.ok(exception.message.indexOf("undefined center") >= 0);
-    }
-  });
 
-  it("constructor from Reaction", function () {
-    var reaction = helper.createReaction();
-    var reaction2 = new Reaction(reaction);
-    assert.equal(reaction2.getId(), reaction.getId());
-    assert.equal(reaction2.getCenter(), reaction.getCenter());
-    assert.equal(reaction2.getModelId(), reaction.getModelId());
-    assert.deepEqual(reaction2.getLines(), reaction.getLines());
-    assert.equal(logger.getWarnings().length, 0);
+    it("from Reaction", function () {
+      var reaction = helper.createReaction();
+      var reaction2 = new Reaction(reaction);
+      assert.equal(reaction2.getId(), reaction.getId());
+      assert.equal(reaction2.getCenter(), reaction.getCenter());
+      assert.equal(reaction2.getModelId(), reaction.getModelId());
+      assert.deepEqual(reaction2.getLines(), reaction.getLines());
+      assert.equal(logger.getWarnings().length, 0);
+    });
+
+    it("with empty Kinetics", function () {
+      var javaObject = {
+        reactionId: "re1",
+        references: [],
+        type: "",
+        lines: [],
+        centerPoint: {x: 0, y: 0},
+        kineticLaw: {}
+      };
+      var reaction = new Reaction(javaObject);
+      assert.ok(reaction.getKineticLaw() instanceof KineticLaw);
+    });
+
   });
 });
-- 
GitLab