From 6a6feb08706b16ccdf0ca8813d0a63593fa45458 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Fri, 9 Jun 2017 16:26:32 +0200 Subject: [PATCH] getBioentities allows to pass list of identifiers --- frontend-js/src/main/js/minerva.js | 75 ++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 4 deletions(-) diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index 78d17fc441..6cc1cf3e42 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -194,6 +194,40 @@ function createMarkerElements(options) { return markerElements; } +function getElements(elementIdentifiers, customMap) { + var identifiedElements = []; + + var elementsByModelId = []; + for (var i=0;i<elementIdentifiers.length;i++) { + var identifiedElement = new IdentifiedElement(elementIdentifiers[i]); + if (elementsByModelId[identifiedElement.getModelId()]===undefined) { + elementsByModelId[identifiedElement.getModelId()] = []; + } + elementsByModelId[identifiedElement.getModelId()].push(identifiedElement); + identifiedElements.push(identifiedElement); + } + + var modelScopePromises = []; + for (var key in elementsByModelId) { + if (elementsByModelId.hasOwnProperty(key)) { + var model = customMap.getModel().getSubmodelById(parseInt(key)); + modelScopePromises.push(model.getByIdentifiedElements(elementsByModelId[key], true)); + } + } + //first promise fetch all data + return Promise.all(modelScopePromises).then(function(){ + //this promise return result in the right order + var elementPromises = []; + for (var i=0;i<identifiedElements.length;i++) { + var element = identifiedElements[i]; + var model = customMap.getModel().getSubmodelById(element.getModelId()); + var promise = model.getByIdentifiedElement(element, true); + elementPromises.push(promise); + } + return Promise.all(elementPromises); + }); +} + function createResult(customMap) { return { getVisibleDataOverlays : function() { @@ -212,8 +246,30 @@ function createResult(customMap) { dbOverlayName = "user"; } var dbOverlay = getOverlayByName(customMap, dbOverlayName); - return dbOverlay.getIdentifiedElements().then(function(identifiedElements) { + var identifiedElements; + return dbOverlay.getIdentifiedElements().then(function(result) { + identifiedElements = result; return getFullElements(customMap, identifiedElements); + }).then(function(fullElements) { + var result = []; + for (var i = 0; i < identifiedElements.length; i++) { + var type; + if (identifiedElements[i].getIcon() !== undefined) { + type = "ICON"; + } else { + type = "SURFACE"; + } + var row = { + element : fullElements[i], + type : type, + options : { + icon : identifiedElements[i].getIcon(), + color : identifiedElements[i].getColor() + } + } + result.push(row); + } + return result; }); }, getProject : function() { @@ -223,9 +279,20 @@ function createResult(customMap) { return ServerConnector.getConfiguration(); }, getBioEntityById : function(param) { - var identifiedElement = new IdentifiedElement(param); - var model = customMap.getModel().getSubmodelById(identifiedElement.getModelId()); - return model.getByIdentifiedElement(identifiedElement, true); + var isArray = true; + if (param.length === undefined) { + param = [ param ]; + isArray = false; + + } + + return getElements(param, customMap).then(function(result) { + if (!isArray) { + return result[0]; + } else { + return result; + } + }); }, getReactionsWithElement : function(param) { var identifiedElement = new IdentifiedElement(param); -- GitLab