From 7699cf876704f3911140668ddfaae11a06e67bfe Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 22 May 2017 09:56:51 +0200 Subject: [PATCH] promises simplified --- .../main/js/map/overlay/SearchDbOverlay.js | 185 +++++++++--------- 1 file changed, 91 insertions(+), 94 deletions(-) diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js index 992f51d797..edcb187a5d 100644 --- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js @@ -14,137 +14,134 @@ var Reaction = require('../data/Reaction'); var ServerConnector = require('../../ServerConnector'); function SearchDbOverlay(params) { - params.iconType= "marker"; + params.iconType = "marker"; params.iconColorStart = 0; // call super constructor AbstractDbOverlay.call(this, params); - + } SearchDbOverlay.prototype = Object.create(AbstractDbOverlay.prototype); SearchDbOverlay.prototype.constructor = SearchDbOverlay; - SearchDbOverlay.prototype.getElementsByQuery = function(query) { var self = this; - return new Promise(function(resolve, reject){ - var i; - var queryId = null; - var queries =self.getQueries(); - for (i=0;i<queries.length;i++) { - if (queries[i]===query) { - queryId = i; - } - } - if (queryId===null) { - throw new Error("Invalid query: "+query); - } - var elements = self._elementsByQuery[query]; - var promises = []; - for (i=0;i<elements.length;i++) { - var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel(); - promises.push(model.getByIdentifiedElement(elements[i], true)); + var i; + var queryId = null; + var queries = self.getQueries(); + for (i = 0; i < queries.length; i++) { + if (queries[i] === query) { + queryId = i; } - return Promise.all(promises).then(function(fullElements){ - var result =[]; - var iconCounter=1; - for (var i=0;i<fullElements.length;i++){ - var element = fullElements[i]; - var icon; - if (element instanceof Alias) { - icon = self.getIcon(queryId, iconCounter++ ); - } else if (!(element instanceof Reaction)) { - throw new Error("Unknown element type: "+element.getType()); - } - result.push({element:element, icon:icon}); + } + if (queryId === null) { + throw new Error("Invalid query: " + query); + } + var elements = self._elementsByQuery[query]; + var promises = []; + for (i = 0; i < elements.length; i++) { + var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel(); + promises.push(model.getByIdentifiedElement(elements[i], true)); + } + return Promise.all(promises).then(function(fullElements) { + var result = []; + var iconCounter = 1; + for (var i = 0; i < fullElements.length; i++) { + var element = fullElements[i]; + var icon; + if (element instanceof Alias) { + icon = self.getIcon(queryId, iconCounter++); + } else if (!(element instanceof Reaction)) { + throw new Error("Unknown element type: " + element.getType()); } - resolve(result); - }).catch(reject); + result.push({ + element : element, + icon : icon + }); + } + return result; }); }; SearchDbOverlay.prototype.searchByCoordinates = function(modelId, coordinates) { var self = this; var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_COORDINATES, modelId, coordinates); - + ServerConnector.getSessionData().setSearchQuery(query); - - return new Promise(function(resolve, reject) { - self.setQueries([query]); - - if (self._elementsByQuery[query] !== undefined) { - return self.callListeners('onSearch').then(function(){ - resolve(self._elementsByQuery[query]); - }).catch(reject); - } else { - return ServerConnector.getClosestElementsByCoordinates({ - modelId:modelId, coordinates: coordinates, count: 1 - }).then(function(elements) { - self._elementsByQuery[query] = elements; - if (elements[0].getType()==="REACTION") { - var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel(); - return model.getReactionById(elements[0].getId(), true).then(function(reaction){ - var i=0; - var reactionElements = reaction.getElements(); - for (i=0;i<reactionElements.length;i++) { - self._elementsByQuery[query].push(new IdentifiedElement(reactionElements[i])); - } - }); - } else { - return null; - } - }).then(function(){ - return self.callListeners('onSearch'); - }).then(function(){ - resolve(self._elementsByQuery[query]); - }).catch(reject); - } - }); + + self.setQueries([ query ]); + + if (self._elementsByQuery[query] !== undefined) { + return self.callListeners('onSearch').then(function() { + Promise.resolve(self._elementsByQuery[query]); + }); + } else { + return ServerConnector.getClosestElementsByCoordinates({ + modelId : modelId, + coordinates : coordinates, + count : 1 + }).then(function(elements) { + self._elementsByQuery[query] = elements; + if (elements[0].getType() === "REACTION") { + var model = self.getMap().getSubmodelById(elements[0].getModelId()).getModel(); + return model.getReactionById(elements[0].getId(), true).then(function(reaction) { + var i = 0; + var reactionElements = reaction.getElements(); + for (i = 0; i < reactionElements.length; i++) { + self._elementsByQuery[query].push(new IdentifiedElement(reactionElements[i])); + } + }); + } else { + return null; + } + }).then(function() { + return self.callListeners('onSearch'); + }).then(function() { + return self._elementsByQuery[query]; + }); + } }; SearchDbOverlay.prototype.searchBySingleQuery = function(originalQuery, perfect) { var self = this; - return new Promise(function(resolve, reject) { - var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect); - if (self._elementsByQuery[query] !== undefined) { - resolve(self._elementsByQuery[query]); - } else { - return ServerConnector.getElementsByQuery({ - query:originalQuery, - perfectMatch: perfect - }).then(function(elements) { - var result = []; - for (var i=0;i<elements.length;i++) { - result.push(new IdentifiedElement(elements[i])); - } - self._elementsByQuery[query]=result; - return self.getMap().fetchIdentifiedElements(result, true); - }).then(function(){ - resolve(self._elementsByQuery[query]); - }).catch(reject); - } - }); + var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery, perfect); + if (self._elementsByQuery[query] !== undefined) { + Promise.resolve(self._elementsByQuery[query]); + } else { + return ServerConnector.getElementsByQuery({ + query : originalQuery, + perfectMatch : perfect + }).then(function(elements) { + var result = []; + for (var i = 0; i < elements.length; i++) { + result.push(new IdentifiedElement(elements[i])); + } + self._elementsByQuery[query] = result; + return self.getMap().fetchIdentifiedElements(result, true); + }).then(function() { + return self._elementsByQuery[query]; + }); + } }; - -SearchDbOverlay.prototype.getIdentifiedElements = function(){ +SearchDbOverlay.prototype.getIdentifiedElements = function() { var self = this; - return new Promise(function(resolve){ + return new Promise(function(resolve) { var queries = self.getQueries(); var result = []; - for (var i=0;i<queries.length;i++) { + for (var i = 0; i < queries.length; i++) { var query = queries[i]; var elements = self._elementsByQuery[query]; - var iconCounter =1; - for (var j=0;j<elements.length;j++) { + var iconCounter = 1; + for (var j = 0; j < elements.length; j++) { var element = elements[j]; var ie = new IdentifiedElement(element); if (element.getType() === "ALIAS") { ie.setIcon(self.getIcon(i, 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); } -- GitLab