From fda6c40d26121ef3f4797d6a1fcdfd3773bbd05f Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 2 Nov 2018 16:36:38 +0100
Subject: [PATCH] formatFunction changed into more generic method call

---
 .../main/js/gui/export/AbstractExportPanel.js |  6 +-
 .../main/js/gui/export/ElementExportPanel.js  |  3 -
 .../main/js/gui/export/NetworkExportPanel.js  | 59 +++++++++++--------
 3 files changed, 37 insertions(+), 31 deletions(-)

diff --git a/frontend-js/src/main/js/gui/export/AbstractExportPanel.js b/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
index d15edd4a55..53314ef96d 100644
--- a/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/AbstractExportPanel.js
@@ -15,7 +15,6 @@ var Promise = require("bluebird");
  * @property {string} columnName
  * @property {string|function(BioEntity):Promise<string>} method
  * @property {string} name
- * @property {function(Object):string} formatFunction
  */
 
 /**
@@ -607,6 +606,7 @@ AbstractExportPanel.prototype.getBioEntityAllColumns = function () {
     "method": "getModelId",
     "name": "Map id"
   }, {
+    "columnName": "mapName",
     /**
      *
      * @param {BioEntity} bioEntity
@@ -631,9 +631,9 @@ AbstractExportPanel.prototype.getBioEntityAllColumns = function () {
     "name": "Synonyms"
   }, {
     "columnName": "references",
-    "method": "getReferences",
     "name": "References",
-    "formatFunction": function (references) {
+    "method": function (bioEntity) {
+      var references = bioEntity.getReferences();
       var stringBuilder = [];
       for (var i = 0; i < references.length; i++) {
         var reference = references[i];
diff --git a/frontend-js/src/main/js/gui/export/ElementExportPanel.js b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
index 45e905c8f3..cf1ef8e869 100644
--- a/frontend-js/src/main/js/gui/export/ElementExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
@@ -140,9 +140,6 @@ ElementExportPanel.prototype._createResponseCell = function (alias, column) {
     valuePromise = Promise.resolve(column.method(alias, this.getProject()));
   }
   return valuePromise.then(function (value) {
-    if (column.formatFunction !== undefined) {
-      value = column.formatFunction(value);
-    }
     if (Functions.isString(value)) {
       value = value.replace(/[\n\r]/g, ' ');
     }
diff --git a/frontend-js/src/main/js/gui/export/NetworkExportPanel.js b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
index cc7f73350a..77a11e11a1 100644
--- a/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
+++ b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
@@ -6,8 +6,10 @@ var AbstractExportPanel = require('./AbstractExportPanel');
 
 var Promise = require("bluebird");
 var logger = require('../../logger');
-var GuiMessageError = require('../GuiMessageError');
 var Functions = require('../../Functions');
+var GuiMessageError = require('../GuiMessageError');
+var IdentifiedElement = require('../../map/data/IdentifiedElement');
+var Alias = require('../../map/data/Alias');
 
 /**
  *
@@ -64,26 +66,38 @@ NetworkExportPanel.prototype.init = function () {
  * @returns {*[]}
  */
 NetworkExportPanel.prototype.getAllColumns = function () {
+  var self = this;
   return this.getBioEntityAllColumns().concat([{
     "columnName": "elements",
-    "method": "getElements",
     "name": "Elements",
-    "formatFunction": function (elements, reaction, elementIds) {
-      var stringBuilder = [];
-      var type;
-      var elementFormat = function (element) {
-        if (elementIds[element.getAlias().getId()]) {
-          stringBuilder.push(type + ":" + element.getAlias().getId());
+    "method": function (reaction) {
+      var promises = [];
+      var model = self.getProject().getModelById(reaction.getModelId());
+      /**
+       *
+       * @param {number|Alias} aliasId
+       * @param {string} participantType
+       */
+      var elementFormat = function (aliasId, participantType) {
+        if (aliasId instanceof Alias) {
+          return participantType + ":" + aliasId.getId();
+        } else {
+          return participantType + ":" + aliasId;
         }
       };
-      type = "REACTANT";
-      reaction.getReactants().forEach(elementFormat);
-      type = "PRODUCT";
-      reaction.getProducts().forEach(elementFormat);
-      type = "MODIFIER";
-      reaction.getModifiers().forEach(elementFormat);
-
-      return stringBuilder.join(",");
+      var i;
+      for (i = 0; i < reaction.getReactants().length; i++) {
+        promises.push(elementFormat(reaction.getReactants()[i].getAlias(), "REACTANT"));
+      }
+      for (i = 0; i < reaction.getProducts().length; i++) {
+        promises.push(elementFormat(reaction.getProducts()[i].getAlias(), "PRODUCT"));
+      }
+      for (i = 0; i < reaction.getModifiers().length; i++) {
+        promises.push(elementFormat(reaction.getModifiers()[i].getAlias(), "MODIFIER"));
+      }
+      return Promise.all(promises).then(function (values) {
+        return values.join(",");
+      });
     }
   }, {
     "columnName": "reactionId",
@@ -197,7 +211,7 @@ NetworkExportPanel.prototype.createResponseString = function () {
     var rowPromises = [];
     rowPromises.push(self.createResponseHeader(selectedColumns, miriamTypes));
     for (var i = 0; i < reactions.length; i++) {
-      rowPromises.push(self.createResponseRow(reactions[i], selectedColumns, miriamTypes, elementIds));
+      rowPromises.push(self.createResponseRow(reactions[i], selectedColumns, miriamTypes));
     }
     return Promise.all(rowPromises);
   }).then(function (rows) {
@@ -210,14 +224,13 @@ NetworkExportPanel.prototype.createResponseString = function () {
  * @param {Reaction} reaction
  * @param {Object} columns
  * @param {MiriamType[]} miriamTypes
- * @param {Object<string,boolean>} elementIds
  * @returns {Promise<string>}
  */
-NetworkExportPanel.prototype.createResponseRow = function (reaction, columns, miriamTypes, elementIds) {
+NetworkExportPanel.prototype.createResponseRow = function (reaction, columns, miriamTypes) {
   var valuePromises = [];
   var i, value;
   for (i = 0; i < columns.length; i++) {
-    valuePromises.push(this._createResponseCell(reaction, columns[i], elementIds));
+    valuePromises.push(this._createResponseCell(reaction, columns[i]));
   }
   for (i = 0; i < miriamTypes.length; i++) {
     value = "";
@@ -240,11 +253,10 @@ NetworkExportPanel.prototype.createResponseRow = function (reaction, columns, mi
  *
  * @param {Reaction} reaction
  * @param {ExportColumn} column
- * @param {Object<string,boolean>} elementIds
  * @returns {Promise<string>}
  * @private
  */
-NetworkExportPanel.prototype._createResponseCell = function (reaction, column, elementIds) {
+NetworkExportPanel.prototype._createResponseCell = function (reaction, column) {
   var valuePromise;
   if (Functions.isString(column.method)) {
     valuePromise = Promise.resolve(reaction[column.method]());
@@ -253,9 +265,6 @@ NetworkExportPanel.prototype._createResponseCell = function (reaction, column, e
   }
 
   return valuePromise.then(function (value) {
-    if (column.formatFunction !== undefined) {
-      value = column.formatFunction(value, reaction, elementIds);
-    }
     if (Functions.isString(value)) {
       value = value.replace(/[\n\r]/g, ' ');
     }
-- 
GitLab