diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index c28504f7e70433ffc6fb2d8d7b00f4b0ea1ce671..a56def99de751f555db7c6c4cde8c363ba3a9655 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 d7bb24a6667359958dc6490109da748740276b72..3305822e934a36c4ee57393b84698618c4e78b40 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 6ba49483a21b9f4bbab180942f35ee762ebbd154..b06f3ae9b3a28a74be8708b4af045ae96e26a319 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 7f24a727679100509040372cf1fcfc70c22e6e26..6c2afb331062bcf3226945bf5c20bd149f662311 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 6199fd525a011263ca0170b55b64a21cccb3b5bd..789aa8c04dea31609f9596fd2adf081b9719143f 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 82abf3c8f702d616437740b01f2a72fc9bf9c66a..2f54aa65b926fe769770555991eaff2f693d7fd5 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 f2d1d916c44ee4c0f6dbea78a956a09d8bba68cf..5b1311374e8278124bc924807b65017e6220e6f5 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(){ - }); }); });