From 391c28a2ec0d1d2925fc8fcd474fe07340043aa7 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 9 Jun 2017 15:17:20 +0200
Subject: [PATCH] ReactionOverlay constructor refactored to accept dict as a
 param

---
 .../src/main/js/gui/leftPanel/Footer.js       |  2 +-
 .../src/main/js/map/AbstractCustomMap.js      |  8 ++-
 frontend-js/src/main/js/map/CustomMap.js      | 11 ++--
 .../main/js/map/overlay/ReactionOverlay.js    | 50 ++++++++++++-------
 frontend-js/src/main/js/minerva.js            | 45 ++++++++++++-----
 .../js/map/overlay/ReactionOverlay-test.js    | 14 +++++-
 frontend-js/src/test/js/minerva-test.js       |  7 ++-
 7 files changed, 96 insertions(+), 41 deletions(-)

diff --git a/frontend-js/src/main/js/gui/leftPanel/Footer.js b/frontend-js/src/main/js/gui/leftPanel/Footer.js
index a673ff93ad..7b4c454803 100644
--- a/frontend-js/src/main/js/gui/leftPanel/Footer.js
+++ b/frontend-js/src/main/js/gui/leftPanel/Footer.js
@@ -87,7 +87,7 @@ Footer.prototype.removeLoadMessage = function(message) {
   if (index > -1) {
     self._loadMessages.splice(index, 1);
   } else {
-    logger.warn("Removing message that is not there: " + message);
+    logger.debug("Removing message that is not there: " + message);
   }
 };
 
diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index be0c59335f..f4d354085a 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -604,7 +604,13 @@ AbstractCustomMap.prototype._showSelectedLayout = function(layoutId, index, leng
       return Promise.each(layoutReactions, function(layoutReaction) {
         if (layoutReaction.getModelId() === self.getId()) {
           return self.getModel().getReactionById(layoutReaction.getId()).then(function(reactionData) {
-            var reactionOverlay = new ReactionOverlay(layoutReaction, reactionData, self, length === 1);
+            var reactionOverlay = new ReactionOverlay({
+              layoutReaction : layoutReaction,
+              reaction : reactionData,
+              map : self,
+              customized : (length === 1)
+            });
+
             self.selectedLayoutOverlays[layoutId].push(reactionOverlay);
             reactionOverlay.show();
           });
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 366dc77be1..32c404ef81 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -1260,12 +1260,17 @@ CustomMap.prototype.createMapOverlayForDbOverlay = function(element, dbOverlay)
     return Promise.resolve(null);
   }
 
-  var model = self.getSubmapById(element.getModelId());
+  var map = self.getSubmapById(element.getModelId());
   if (element.getType() === "ALIAS") {
     return AliasOverlay.createFromIdentifiedElement(element, self);
   } else if (element.getType() === "REACTION") {
-    return model.getModel().getReactionById(element.getId()).then(function(reactionData) {
-      var reactionOverlay = new ReactionOverlay(null, reactionData, model, false, element.getId());
+    return map.getModel().getReactionById(element.getId()).then(function(reactionData) {
+      var reactionOverlay = new ReactionOverlay({
+        reaction : reactionData,
+        map : map,
+        customized : false,
+        color : element.getColor(),
+      });
       reactionOverlay.show();
       return reactionOverlay;
     });
diff --git a/frontend-js/src/main/js/map/overlay/ReactionOverlay.js b/frontend-js/src/main/js/map/overlay/ReactionOverlay.js
index 4993c514ed..b679c379db 100644
--- a/frontend-js/src/main/js/map/overlay/ReactionOverlay.js
+++ b/frontend-js/src/main/js/map/overlay/ReactionOverlay.js
@@ -21,33 +21,33 @@ var AbstractOverlayElement = require('./AbstractOverlayElement');
  *          visualized (there is no simple way to visualize few layouts at the
  *          same time)
  */
-function ReactionOverlay(layoutReaction, reactionData, map, customized) {
+function ReactionOverlay(params) {
   // call super constructor
   AbstractOverlayElement.call();
 
-  this.color = "#FF0000";
+  var overlayData = params.layoutReaction;
+  this.setReactionData(params.reaction);
+  this.setCustomMap(params.map);
+  this.setCustomized(params.customized);
+
+  var color = params.color;
   this.width = 5.0;
   // list of google map objects associated with the reaction (like lines)
   this.gmapObjects = [];
-  // AbstractCustomMap where the reaction is located
-  this.customMap = map;
-  // original data
-  this.reactionData = reactionData;
-
-  this.customized = customized;
 
-  if (reactionData === undefined || reactionData === null) {
-    throw new Error("Reaction must be defined");
-  }
-
-  if (layoutReaction !== undefined && layoutReaction !== null) {
-    if (layoutReaction.width) {
-      this.width = layoutReaction.width;
+  if (overlayData !== undefined && overlayData !== null) {
+    if (overlayData.width) {
+      this.width = overlayData.width;
     }
-    this.color = functions.overlayToColor(layoutReaction);
+    color = functions.overlayToColor(overlayData);
+  }
+  if (color === undefined) {
+    color = "#FF0000";
   }
+
+  this.setColor(color);
+
   this.init();
-  this._id = reactionData.getId();
 }
 
 ReactionOverlay.prototype = Object.create(AbstractOverlayElement.prototype);
@@ -84,6 +84,10 @@ ReactionOverlay.prototype.setMap = function(map) {
   }
 };
 
+ReactionOverlay.prototype.setCustomized = function(customized) {
+  this.customized = customized;
+};
+
 /**
  * Returns <code>true</code> if the object is visible on the map,
  * <code>false</code> otherwise.
@@ -269,12 +273,24 @@ ReactionOverlay.prototype.getCustomMap = function() {
   return this.customMap;
 };
 
+ReactionOverlay.prototype.setCustomMap = function(customMap) {
+  this.customMap = customMap;
+};
+
 ReactionOverlay.prototype.getId = function() {
   return this._id;
 };
 
+ReactionOverlay.prototype.setId = function(id) {
+  this._id = id;
+};
+
 ReactionOverlay.prototype.setReactionData = function(value) {
+  if (value === undefined || value === null) {
+    throw new Error("Reaction must be defined");
+  }
   this.reactionData = value;
+  this.setId(value.getId());
 };
 
 ReactionOverlay.prototype.isCustomized = function() {
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index 5efacbec75..78d17fc441 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -167,25 +167,28 @@ function getOverlayByName(customMap, dbOverlayName) {
   }
 }
 
-function createMarkerElements(params, type, isDefault) {
+function createMarkerElements(options) {
+  var params = options.params;
+  var filteredType = options.filteredType;
+  var isDefault = options.isDefault;
+
   var markerElements = [];
   if (params.length === undefined) {
     params = [ params ];
   }
   for (var i = 0; i < params.length; i++) {
     var elementParam = params[i];
-    if (elementParam.options === undefined && isDefault) {
+    if (elementParam.type === undefined && isDefault) {
       markerElements.push({
         element : elementParam.element,
       });
-    } else if (elementParam.options.type === type) {
+    } else if (elementParam.type === filteredType) {
       markerElements.push({
         element : elementParam.element,
-        icon : elementParam.options.icon,
-        color : elementParam.options.color,
+        options : elementParam.options,
       });
-    } else if (elementParam.options.type !== "ICON" && elementParam.options.type !== "SURFACE") {
-      throw new Error("Unknown type:" + elementParam.options.type);
+    } else if (elementParam.type !== "ICON" && elementParam.type !== "SURFACE") {
+      throw new Error("Unknown type:" + elementParam.type);
     }
   }
   return markerElements;
@@ -235,15 +238,31 @@ function createResult(customMap) {
       });
     },
     showBioEntity : function(params) {
-      var iconElements = createMarkerElements(params, "ICON", true);
-      var surfaceElements = createMarkerElements(params, "SURFACE", false);
+      var iconElements = createMarkerElements({
+        params : params,
+        filteredType : "ICON",
+        isDefault : true
+      });
+      var surfaceElements = createMarkerElements({
+        params : params,
+        filteredType : "SURFACE",
+        isDefault : false
+      });
       return customMap.getOverlayByName("user").addMarker(iconElements).then(function() {
         return customMap.getOverlayByName("user").addSurface(surfaceElements);
       });
     },
     hideBioEntity : function(params) {
-      var iconElements = createMarkerElements(params, "ICON", true);
-      var surfaceElements = createMarkerElements(params, "SURFACE", false);
+      var iconElements = createMarkerElements({
+        params : params,
+        filteredType : "ICON",
+        isDefault : true
+      });
+      var surfaceElements = createMarkerElements({
+        params : params,
+        filteredType : "SURFACE",
+        isDefault : false
+      });
       return customMap.getOverlayByName("user").removeMarker(iconElements).then(function() {
         return customMap.getOverlayByName("user").removeSurface(surfaceElements);
       });
@@ -330,8 +349,8 @@ function create(params) {
   params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>"
       + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>";
 
-  //make sure that we are logged in
-  return ServerConnector.getToken().then(function(){
+  // make sure that we are logged in
+  return ServerConnector.getToken().then(function() {
     return getProject(params);
   }).then(function(project) {
     params.setProject(project);
diff --git a/frontend-js/src/test/js/map/overlay/ReactionOverlay-test.js b/frontend-js/src/test/js/map/overlay/ReactionOverlay-test.js
index 09e2e7664f..b653166955 100644
--- a/frontend-js/src/test/js/map/overlay/ReactionOverlay-test.js
+++ b/frontend-js/src/test/js/map/overlay/ReactionOverlay-test.js
@@ -20,7 +20,12 @@ describe('ReactionOverlay', function() {
     var reaction = helper.createReaction(map);
     var layoutReaction = helper.createLayoutReaction(reaction);
 
-    var reactionOverlay = new ReactionOverlay(layoutReaction, reaction, map, false);
+    var reactionOverlay = new ReactionOverlay({
+      overlayData : layoutReaction,
+      reaction : reaction,
+      map : map,
+      customized : false
+    });
 
     assert.ok(reactionOverlay.gmapObjects);
     assert.ok(reactionOverlay.getColor());
@@ -37,7 +42,12 @@ describe('ReactionOverlay', function() {
     var reaction = helper.createReaction(map);
     var layoutReaction = helper.createLayoutReaction(reaction);
 
-    var reactionOverlay = new ReactionOverlay(layoutReaction, reaction, map, false);
+    var reactionOverlay = new ReactionOverlay({
+      overlayData : layoutReaction,
+      reaction : reaction,
+      map : map,
+      customized : false
+    });
 
     reactionOverlay.hide();
     assert.equal(reactionOverlay.isShown(), false);
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 989a7079ea..45cc2be432 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -281,9 +281,7 @@ describe('minerva global', function() {
         modelId : 15781,
         type : "ALIAS"
       },
-      options : {
-        type : "ICON"
-      }
+      type : "ICON",
     };
 
     var elementToShow2 = {
@@ -292,8 +290,9 @@ describe('minerva global', function() {
         modelId : 15781,
         type : "ALIAS"
       },
+      type : "SURFACE",
       options : {
-        type : "SURFACE"
+        color : "#FF0000",
       }
     };
     return minerva.create(options).then(function(result) {
-- 
GitLab