From b852f05bb2da5a81146d6bdf75e9bd8849eea028 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 30 Apr 2018 10:58:31 +0200
Subject: [PATCH] iterating over overlays is improved

---
 frontend-js/src/main/js/map/CustomMap.js | 95 +++++++++++-------------
 1 file changed, 42 insertions(+), 53 deletions(-)

diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 6c39c9cf0d..b3445cba5a 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -173,11 +173,9 @@ CustomMap.prototype.createLogo = function () {
  */
 CustomMap.prototype.clearDbOverlays = function () {
   var promises = [];
-  for (var overlayName in this.overlayCollections) {
-    if (this.overlayCollections.hasOwnProperty(overlayName)) {
-      var collection = this.overlayCollections[overlayName];
-      promises.push(collection.clear());
-    }
+  var overlays = this.getDbOverlays();
+  for (var i = 0; i < overlays.length; i++) {
+    promises.push(overlays[i].clear());
   }
   return Promise.all(promises);
 };
@@ -371,12 +369,12 @@ CustomMap.prototype.toggleDrawing = function () {
 CustomMap.prototype.refreshMarkers = function () {
   var promises = [];
   logger.debug("Refresh Markers: ");
-  for (var overlayName in this.overlayCollections) {
-    if (this.overlayCollections.hasOwnProperty(overlayName)) {
-      var collection = this.overlayCollections[overlayName];
-      promises.push(this.refreshOverlayMarkers(collection));
-    }
+
+  var overlays = this.getDbOverlays();
+  for (var i = 0; i < overlays.length; i++) {
+    promises.push(this.refreshOverlayMarkers(overlays[i]));
   }
+
   return Promise.all(promises);
 };
 
@@ -446,22 +444,14 @@ CustomMap.prototype.openSubmap = function (id) {
     return this.openDataOverlay(self.getMapCanvas().getBackgroundId()).then(function () {
       if (!wasInitialized) {
         // now we have to visualize overlays
-        var overlayIds = [];
-
-        // get list of overlays
-        for (var key in self._selectedOverlays) {
-          if (self._selectedOverlays.hasOwnProperty(key) && self._selectedOverlays[key] === true) {
-            overlayIds.push(key);
+        return self.getVisibleDataOverlays().then(function (overlays) {
+          var promises = [];
+          // show overlays that should be visualized (resize or show them)
+          for (var i = 0; i < overlays.length; i++) {
+            promises.push(submap._showSelectedDataOverlay(overlays[i].getId(), i, overlays.length));
           }
-        }
-
-        var promises = [];
-        // show overlays that should be visualized (resize or show them)
-        for (var i = 0; i < overlayIds.length; i++) {
-          var overlayId = overlayIds[i];
-          promises.push(submap._showSelectedDataOverlay(overlayId, i, overlayIds.length));
-        }
-        return Promise.all(promises).then(function () {
+          return Promise.all(promises);
+        }).then(function () {
           return self.refreshMarkers();
         });
       }
@@ -612,11 +602,11 @@ CustomMap.prototype.redrawSelectedDataOverlays = function () {
     }
     return Promise.all(promises).then(function () {
       // hide overlays that were visible
-      for (var key in self.selectedLayoutOverlays) {
-        if (!self._selectedOverlays.hasOwnProperty(key) || self._selectedOverlays[key] === false) {
-          if (self.layoutContainsOverlays(parseInt(key))) {
-            self.hideSelectedLayout(parseInt(key));
-          }
+      var overlays = self.getProject().getDataOverlays();
+      for (var i = 0; i < overlays.length; i++) {
+        var id = overlays[i].getId();
+        if (!self._selectedOverlays[id] && self.layoutContainsOverlays(id)) {
+          self.hideSelectedLayout(id);
         }
       }
       return self.refreshInfoWindows();
@@ -861,19 +851,18 @@ CustomMap.prototype.retrieveOverlayDetailDataForElement = function (element, gen
     logger.warn("general param is undefined!");
     general = {};
   }
-  for (var overlayName in this.overlayCollections) {
-    if (this.overlayCollections.hasOwnProperty(overlayName)) {
-      var overlay = this.overlayCollections[overlayName];
-
-      var generalRequest = general[overlayName];
-      if (generalRequest === undefined) {
-        logger.warn("No information about general overlay request for overlay: " + overlayName);
-        generalRequest = false;
-      }
-      generalRequest = generalRequest || (!overlay.allowSearchById() && overlay.allowGeneralSearch());
+  var overlays = this.getDbOverlays();
+  for (var i = 0; i < overlays.length; i++) {
+    var overlay = overlays[i];
 
-      promises.push(overlay.getDetailDataByIdentifiedElement(element, generalRequest));
+    var generalRequest = general[overlay.getName()];
+    if (generalRequest === undefined) {
+      logger.warn("No information about general overlay request for overlay: " + overlay.getName());
+      generalRequest = false;
     }
+    generalRequest = generalRequest || (!overlay.allowSearchById() && overlay.allowGeneralSearch());
+
+    promises.push(overlay.getDetailDataByIdentifiedElement(element, generalRequest));
   }
   return Promise.all(promises);
 };
@@ -954,19 +943,19 @@ CustomMap.prototype.getOverlayDataForIdentifiedElement = function (identifiedEle
   }
   var promises = [];
   var overlays = [];
-  for (var overlayName in this.overlayCollections) {
-    if (this.overlayCollections.hasOwnProperty(overlayName)) {
-      var overlay = this.overlayCollections[overlayName];
-      if (overlay.allowGeneralSearch() || overlay.allowSearchById()) {
-        var generalFlag = general[overlay.getName()];
-        if (generalFlag === undefined) {
-          logger.warn("General flag for overlay: " + overlay.getName() + " is not defined, assuming false");
-          generalFlag = false;
-        }
-        overlays.push(overlay);
-        promises.push(overlay.getDetailDataByIdentifiedElement(identifiedElement, !overlay.allowSearchById()
-          || generalFlag));
+  var allOverlays = this.getDbOverlays();
+  for (var i = 0; i < allOverlays.length; i++) {
+    var overlay = allOverlays[i];
+    if (overlay.allowGeneralSearch() || overlay.allowSearchById()) {
+      var generalFlag = general[overlay.getName()];
+      if (generalFlag === undefined) {
+        logger.warn("General flag for overlay: " + overlay.getName() + " is not defined, assuming false");
+        generalFlag = false;
       }
+      overlays.push(overlay);
+      promises.push(overlay.getDetailDataByIdentifiedElement(identifiedElement, !overlay.allowSearchById()
+        || generalFlag));
+
     }
   }
   return Promise.all(promises).then(function (values) {
-- 
GitLab