From 51f662b749cc9e99eb94d282b30ef2df6a07fc03 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 26 Jun 2017 14:12:13 +0200 Subject: [PATCH] when creating two markers for the same element, second creation is update --- frontend-js/src/main/js/map/CustomMap.js | 25 ++++++++------- .../src/main/js/map/marker/AbstractMarker.js | 19 ++++++++++- .../src/main/js/map/marker/AliasMarker.js | 7 ---- frontend-js/src/test/js/google-map-mock.js | 3 ++ frontend-js/src/test/js/map/CustomMap-test.js | 32 +++++++++++++++---- 5 files changed, 60 insertions(+), 26 deletions(-) diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index bab6b40568..8f61639fcf 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -726,10 +726,7 @@ CustomMap.prototype.renderOverlayCollection = function(overlayCollection, fitBou var icon = element.getIcon(); if (icon !== null && icon !== undefined) { return self.createMarkerForDbOverlay(element, overlayCollection).then(function(marker) { - if (marker !== null) { - overlayCollection.markers[element.getType()][element.getId()] = marker; - markers.push(marker); - } + markers.push(marker); }); } else { return self.createMapOverlayForDbOverlay(element, overlayCollection).then(function(mapOverlay) { @@ -1227,27 +1224,31 @@ CustomMap.prototype.getVisibleDataOverlays = function() { CustomMap.prototype.createMarkerForDbOverlay = function(element, dbOverlay) { var self = this; - if (dbOverlay.markers[element.getType()][element.getId()] !== undefined) { - if (element.getType() === "ALIAS") { - logger.warn("More than one marker in " + dbOverlay.getName() + " for alias " + element.getId() - + ". Skipping duplicates."); - } - return Promise.resolve(null); + var result = dbOverlay.markers[element.getType()][element.getId()]; + if (result !== undefined) { + result.updateIdentifiedElement(element); + dbOverlay.markers[element.getType()][element.getId()] = result; + return Promise.resolve(result); } var model = self.getSubmapById(element.getModelId()); if (element.getType() === "ALIAS") { var marker = new AliasMarker(element, self); return marker.init().then(function() { + dbOverlay.markers[element.getType()][element.getId()] = marker; return marker; }); } else if (element.getType() === "REACTION") { return model.getModel().getReactionById(element.getId()).then(function(reactionData) { - return new ReactionMarker(element.getId(), element.getIcon(), reactionData, model); + result = new ReactionMarker(element.getId(), element.getIcon(), reactionData, model); + dbOverlay.markers[element.getType()][element.getId()] = result; + return result; }); } else if (element.getType() === "POINT") { var pointData = model.getModel().getPointDataByPoint(element.getPoint()); - return Promise.resolve(new PointMarker(pointData, element.getIcon(), model)); + var result = new PointMarker(pointData, element.getIcon(), model); + dbOverlay.markers[element.getType()][element.getId()] = result; + return Promise.resolve(result); } else { throw new Error("Unknown type of the element in overlay: " + element.type); } diff --git a/frontend-js/src/main/js/map/marker/AbstractMarker.js b/frontend-js/src/main/js/map/marker/AbstractMarker.js index 82b1fd7454..9abae7876b 100644 --- a/frontend-js/src/main/js/map/marker/AbstractMarker.js +++ b/frontend-js/src/main/js/map/marker/AbstractMarker.js @@ -29,7 +29,12 @@ AbstractMarker.prototype.getIcon = function() { }; AbstractMarker.prototype.setIcon = function(icon) { - this._icon = icon; + var self = this; + self._icon = icon; + var googleMarker = self.getGoogleMarker(); + if (googleMarker !== undefined) { + googleMarker.setIcon(GuiConnector.getImgPrefix() + self.getIcon()); + } }; /** @@ -150,4 +155,16 @@ AbstractMarker.prototype.getType = function() { throw new Error("Not implemented"); }; +AbstractMarker.prototype.getIdentifiedElement = function() { + return this._identifiedElement; +}; + +AbstractMarker.prototype.updateIdentifiedElement = function(identifiedElement) { + this.setIcon(identifiedElement.getIcon()); +}; + +AbstractMarker.prototype.setIdentifiedElement = function(identifiedElement) { + this._identifiedElement = identifiedElement; +}; + module.exports = AbstractMarker; diff --git a/frontend-js/src/main/js/map/marker/AliasMarker.js b/frontend-js/src/main/js/map/marker/AliasMarker.js index b06f3ae9b3..51c6200f66 100644 --- a/frontend-js/src/main/js/map/marker/AliasMarker.js +++ b/frontend-js/src/main/js/map/marker/AliasMarker.js @@ -84,12 +84,5 @@ AliasMarker.prototype.init = function() { }); }; -AliasMarker.prototype.getIdentifiedElement = function() { - return this._identifiedElement; -}; - -AliasMarker.prototype.setIdentifiedElement = function(identifiedElement) { - this._identifiedElement = identifiedElement; -}; module.exports = AliasMarker; diff --git a/frontend-js/src/test/js/google-map-mock.js b/frontend-js/src/test/js/google-map-mock.js index 4c30bd8636..241ae6b789 100644 --- a/frontend-js/src/test/js/google-map-mock.js +++ b/frontend-js/src/test/js/google-map-mock.js @@ -141,6 +141,9 @@ var google = { this.setMap = function(map) { this.options.map = map; }; + this.setIcon = function(icon) { + this.options.icon = icon; + }; }, MarkerImage : function() { diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index cb49a04241..4e119dc683 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -33,12 +33,6 @@ describe('CustomMap', function() { assert.ok(map); }); - it("contructor", function() { - var options = helper.createCustomMapOptions(); - var map = new CustomMap(options); - assert.ok(map); - }); - it("contructor with submaps", function() { var options = helper.createCustomMapOptions(); @@ -830,4 +824,30 @@ describe('CustomMap', function() { assert.equal(map.getSelectedArea(), null); }); + describe("createMarkerForDbOverlay", function() { + it("update marker", function() { + var map; + var marker1, marker2; + var element = new IdentifiedElement({ + id : 329159, + modelId : 15781, + type : "ALIAS" + }); + var overlay; + return ServerConnector.getProject().then(function(project) { + var options = helper.createCustomMapOptions(project); + map = new CustomMap(options); + overlay = helper.createDbOverlay(map); + return map.createMarkerForDbOverlay(element, overlay); + }).then(function(result){ + marker1 = result; + element.setIcon("another.png"); + return map.createMarkerForDbOverlay(element, overlay); + }).then(function(result){ + marker2 = result; + assert.equal(marker1, marker2); + }); + }); + }); + }); -- GitLab