diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js index 87070fd26cebaef9099722450ab23ae2554bffc8..fd67dfe09eb02a46d8eaadcd979f00e9b746a72f 100644 --- a/frontend-js/src/main/js/GuiConnector.js +++ b/frontend-js/src/main/js/GuiConnector.js @@ -99,10 +99,6 @@ GuiConnector.init = function() { }; -GuiConnector.search = function(query) { - this.searchPanel.search(query); -}; - /** * Returns name of the file with LCSB logo. * diff --git a/frontend-js/src/main/js/SessionData.js b/frontend-js/src/main/js/SessionData.js index 2bf1f6286f47ef5b4796ea42d2141a664d850028..65fe605882bec4a8ce5517c454a6a0a013355ed2 100644 --- a/frontend-js/src/main/js/SessionData.js +++ b/frontend-js/src/main/js/SessionData.js @@ -24,6 +24,20 @@ SessionData.prototype.getShowComments = function() { return Cookies.get(key) === "true"; }; +SessionData.prototype.setSearchQuery = function(value) { + var key = this.getKey(SessionObjectType.SEARCH_QUERY); + Cookies.set(key, JSON.stringify(value)); +}; + +SessionData.prototype.getSearchQuery = function() { + var key = this.getKey(SessionObjectType.SEARCH_QUERY); + var result = Cookies.get(key); + if (result !== undefined) { + result = JSON.parse(result); + } + return result +}; + SessionData.prototype.setShowComments = function(value) { var key = this.getKey(SessionObjectType.SHOW_COMMENT); Cookies.set(key, value + ""); diff --git a/frontend-js/src/main/js/SessionObjectType.js b/frontend-js/src/main/js/SessionObjectType.js index 8514f367942c6dc41b713266c26d33bdd34db1b5..6a66e5daef4cc73f509dc8b6e789f7e716312ea5 100644 --- a/frontend-js/src/main/js/SessionObjectType.js +++ b/frontend-js/src/main/js/SessionObjectType.js @@ -3,7 +3,9 @@ var SessionObjectType = { SHOW_COMMENT : "SHOW_COMMENT", SELECTED_BACKGROUND_OVERLAY : "SELECTED_BACKGROUND_OVERLAY", + SEARCH_QUERY : "SEARCH_QUERY", VISIBLE_OVERLAYS : "VISIBLE_OVERLAYS", + CENTER : "CENTER", ZOOM_LEVEL : "ZOOM_LEVEL", diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js index 31aac9f3d5ef288f62bd462aecb6b943aaa50506..6c4e6043f56f63abc438fa16ad79c80c5a4add1d 100644 --- a/frontend-js/src/main/js/map/AbstractCustomMap.js +++ b/frontend-js/src/main/js/map/AbstractCustomMap.js @@ -315,7 +315,7 @@ AbstractCustomMap.prototype.registerMapClickEvents = function() { google.maps.event.addListener(this.getGoogleMap(), 'click', function(mouseEvent) { var point = self.fromLatLngToPoint(mouseEvent.latLng); var searchDb = customMap.getOverlayByName('search'); - return searchDb.searchByCoordinates(self.getModel(), point).catch(GuiConnector.alert); + return searchDb.searchByCoordinates(self.getModel().getId(), point).catch(GuiConnector.alert); }); // select last clicked map diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js index f2910eba78a3b38040b825e16bcb1b15dee14a81..b88672edecd6f5d63adc638a211197b584261609 100644 --- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js @@ -7,6 +7,8 @@ var IdentifiedElement = require('../data/IdentifiedElement'); var OverlayCollection = require('./OverlayCollection'); var Reaction = require('../data/Reaction'); +var ServerConnector = require('../../ServerConnector'); + function SearchDbOverlay(params) { // call super constructor OverlayCollection.call(this, params); @@ -25,13 +27,13 @@ SearchDbOverlay.QueryType = { SEARCH_BY_QUERY : "SEARCH_BY_QUERY", }; -function encodeQuery(type, arg0, arg1){ +SearchDbOverlay.prototype.encodeQuery= function (type, arg0, arg1){ if (type === SearchDbOverlay.QueryType.SEARCH_BY_COORDINATES) { - var model = arg0; + var modelId = arg0; var coordinates = arg1; return JSON.stringify({ type:type, - modelId:model.getId(), + modelId:modelId, coordinates: coordinates }); } else if (type === SearchDbOverlay.QueryType.SEARCH_BY_QUERY) { @@ -45,7 +47,12 @@ function encodeQuery(type, arg0, arg1){ } else { throw new Error("Unknown query type: "+type); } -} +}; + + +SearchDbOverlay.prototype.decodeQuery= function (query){ + return JSON.parse(query); +}; SearchDbOverlay.prototype.getElementsByQuery = function(query) { var self = this; @@ -85,10 +92,13 @@ SearchDbOverlay.prototype.getElementsByQuery = function(query) { }); }; -SearchDbOverlay.prototype.searchByCoordinates = function(model, coordinates) { +SearchDbOverlay.prototype.searchByCoordinates = function(modelId, coordinates) { var self = this; + var query = self.encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_COORDINATES, modelId, coordinates); + + ServerConnector.getSessionData().setSearchQuery(query); + return new Promise(function(resolve, reject) { - var query = encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_COORDINATES, model, coordinates); self.setQueries([query]); if (self._elementsByQuery[query] !== undefined) { @@ -97,7 +107,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function(model, coordinates) { }).catch(reject); } else { return ServerConnector.getClosestElementsByCoordinates({ - modelId:model.getId(), coordinates: coordinates, count: 1 + modelId:modelId, coordinates: coordinates, count: 1 }).then(function(elements) { self._elementsByQuery[query] = elements; if (elements[0].getType()==="REACTION") { @@ -124,7 +134,7 @@ SearchDbOverlay.prototype.searchByCoordinates = function(model, coordinates) { SearchDbOverlay.prototype.searchBySingleQuery = function(originalQuery, perfect) { var self = this; return new Promise(function(resolve, reject) { - var query = encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect); + var query = self.encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect); if (self._elementsByQuery[query] !== undefined) { resolve(self._elementsByQuery[query]); } else { @@ -147,6 +157,9 @@ SearchDbOverlay.prototype.searchBySingleQuery = function(originalQuery, perfect) SearchDbOverlay.prototype.searchByQuery = function(originalQuery, perfect) { var self = this; + var query = self.encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect) + ServerConnector.getSessionData().setSearchQuery(query); + return new Promise(function(resolve, reject) { var queries = []; if (perfect) { @@ -158,7 +171,7 @@ SearchDbOverlay.prototype.searchByQuery = function(originalQuery, perfect) { var encodedQueries = []; var promises = []; for (var i=0;i<queries.length;i++) { - encodedQueries.push(encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i], perfect)); + encodedQueries.push(self.encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i], perfect)); promises.push(self.searchBySingleQuery(queries[i], perfect)); } self.setQueries(encodedQueries); @@ -211,5 +224,17 @@ SearchDbOverlay.prototype.refresh = function(){ throw new Error("Refreshing shouldn't be called"); }; +SearchDbOverlay.prototype.searchByEncodedQuery = function(originalQuery, perfect) { + var query = this.decodeQuery(originalQuery); + if (query.type === SearchDbOverlay.QueryType.SEARCH_BY_QUERY) { + return this.searchByQuery(query.query,query.perfect); + } else if (query.type === SearchDbOverlay.QueryType.SEARCH_BY_COORDINATES) { + return this.searchByCoordinates(query.modelId,query.coordinates); + } else { + throw new Error("Unknown type of query: "+query.type); + } +}; + + module.exports = SearchDbOverlay; diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index 0542b0f42ff9a847e40b08f5e7f1de19438ccd33..be06d31a772f9c463f86ab0a28f51013cc3312ac 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -35,6 +35,10 @@ function processUrlGetParams(params) { if (GuiConnector.getParams["comments"] ==="on") { sessionData.setShowComments(true); } + if (GuiConnector.getParams["search"] !== undefined) { + var query = SearchDbOverlay.prototype.encodeQuery(SearchDbOverlay.QueryType.SEARCH_BY_QUERY, GuiConnector.getParams["search"]); + sessionData.setSearchQuery(query); + } } @@ -103,10 +107,13 @@ function create(params) { } return new Promise(function(resolve, reject) { + var sessionData =ServerConnector.getSessionData(); result.refreshOverlays().then(function() { - if (GuiConnector.getParams["search"] !== undefined) { - GuiConnector.search(GuiConnector.getParams["search"]); - } + if (sessionData.getSearchQuery()!==undefined) { + return result.getOverlayByName("search").searchByEncodedQuery(sessionData.getSearchQuery()); + } else { + return Promise.resolve(); + }}).then(function(){ if (ServerConnector.getSessionData().getShowComments()) { result.getControl(ControlType.COMMENT_CHECKBOX).checked=true; diff --git a/frontend-js/src/test/js/gui/SearchPanel-test.js b/frontend-js/src/test/js/gui/SearchPanel-test.js index d9073bba3b5b87b928ebaff32397c8f257ada7b4..fe7842d790c63f98c423accc4f3b1fcdf2507c99 100644 --- a/frontend-js/src/test/js/gui/SearchPanel-test.js +++ b/frontend-js/src/test/js/gui/SearchPanel-test.js @@ -42,7 +42,7 @@ describe('SearchPanel', function() { customMap : map }); - return searchDbOverlay.searchByCoordinates(map.getModel(), new google.maps.Point(26547.33, 39419.29)).then( + return searchDbOverlay.searchByCoordinates(map.getModel().getId(), new google.maps.Point(26547.33, 39419.29)).then( function() { assert.equal(logger.getWarnings().length, 0); assert.ok(div.innerHTML.indexOf("Reaction") >= 0); diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js index 9a9d865224b98f3d7c0b7a663167687bb97c1b45..496986420595c0d8019e9d6cdec42f91ec357524 100644 --- a/frontend-js/src/test/js/minerva-test.js +++ b/frontend-js/src/test/js/minerva-test.js @@ -153,4 +153,26 @@ describe('minerva global', function() { assert.ok(result); }); }); + + it('create with search overlay and GET search param', function() { + GuiConnector.getParams["search"]="s1"; + + var project = helper.createProject(); + project.getModel().setId(15781); + var map = helper.createGoogleMap(); + + var options = { + map : map, + project : project, + dataCollections : [ { + name : "search" + } ], + }; + + return minerva.create(options).then(function(result) { + return result.getOverlayByName("search").getIdentifiedElements(); + }).then(function(elements){ + assert.ok(elements.length>0); + }); + }); }); diff --git a/frontend-js/testFiles/apiCalls/project/getElementsByQuery/projectId=sample&query=s1&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/project/getElementsByQuery/projectId=sample&query=s1&token=MOCK_TOKEN_ID& new file mode 100644 index 0000000000000000000000000000000000000000..b7e86f323fb71755b369948cb7b4fda82a39439a --- /dev/null +++ b/frontend-js/testFiles/apiCalls/project/getElementsByQuery/projectId=sample&query=s1&token=MOCK_TOKEN_ID& @@ -0,0 +1 @@ +[{"modelId":15781,"id":329173,"type":"ALIAS"},{"modelId":15781,"id":329158,"type":"ALIAS"},{"modelId":15781,"id":329169,"type":"ALIAS"},{"modelId":15781,"id":329177,"type":"ALIAS"},{"modelId":15781,"id":329175,"type":"ALIAS"},{"modelId":15781,"id":329159,"type":"ALIAS"}] \ No newline at end of file