diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js index abf9eedc134329defe54ed3a23a25a832617370c..0241373a2a9e94f7b5340386df18834ba286911b 100644 --- a/frontend-js/src/main/js/map/AbstractCustomMap.js +++ b/frontend-js/src/main/js/map/AbstractCustomMap.js @@ -654,7 +654,7 @@ AbstractCustomMap.prototype._showSelectedLayout = function (layoutId, index, len startX: startX, endX: endX, onClick: [function () { - return self._openInfoWindowForAlias(aliasData, surface.getGoogleMarker()); + return self.getTopMap().getOverlayByName("search").searchByTarget(element); }, function () { return self.getTopMap().callListeners("onBioEntityClick", element); }] @@ -676,7 +676,7 @@ AbstractCustomMap.prototype._showSelectedLayout = function (layoutId, index, len reaction: reactionData, map: self, onClick: [function () { - return self._openInfoWindowForReaction(reactionData, surface.getGoogleMarker()); + return self.getTopMap().getOverlayByName("search").searchByTarget(element); }, function () { return self.getTopMap().callListeners("onBioEntityClick", element); }], diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js index 03001a285e37b1fae8f102c333a8c630e410dd73..3256bf80c97c09c0e00f8d29e764fb2948357b76 100644 --- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js @@ -86,7 +86,7 @@ SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedE var parent = new IdentifiedElement({ id: parentId, type: "ALIAS", - modelId: identifiedElement.getModelId(), + modelId: identifiedElement.getModelId() }); return self._getFirstVisibleParentOrObject(parent, zoomLevel, coordinates); } else { @@ -152,9 +152,8 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) { searchResult = [visibleObject]; if (searchResult[0].getType() === "REACTION") { return model.getReactionById(searchResult[0].getId(), true).then(function (reaction) { - var i = 0; var reactionElements = reaction.getElements(); - for (i = 0; i < reactionElements.length; i++) { + for (var i = 0; i < reactionElements.length; i++) { searchResult.push(new IdentifiedElement(reactionElements[i])); } }); @@ -167,7 +166,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) { return self.getMap().getDistance({ modelId: modelId, coordinates: coordinates, - element: searchResult[0], + element: searchResult[0] }); } else { return Number.POSITIVE_INFINITY; @@ -182,7 +181,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function (params) { return self.callListeners('onSearch', { fitBounds: params.fitBounds, identifiedElements: [self._elementsByQuery[query]], - type: AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES, + type: AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES }); }).then(function () { return self._elementsByQuery[query]; @@ -212,6 +211,29 @@ SearchDbOverlay.prototype.searchBySingleQuery = function (originalQuery, perfect } }; +SearchDbOverlay.prototype.searchByTarget = function (element) { + var self = this; + var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_TARGET, element); + + ServerConnector.getSessionData().setSearchQuery(query); + + if (self._elementsByQuery[query] === undefined) { + self._elementsByQuery[query] = [element]; + } + return self.getMap().fetchIdentifiedElements(element, true).then(function () { + self.setQueries([query]); + return self.callListeners('onSearch', { + fitBounds: false, + identifiedElements: [self._elementsByQuery[query]], + type: AbstractDbOverlay.QueryType.SEARCH_BY_TARGET + }); + }).then(function () { + return Promise.resolve(self._elementsByQuery[query]); + }); + +}; + + SearchDbOverlay.prototype.getIdentifiedElements = function () { var self = this; diff --git a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js index 3b2f590424bab6f119dce1589e977b279dea1b20..0821e7e5bbea02532c282ab7c10b308cdc0a5e07 100644 --- a/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js +++ b/frontend-js/src/test/js/map/overlay/SearchDbOverlay-test.js @@ -1,6 +1,7 @@ "use strict"; var logger = require('../../logger'); +require("../../mocha-config"); var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement'); var SearchDbOverlay = require('../../../../main/js/map/overlay/SearchDbOverlay'); @@ -10,12 +11,12 @@ var ServerConnector = require('../../ServerConnector-mock'); var assert = require('assert'); var Promise = require('bluebird'); -describe('SearchDbOverlay', function() { - it("constructor 1", function() { +describe('SearchDbOverlay', function () { + it("constructor 1", function () { var map = helper.createCustomMap(); var oc = new SearchDbOverlay({ - map : map, - name : 'search' + map: map, + name: 'search' }); assert.ok(oc); assert.equal(oc.getName(), 'search'); @@ -23,44 +24,44 @@ describe('SearchDbOverlay', function() { assert.equal(logger.getWarnings.length, 0); }); - it("searchByCoordinates with too far alias as result", function() { - return ServerConnector.getProject().then(function(project) { + it("searchByCoordinates with too far alias as result", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = { - modelId : map.getModel().getId(), - coordinates : new google.maps.Point(207.73, 479.18), - zoom : 4 + modelId: map.getModel().getId(), + coordinates: new google.maps.Point(207.73, 479.18), + zoom: 4 }; return searchDb.searchByCoordinates(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result.length, 0); }); }); - describe("searchByQuery", function() { - it("with perfectMatch", function() { - return ServerConnector.getProject().then(function(project) { + describe("searchByQuery", function () { + it("with perfectMatch", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); map.getModel().setId(15781); var searchDb = helper.createSearchDbOverlay(map); return searchDb.searchByQuery("s1", true); - }).then(function(result) { + }).then(function (result) { assert.equal(result.length, 1); assert.equal(result[0].length, 1); }); }); - it("check state when network problems", function() { + it("check state when network problems", function () { var problematicQuery = "sxx1"; var searchDb; - return ServerConnector.getProject().then(function(project) { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); searchDb = helper.createSearchDbOverlay(map); return searchDb.searchByQuery(problematicQuery); - }).then(null, function() { + }).then(null, function () { var queries = searchDb.getQueries(); var promises = []; for (var i = 0; i < queries.length; i++) { @@ -71,119 +72,139 @@ describe('SearchDbOverlay', function() { }); }); - it("searchByEncodedQuery", function() { - return ServerConnector.getProject().then(function(project) { - var map = helper.createCustomMap(project); - var searchDb = helper.createSearchDbOverlay(map); - var point = new google.maps.Point(316.05, 253.61); - var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES; - var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2); - return searchDb.searchByEncodedQuery(query); - }).then(function(result) { - assert.ok(result.length > 0); + describe("searchByEncodedQuery", function () { + it("SEARCH_BY_COORDINATES", function () { + return ServerConnector.getProject().then(function (project) { + var map = helper.createCustomMap(project); + var searchDb = helper.createSearchDbOverlay(map); + var point = new google.maps.Point(316.05, 253.61); + var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES; + var query = searchDb.encodeQuery(queryType, map.getModel().getId(), point, 2); + return searchDb.searchByEncodedQuery(query); + }).then(function (result) { + assert.ok(result.length > 0); + }); + }); + + it("SEARCH_BY_TARGET", function () { + return ServerConnector.getProject().then(function (project) { + var map = helper.createCustomMap(project); + var searchDb = helper.createSearchDbOverlay(map); + var queryType = AbstractDbOverlay.QueryType.SEARCH_BY_TARGET; + + var target = new IdentifiedElement({ + type: "ALIAS", + id: 329170, + modelId: 15781 + }); + var query = searchDb.encodeQuery(queryType, target); + return searchDb.searchByEncodedQuery(query); + }).then(function (result) { + assert.equal(result.length, 1); + }); }); }); - describe("searchByCoordinates", function() { - it("with too far reaction as result", function() { - return ServerConnector.getProject().then(function(project) { + describe("searchByCoordinates", function () { + it("with too far reaction as result", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = { - modelId : map.getModel().getId(), - coordinates : new google.maps.Point(553.10, 479.18), - zoom : 4 + modelId: map.getModel().getId(), + coordinates: new google.maps.Point(553.10, 479.18), + zoom: 4 }; return searchDb.searchByCoordinates(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result.length, 0); }); }); - it("on empty map", function() { + it("on empty map", function () { helper.setUrl("http://test/?id=empty"); - return ServerConnector.getProject().then(function(project) { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = { - modelId : map.getModel().getId(), - coordinates : new google.maps.Point(553.10, 479.18), - zoom : 4 + modelId: map.getModel().getId(), + coordinates: new google.maps.Point(553.10, 479.18), + zoom: 4 }; return searchDb.searchByCoordinates(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result.length, 0); }); }); - it("on hidden nested object", function() { - return ServerConnector.getProject().then(function(project) { + it("on hidden nested object", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = { - modelId : map.getModel().getId(), - coordinates : new google.maps.Point(316.05, 253.61), - zoom : 2 + modelId: map.getModel().getId(), + coordinates: new google.maps.Point(316.05, 253.61), + zoom: 2 }; return searchDb.searchByCoordinates(searchParams); - }).then(function(result) { + }).then(function (result) { // id of the parent assert.equal(result[0].getId(), 329159); }); }); - it("on nested object", function() { - return ServerConnector.getProject().then(function(project) { + it("on nested object", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = { - modelId : map.getModel().getId(), - coordinates : new google.maps.Point(316.05, 253.61), - zoom : 4 + modelId: map.getModel().getId(), + coordinates: new google.maps.Point(316.05, 253.61), + zoom: 4 }; return searchDb.searchByCoordinates(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result[0].getId(), 329159); }); }); }); - describe("getDetailDataByIdentifiedElement", function() { - it("get by alias", function() { - return ServerConnector.getProject().then(function(project) { + describe("getDetailDataByIdentifiedElement", function () { + it("get by alias", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = new IdentifiedElement({ - type : "ALIAS", - id : 329177, - modelId : project.getModel().getId() + type: "ALIAS", + id: 329177, + modelId: project.getModel().getId() }); return searchDb.getDetailDataByIdentifiedElement(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result.getId(), 329177); }); }); - it("get by point", function() { - return ServerConnector.getProject().then(function(project) { + it("get by point", function () { + return ServerConnector.getProject().then(function (project) { var map = helper.createCustomMap(project); var searchDb = helper.createSearchDbOverlay(map); var searchParams = new IdentifiedElement({ - type : "POINT", - id : "2,3", - modelId : project.getModel().getId() + type: "POINT", + id: "2,3", + modelId: project.getModel().getId() }); return searchDb.getDetailDataByIdentifiedElement(searchParams); - }).then(function(result) { + }).then(function (result) { assert.equal(result, null); }); });