diff --git a/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js b/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js index 3cba2f5f3f2faaf00c3a01b41c6fb3f534d0390a..1f4775eb061810bea91ade16cf8ad02cf001456f 100644 --- a/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/AbstractDbOverlay.js @@ -27,8 +27,7 @@ function AbstractDbOverlay(params) { this.setIconType(params.iconType); this.setIconStart(params.iconColorStart); - - + this._elementsByQuery = []; this._elementsByQuery[""] = []; this.registerListenerType('onSearch'); @@ -46,108 +45,105 @@ AbstractDbOverlay.QueryType = { SEARCH_BY_QUERY : "SEARCH_BY_QUERY", }; -AbstractDbOverlay.prototype.encodeQuery= function (type, arg0, arg1){ +AbstractDbOverlay.prototype.encodeQuery = function(type, arg0, arg1) { if (type === AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES) { var modelId = arg0; var coordinates = arg1; return JSON.stringify({ - type:type, - modelId:modelId, - coordinates: coordinates + type : type, + modelId : modelId, + coordinates : coordinates }); } else if (type === AbstractDbOverlay.QueryType.SEARCH_BY_TARGET) { var target = arg0; return JSON.stringify({ - type:type, - target:target, + type : type, + target : target, }); } else if (type === AbstractDbOverlay.QueryType.SEARCH_BY_QUERY) { var query = arg0; var perfect = arg1; return JSON.stringify({ - type:type, - query:query, - perfect:perfect, + type : type, + query : query, + perfect : perfect, }); } else { - throw new Error("Unknown query type: "+type); + throw new Error("Unknown query type: " + type); } }; - -AbstractDbOverlay.prototype.decodeQuery= function (query){ +AbstractDbOverlay.prototype.decodeQuery = function(query) { return JSON.parse(query); }; AbstractDbOverlay.prototype.searchByQuery = function(originalQuery, perfect) { var self = this; var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect); - ServerConnector.getSessionData().setQuery({type:self.getName(),query:query}); - - return new Promise(function(resolve, reject) { - var queries = self.splitQuery(originalQuery); - - var encodedQueries = []; - var promises = []; - for (var i=0;i<queries.length;i++) { - encodedQueries.push(self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i])); - promises.push(self.searchBySingleQuery(queries[i])); - } - self.setQueries(encodedQueries); - - var res; - Promise.all(promises).then(function(results){ - res =results; - return self.callListeners('onSearch'); - }).then(function(){ - resolve(res); - }).catch(reject); + ServerConnector.getSessionData().setQuery({ + type : self.getName(), + query : query + }); + + var queries = self.splitQuery(originalQuery); + + var encodedQueries = []; + var promises = []; + for (var i = 0; i < queries.length; i++) { + encodedQueries.push(self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, queries[i])); + promises.push(self.searchBySingleQuery(queries[i])); + } + self.setQueries(encodedQueries); + + var res; + return Promise.all(promises).then(function(results) { + res = results; + return self.callListeners('onSearch'); + }).then(function() { + return res; }); }; AbstractDbOverlay.prototype.searchNamesByTarget = function(element) { var self = this; var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_TARGET, element); - - return new Promise(function(resolve, reject) { - if (self._elementsByQuery[query] !== undefined) { - resolve(self._elementsByQuery[query]); - } else { - return self.getNamesByTargetFromServer({ - target: element - }).then(function(drugNames) { - self._elementsByQuery[query] = drugNames; - resolve(self._elementsByQuery[query]); - }).catch(reject); - } - }); -}; + if (self._elementsByQuery[query] !== undefined) { + return Promise.resolve(self._elementsByQuery[query]); + } else { + return self.getNamesByTargetFromServer({ + target : element + }).then(function(drugNames) { + self._elementsByQuery[query] = drugNames; + return self._elementsByQuery[query]; + }); + } +}; -AbstractDbOverlay.prototype.setQueries = function(queries){ +AbstractDbOverlay.prototype.setQueries = function(queries) { this._queries = queries; }; -AbstractDbOverlay.prototype.getQueries = function(){ - return this._queries ; +AbstractDbOverlay.prototype.getQueries = function() { + return this._queries; }; -AbstractDbOverlay.prototype.createIdentifiedElementsForTargetingClass = function(targetingElement, colourId){ - var self = this; - var result =[]; - var iconCounter =1; +AbstractDbOverlay.prototype.createIdentifiedElementsForTargetingClass = function(targetingElement, colourId) { + var self = this; + var result = []; + var iconCounter = 1; var targets = targetingElement.getTargets(); - for (var k=0;k<targets.length;k++) { - var target = targets[k]; + for (var k = 0; k < targets.length; k++) { + var target = targets[k]; if (target.isVisible()) { var elements = target.getTargetElements(); - for (var l=0;l<elements.length;l++) { + for (var l = 0; l < elements.length; l++) { var element = elements[l]; var ie = new IdentifiedElement(element); if (element.getType() === "ALIAS") { ie.setIcon(self.getIcon(colourId, iconCounter)); } else if (element.getType() !== "REACTION") { - throw new Error("Unknown element type: "+element.getType()); + throw new Error("Unknown element type: " + element.getType()); } result.push(ie); } @@ -157,7 +153,7 @@ AbstractDbOverlay.prototype.createIdentifiedElementsForTargetingClass = function return result; }; -AbstractDbOverlay.prototype.refresh = function(){ +AbstractDbOverlay.prototype.refresh = function() { throw new Error("Refreshing shouldn't be called"); }; @@ -170,7 +166,7 @@ AbstractDbOverlay.prototype.searchByEncodedQuery = function(originalQuery) { } else if (query.type === AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES) { return this.searchByCoordinates(query.modelId, query.coordinates); } else { - throw new Error("Unknown type of query: "+query.type); + throw new Error("Unknown type of query: " + query.type); } };