From e45713db8e644a633f1bdfcb1a00acba840a43b6 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 6 Jan 2017 11:25:36 +0100
Subject: [PATCH] current center point of map is stored in js session

---
 frontend-js/src/main/js/ServerConnector.js    | 30 -------------------
 frontend-js/src/main/js/SessionData.js        | 18 +++++++++--
 frontend-js/src/main/js/SessionObjectType.js  |  1 +
 frontend-js/src/main/js/map/CustomMap.js      | 16 ++++------
 frontend-js/src/main/js/minerva.js            |  9 +++---
 .../src/test/js/ServerConnector-mock.js       | 16 ----------
 frontend-js/src/test/js/helper.js             |  1 +
 frontend-js/src/test/js/map/CustomMap-test.js | 12 ++++++++
 frontend-js/src/test/js/minerva-test.js       | 12 ++++++++
 .../webapp/WEB-INF/components/map/map.xhtml   |  3 --
 10 files changed, 52 insertions(+), 66 deletions(-)

diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index edf7f67043..c90be97065 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -49,36 +49,6 @@ ServerConnector.lastActualization = 0;
 
 ServerConnector._customMap = null;
 
-/**
- * Set x coordinate for {@link CustomMap} on the server side.
- */
-ServerConnector.setCenterCoordinateX = function(value) {
-  document.getElementById(ServerConnector.formIdentifier + ':centerCoordinateX').value = "" + value;
-};
-
-/**
- * Get x coordinate of the {@link CustomMap} at which it was last browsed.
- */
-ServerConnector.getCenterCoordinateX = function() {
-  var result = parseFloat(document.getElementById(ServerConnector.formIdentifier + ':centerCoordinateX').value);
-  return result;
-};
-
-/**
- * Set y coordinate for {@link CustomMap} on the server side.
- */
-ServerConnector.setCenterCoordinateY = function(value) {
-  document.getElementById(ServerConnector.formIdentifier + ':centerCoordinateY').value = "" + value;
-};
-
-/**
- * Get y coordinate of the {@link CustomMap} at which it was last browsed.
- */
-ServerConnector.getCenterCoordinateY = function() {
-  var result = parseFloat(document.getElementById(ServerConnector.formIdentifier + ':centerCoordinateY').value);
-  return result;
-};
-
 /**
  * Set layout that is currently browsed for {@link CustomMap} on the server
  * side.
diff --git a/frontend-js/src/main/js/SessionData.js b/frontend-js/src/main/js/SessionData.js
index fcf6eb61b1..9ae6c5e160 100644
--- a/frontend-js/src/main/js/SessionData.js
+++ b/frontend-js/src/main/js/SessionData.js
@@ -21,14 +21,11 @@ SessionData.prototype.getProjectId = function(project) {
 
 SessionData.prototype.getShowComments = function() {
   var key = this.getKey(SessionObjectType.SHOW_COMMENT);
-  
-  console.log("GET:",key,Cookies.get(key));
   return Cookies.get(key) === "true";
 };
 
 SessionData.prototype.setShowComments = function(value) {
   var key = this.getKey(SessionObjectType.SHOW_COMMENT);
-  console.log(key,value);
   Cookies.set(key, value + "");
 };
 
@@ -46,6 +43,21 @@ SessionData.prototype.getZoomLevel = function(model) {
   return value;
 };
 
+SessionData.prototype.setCenter = function(model, value) {
+  var key = this.getKey(SessionObjectType.CENTER, [ model.getId() ]);
+  Cookies.set(key, value.x + "," + value.y);
+};
+
+SessionData.prototype.getCenter = function(model) {
+  var key = this.getKey(SessionObjectType.CENTER, [ model.getId() ]);
+  var value = Cookies.get(key);
+  if (value !== undefined) {
+    var tmp = value.split(",");
+    value = new google.maps.Point(tmp[0], tmp[1]);
+  }
+  return value;
+};
+
 SessionData.prototype.getKey = function(type, args) {
   if (type === undefined) {
     throw new Error("Undefined type");
diff --git a/frontend-js/src/main/js/SessionObjectType.js b/frontend-js/src/main/js/SessionObjectType.js
index f861e19374..0dd6d984a3 100644
--- a/frontend-js/src/main/js/SessionObjectType.js
+++ b/frontend-js/src/main/js/SessionObjectType.js
@@ -1,6 +1,7 @@
 "use strict";
 
 var SessionObjectType = {
+  CENTER : "CENTER",
   SHOW_COMMENT : "SHOW_COMMENT",
   ZOOM_LEVEL : "ZOOM_LEVEL",
 };
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 1f6a13be86..4a32d180ad 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -692,10 +692,10 @@ CustomMap.prototype.setZoom = function(mapIdentifier, zoom) {
  */
 CustomMap.prototype.createMapChangedCallbacks = function() {
   var customMapSelf = this;
+  var sessionData = ServerConnector.getSessionData(customMapSelf.getProject()); 
   // listener for changing zoom level
   google.maps.event.addListener(this.getGoogleMap(), 'zoom_changed', function() {
-    ServerConnector.getSessionData(customMapSelf.getProject()).setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom());
-    ServerConnector.actualizeSessionData();
+    sessionData.setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom());
   });
 
   // if we have zoom level data stored in session then restore it
@@ -704,23 +704,19 @@ CustomMap.prototype.createMapChangedCallbacks = function() {
     level = parseInt(level);
     this.getGoogleMap().setZoom(level);
   } else {
-    ServerConnector.getSessionData(customMapSelf.getProject()).setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom());
+    sessionData.setZoomLevel(customMapSelf.getModel(),customMapSelf.getGoogleMap().getZoom());
   }
 
   // listener for changing location of the map (moving left/reght/top/bottom
   google.maps.event.addListener(this.getGoogleMap(), 'center_changed', function() {
     var coord = customMapSelf.getGoogleMap().getCenter();
     var point = customMapSelf.fromLatLngToPoint(coord);
-    ServerConnector.setCenterCoordinateX(point.x);
-    ServerConnector.setCenterCoordinateY(point.y);
-    ServerConnector.actualizeSessionData();
+    sessionData.setCenter(customMapSelf.getModel(),point);
   });
 
   // if we have coordinate data stored in session then restore it
-  var x = ServerConnector.getCenterCoordinateX();
-  var y = ServerConnector.getCenterCoordinateY();
-  if (!isNaN(x) && !isNaN(y)) {
-    var point = new google.maps.Point(x, y);
+  var point = sessionData.getCenter(customMapSelf.getModel());
+  if (point!== undefined) {
     var coord = customMapSelf.fromPointToLatLng(point);
     customMapSelf.getGoogleMap().setCenter(coord);
   }
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index 82a4466046..3aab0b86ef 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -12,19 +12,20 @@ var OriginalServerConnector = require('./ServerConnector');
 var logger = require('./logger');
 
 function processUrlGetParams(params) {
-  
   var project = params.project;
   if (project===undefined) {
     project = params.getProject();
   }
+  var sessionData = ServerConnector.getSessionData(project);
+  
   if (GuiConnector.getParams["submap"] === undefined
       || project.getModel().getId() === parseInt(GuiConnector.getParams["submap"])) {
     if (GuiConnector.getParams["x"] !== undefined && GuiConnector.getParams["y"] !== undefined) {
-      ServerConnector.setCenterCoordinateX(GuiConnector.getParams["x"]);
-      ServerConnector.setCenterCoordinateY(GuiConnector.getParams["y"]);
+      var point = new google.maps.Point(GuiConnector.getParams["x"],GuiConnector.getParams["y"]);
+      sessionData.setCenter(project.getModel(), point);
     }
     if (GuiConnector.getParams["zoom"] !== undefined) {
-        ServerConnector.getSessionData(project).setZoomLevel(project.getModel(),GuiConnector.getParams["zoom"]);
+        sessionData.setZoomLevel(project.getModel(),GuiConnector.getParams["zoom"]);
     }
   }
 }
diff --git a/frontend-js/src/test/js/ServerConnector-mock.js b/frontend-js/src/test/js/ServerConnector-mock.js
index de01740541..0452aac3f2 100644
--- a/frontend-js/src/test/js/ServerConnector-mock.js
+++ b/frontend-js/src/test/js/ServerConnector-mock.js
@@ -83,22 +83,6 @@ ServerConnectorMock.callListeners = function(type, param) {
   }
 };
 
-ServerConnectorMock.setCenterCoordinateX = function(value) {
-  this.centerCoordinateX = value;
-};
-
-ServerConnectorMock.getCenterCoordinateX = function() {
-  return this.centerCoordinateX;
-};
-
-ServerConnectorMock.setCenterCoordinateY = function(value) {
-  this.centerCoordinateY = value;
-};
-
-ServerConnectorMock.getCenterCoordinateY = function() {
-  return this.centerCoordinateY;
-};
-
 ServerConnectorMock.setSelectedLayout = function(value) {
   this.selectedLayout = value;
 };
diff --git a/frontend-js/src/test/js/helper.js b/frontend-js/src/test/js/helper.js
index bb4df82b77..7a61d23de1 100644
--- a/frontend-js/src/test/js/helper.js
+++ b/frontend-js/src/test/js/helper.js
@@ -84,6 +84,7 @@ Helper.prototype.createDbOverlay = function(map) {
 
 Helper.prototype.createProject = function() {
   var result = new Project();
+  result.setProjectId("testId");
   result.setId(this.idCounter++);
   result.setModel(this.createModel());
   return result;
diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js
index b175a02339..dfffd45098 100644
--- a/frontend-js/src/test/js/map/CustomMap-test.js
+++ b/frontend-js/src/test/js/map/CustomMap-test.js
@@ -542,6 +542,18 @@ describe('CustomMap', function() {
     assert.ok(ServerConnector.getSessionData(map.getProject()).getShowComments());
   });
 
+  it("changed coords in map", function() {
+    var map = helper.createCustomMap();
+    var oldCenter = map.getGoogleMap().getCenter();
+    var newCenter = new google.maps.LatLng(3, 87);
+    map.getGoogleMap().setCenter(newCenter);
+    google.maps.event.trigger(map.getGoogleMap(), "center_changed");
+
+    var center = ServerConnector.getSessionData(map.getProject()).getCenter(map.getModel());
+    assert.ok(center !== oldCenter);
+    assert.ok(center instanceof google.maps.Point);
+  });
+
   it("refreshComments", function() {
     var map = helper.createCustomMap();
     map.getModel().setId(15781);
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 049dcbe46b..b362a76450 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -34,6 +34,18 @@ describe('minerva global', function() {
     });
   });
 
+  it("contructor with GET coord param", function() {
+    var options = helper.createCustomMapOptions();
+    GuiConnector.getParams["x"] = "5";
+    GuiConnector.getParams["y"] = "6";
+    return minerva.create(options).then(function(result) {
+      var center = ServerConnector.getSessionData(options.getProject()).getCenter(options.getProject().getModel());
+      assert.ok(center instanceof google.maps.Point);
+      assert.equal(center.x, 5);
+      assert.equal(center.y, 6);
+    });
+  });
+
 
   it('create with layout', function() {
 
diff --git a/web/src/main/webapp/WEB-INF/components/map/map.xhtml b/web/src/main/webapp/WEB-INF/components/map/map.xhtml
index 1d3cf83541..4efd454de1 100644
--- a/web/src/main/webapp/WEB-INF/components/map/map.xhtml
+++ b/web/src/main/webapp/WEB-INF/components/map/map.xhtml
@@ -38,9 +38,6 @@
 			<h:inputHidden id="selectedDrugPolygon" value="#{drugMB.polygon}"/>
 
 			<p:remoteCommand name="_actualizeParams" actionListener="#{mapMB.actualizeParams}"/>
-			<h:inputHidden id="centerCoordinateX" value="#{mapMB.topModelMapData.centerCoordinateX}"/>
-			<h:inputHidden id="centerCoordinateY" value="#{mapMB.topModelMapData.centerCoordinateY}"/>
-			<h:inputHidden id="zoomLevel" value="#{mapMB.topModelMapData.zoomLevel}"/>
 			<h:inputHidden id="selectedLayout" value="#{mapMB.topModelMapData.selectedLayout}"/>
 
 			<h:panelGroup layout="block" id="submodelDialogGroup">
-- 
GitLab