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