From 644918bcd78be377e3801e2f98a8bc5d4776ddde Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Tue, 30 May 2017 13:26:44 +0200 Subject: [PATCH] AliasMarker takes identifiedelement as an argument --- frontend-js/src/main/js/map/CustomMap.js | 7 +-- .../src/main/js/map/marker/AbstractMarker.js | 4 +- .../src/main/js/map/marker/AliasMarker.js | 42 ++++++++++----- .../src/main/js/map/marker/PointMarker.js | 2 +- .../src/main/js/map/marker/ReactionMarker.js | 2 +- .../src/test/js/map/AbstractCustomMap-test.js | 31 +++++++---- .../test/js/map/marker/AliasMarker-test.js | 51 ++++++++++++------- 7 files changed, 92 insertions(+), 47 deletions(-) diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index c28504f7e7..a56def99de 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -1236,9 +1236,10 @@ CustomMap.prototype.createMarkerForDbOverlay = function(element, dbOverlay) { var model = self.getSubmapById(element.getModelId()); if (element.getType() === "ALIAS") { - return model.getModel().getAliasById(element.getId()).then(function(aliasData) { - return new AliasMarker(element.getId(), element.getIcon(), aliasData, model); - }); + var marker = new AliasMarker(element, self); + return marker.init().then(function(){ + 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); diff --git a/frontend-js/src/main/js/map/marker/AbstractMarker.js b/frontend-js/src/main/js/map/marker/AbstractMarker.js index d7bb24a666..3305822e93 100644 --- a/frontend-js/src/main/js/map/marker/AbstractMarker.js +++ b/frontend-js/src/main/js/map/marker/AbstractMarker.js @@ -109,7 +109,7 @@ AbstractMarker.prototype.setMap = function(map) { /** * Initializes google.maps.Marker object connected to this object. */ -AbstractMarker.prototype.init = function() { +AbstractMarker.prototype._init = function() { var self = this; var point = this.getCoordinates(); var latLng = this.getCustomMap().fromPointToLatLng(point); @@ -128,7 +128,7 @@ AbstractMarker.prototype.init = function() { }; })(); google.maps.event.addListener(this.getGoogleMarker(), 'click', onclick); - + return Promise.resolve(); }; /** diff --git a/frontend-js/src/main/js/map/marker/AliasMarker.js b/frontend-js/src/main/js/map/marker/AliasMarker.js index 6ba49483a2..b06f3ae9b3 100644 --- a/frontend-js/src/main/js/map/marker/AliasMarker.js +++ b/frontend-js/src/main/js/map/marker/AliasMarker.js @@ -1,24 +1,20 @@ "use strict"; var AbstractMarker = require('./AbstractMarker'); +var IdentifiedElement = require('../data/IdentifiedElement'); /** * This class describes Google maps marker (connected to {@link Alias}) that is * visualized on the map. */ -function AliasMarker(id, icon, aliasData, map) { - AbstractMarker.call(this, icon, map); - // id of the alias to which marker is connected - this._id = id; - // data about the Alias connected to the marker - this._aliasData = aliasData; - // google.maps.Marker object - this._marker = null; - if (this._aliasData === null || this._aliasData === undefined) { - throw new Error("Alias for marker must be defined"); +function AliasMarker(element, map) { + if (!(element instanceof IdentifiedElement)) { + throw new Error("First argument must be of IdentifiedElement class"); } - this.init(); - this.show(); + AbstractMarker.call(this, element.getIcon(), map); + // id of the alias to which marker is connected + this.setId(element.getId()); + this.setIdentifiedElement(element); } AliasMarker.prototype = Object.create(AbstractMarker.prototype); AliasMarker.prototype.constructor = AliasMarker; @@ -31,6 +27,9 @@ AliasMarker.prototype.constructor = AliasMarker; AliasMarker.prototype.getId = function() { return this._id; }; +AliasMarker.prototype.setId = function(id) { + this._id = id; +}; /** * Returns {@link Alias} data for this marker. @@ -74,4 +73,23 @@ AliasMarker.prototype.getModelId = function() { return this.getAliasData().getModelId(); }; +AliasMarker.prototype.init = function() { + var self = this; + var model = self.getCustomMap().getModel().getSubmodelById(self.getIdentifiedElement().getModelId()); + return model.getByIdentifiedElement(self.getIdentifiedElement()).then(function(aliasData) { + self.setAliasData(aliasData); + return self._init(); + }).then(function() { + self.show(); + }); +}; + +AliasMarker.prototype.getIdentifiedElement = function() { + return this._identifiedElement; +}; + +AliasMarker.prototype.setIdentifiedElement = function(identifiedElement) { + this._identifiedElement = identifiedElement; +}; + module.exports = AliasMarker; diff --git a/frontend-js/src/main/js/map/marker/PointMarker.js b/frontend-js/src/main/js/map/marker/PointMarker.js index 7f24a72767..6c2afb3310 100644 --- a/frontend-js/src/main/js/map/marker/PointMarker.js +++ b/frontend-js/src/main/js/map/marker/PointMarker.js @@ -16,7 +16,7 @@ function PointMarker(pointData, icon, map) { if (typeof map === "undefined") { throw new Error("Map must be passed"); } - this.init(); + this._init(); this.show(); } PointMarker.prototype = Object.create(AbstractMarker.prototype); diff --git a/frontend-js/src/main/js/map/marker/ReactionMarker.js b/frontend-js/src/main/js/map/marker/ReactionMarker.js index 6199fd525a..789aa8c04d 100644 --- a/frontend-js/src/main/js/map/marker/ReactionMarker.js +++ b/frontend-js/src/main/js/map/marker/ReactionMarker.js @@ -15,7 +15,7 @@ function ReactionMarker(id, icon, reactionData, map) { // google.maps.Marker object this._marker = null; if (this._reactionData !== null && this._reactionData !== undefined) { - this.init(); + this._init(); this.show(); } } diff --git a/frontend-js/src/test/js/map/AbstractCustomMap-test.js b/frontend-js/src/test/js/map/AbstractCustomMap-test.js index 82abf3c8f7..2f54aa65b9 100644 --- a/frontend-js/src/test/js/map/AbstractCustomMap-test.js +++ b/frontend-js/src/test/js/map/AbstractCustomMap-test.js @@ -8,6 +8,7 @@ var AliasMarker = require('../../../main/js/map/marker/AliasMarker'); var AbstractCustomMap = require('../../../main/js/map/AbstractCustomMap'); var PointData = require('../../../main/js/map/data/PointData'); var PointMarker = require('../../../main/js/map/marker/PointMarker'); +var IdentifiedElement = require('../../../main/js/map/data/IdentifiedElement'); var chai = require('chai'); var assert = chai.assert; @@ -288,15 +289,25 @@ describe('AbstractCustomMap', function() { }); it("_openInfoWindowForMarker(AliasMarker)", function() { - var mockObject = helper.createCustomMap(); - - var data = helper.createAlias(mockObject); - data.setIsComplete(true); - var aliasMarker = new AliasMarker(data.getId(), "empty.png", data, mockObject); - - assert.equal(null, mockObject.getAliasInfoWindowById(data.getId())); - return mockObject._openInfoWindowForMarker(aliasMarker).then(function(){ - assert.ok(mockObject.getAliasInfoWindowById(data.getId())); + var map; + var alias, marker; + return ServerConnector.getProject().then(function(project) { + map = helper.createCustomMap(project); + return map.getModel().getAliasById(329171); + }).then(function(result) { + alias = result; + + var identifiedElement = new IdentifiedElement(alias); + identifiedElement.setIcon("empty.png"); + + marker = new AliasMarker(identifiedElement, map); + + return marker.init(); + }).then(function(){ + assert.equal(null, map.getAliasInfoWindowById(alias.getId())); + return map._openInfoWindowForMarker(marker).then(function() { + assert.ok(map.getAliasInfoWindowById(alias.getId())); + }); }); }); @@ -307,7 +318,7 @@ describe('AbstractCustomMap', function() { mockObject.getTopMap = function() { return mockObject; }; - mockObject.getOverlayDataForPoint= function() { + mockObject.getOverlayDataForPoint = function() { return Promise.resolve([]); }; diff --git a/frontend-js/src/test/js/map/marker/AliasMarker-test.js b/frontend-js/src/test/js/map/marker/AliasMarker-test.js index f2d1d916c4..5b1311374e 100644 --- a/frontend-js/src/test/js/map/marker/AliasMarker-test.js +++ b/frontend-js/src/test/js/map/marker/AliasMarker-test.js @@ -3,6 +3,7 @@ var Helper = require('../../Helper'); var AliasMarker = require('../../../../main/js/map/marker/AliasMarker'); +var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement'); var assert = require('assert'); describe('AliasMarker', function() { @@ -12,29 +13,43 @@ describe('AliasMarker', function() { }); it("Constructor", function() { - var map = helper.createAbstractCustomMap(); - var alias = helper.createAlias(map); - - var aliasMarker = new AliasMarker(alias.getId(), "empty.png", alias, map); - - assert.equal(alias.getId(), aliasMarker.getId()); - assert.equal(map, aliasMarker.getCustomMap()); - assert.equal("empty.png", aliasMarker.getIcon()); - assert.equal(alias, aliasMarker.getAliasData()); - - assert.ok(aliasMarker._marker); - assert.ok(aliasMarker.getBounds()); + var map; + var alias, marker; + return ServerConnector.getProject().then(function(project) { + map = helper.createCustomMap(project); + return map.getModel().getAliasById(329171); + }).then(function(result) { + alias = result; + + var identifiedElement = new IdentifiedElement(alias); + identifiedElement.setIcon("empty.png"); + + marker = new AliasMarker(identifiedElement, map); + + assert.equal(alias.getId(), marker.getId()); + assert.equal(map, marker.getCustomMap()); + assert.equal("empty.png", marker.getIcon()); + return marker.init(); + }).then(function() { + assert.equal(alias, marker.getAliasData()); + assert.ok(marker._marker); + assert.ok(marker.getBounds()); + }); }); it("click on marker", function() { - return ServerConnector.getProject().then(function(project){ - var map = helper.createCustomMap(project); - var alias = helper.createAlias(map); + var map; + return ServerConnector.getProject().then(function(project) { + map = helper.createCustomMap(project); + return map.getModel().getAliasById(329171); + }).then(function(alias) { + + var identifiedElement = new IdentifiedElement(alias); + + var aliasMarker = new AliasMarker(identifiedElement, map); - var aliasMarker = new AliasMarker(alias.getId(), "empty.png", alias, map); + return google.maps.event.trigger(aliasMarker.getGoogleMarker(), "click").then(function() { - return google.maps.event.trigger(aliasMarker.getGoogleMarker(), "click").then(function(){ - }); }); }); -- GitLab