From 9f74e65388e05df18c64fe33be6462a7e8ccd910 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 23 Aug 2017 10:37:01 +0200
Subject: [PATCH] JS api for returning all elements on the map

---
 README.md                               |  6 +++++
 frontend-js/src/main/js/minerva.js      | 31 +++++++++++++++++++++++++
 frontend-js/src/test/js/minerva-test.js | 17 ++++++++++++++
 3 files changed, 54 insertions(+)

diff --git a/README.md b/README.md
index 861648d99c..c8bb6d65f4 100644
--- a/README.md
+++ b/README.md
@@ -523,6 +523,12 @@ customMap.getProject()
 ```
 customMap.getConfiguration().then(function(configuration){console.log(configuration);});
 ```
+* `getAllBioEntities()`
+	* Arguments: NONE
+	* Example:
+```
+customMap.getAllBioEntities().then(function(bioEntities){console.log(bioEntities);});
+```
 * `getBioEntityById({id, modelId, type})`
 	* Arguments: TODO
 	* Example:
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index f84281272a..78673ae575 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -323,6 +323,37 @@ function createResult(customMap) {
         }
       });
     },
+    getAllBioEntities : function() {
+      var models = [ customMap.getModel() ];
+      var result = [];
+      for (var i = 0; i < customMap.getModel().getSubmodels().length; i++) {
+        models.push(customMap.getModel().getSubmodels()[i]);
+      }
+      var promises = [];
+      for (var i = 0; i < models.length; i++) {
+        promises.push(models[i].getAliases({
+          type : customMap.getConfiguration().getElementTypes(),
+          complete : true,
+        }));
+      }
+      return Promise.all(promises).then(function(aliasesByModel) {
+        var promises = [];
+        for (var i = 0; i < models.length; i++) {
+          promises.push(models[i].getReactionsForElements(aliasesByModel[i], true));
+          for (var j = 0; j < aliasesByModel[i].length; j++) {
+            result.push(aliasesByModel[i][j]);
+          }
+        }
+        return Promise.all(promises);
+      }).then(function(reactionsByModel) {
+        for (var i = 0; i < models.length; i++) {
+          for (var j = 0; j < reactionsByModel[i].length; j++) {
+            result.push(reactionsByModel[i][j]);
+          }
+        }
+        return result;
+      });
+    },
     getReactionsWithElement : function(param) {
       if (param.length === undefined) {
         param = [ param ];
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 6d989ae493..91bcc1657e 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -496,4 +496,21 @@ describe('minerva global', function() {
     });
   });
 
+  it("getAllBioEntities", function() {
+    var options = {
+      projectId : "sample",
+      element : testDiv
+    };
+    var globalResult;
+    return minerva.create(options).then(function(result) {
+      globalResult = result;
+      return result.getAllBioEntities();
+    }).then(function(result) {
+      assert.ok(result);
+      assert.ok(result.length > 0);
+    }).then(function() {
+      globalResult.destroy();
+    });
+  });
+
 });
-- 
GitLab