From b3e40bfcd8ffd3ef04013f916032d492f803f62d Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 29 Jun 2018 12:44:28 +0200
Subject: [PATCH] list of genomes provided in admin panel

---
 frontend-js/src/main/js/Admin.js              |   9 +-
 frontend-js/src/main/js/ServerConnector.js    |  40 ++++
 .../src/main/js/gui/AbstractGuiElement.js     |  47 ++++-
 frontend-js/src/main/js/gui/Panel.js          |  30 +--
 .../main/js/gui/admin/AbstractAdminPanel.js   |  44 ++++-
 .../src/main/js/gui/admin/GenomeAdminPanel.js | 186 ++++++++++++++++++
 .../src/main/js/map/data/PrivilegeType.js     |   3 +-
 .../src/main/js/map/data/ReferenceGenome.js   | 133 ++++++++++++-
 .../js/gui/admin/GenomeAdminPanel-test.js     |  31 +++
 .../test/js/map/data/ReferenceGenome-test.js  |  25 ++-
 .../apiCalls/genomics/token=ADMIN_TOKEN_ID&   |   1 +
 .../api/genomics/ReferenceGenomeRestImpl.java |   2 +
 12 files changed, 510 insertions(+), 41 deletions(-)
 create mode 100644 frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
 create mode 100644 frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
 create mode 100644 frontend-js/testFiles/apiCalls/genomics/token=ADMIN_TOKEN_ID&

diff --git a/frontend-js/src/main/js/Admin.js b/frontend-js/src/main/js/Admin.js
index 8d779cee92..db99eea31a 100644
--- a/frontend-js/src/main/js/Admin.js
+++ b/frontend-js/src/main/js/Admin.js
@@ -9,6 +9,7 @@ var GuiUtils = require('./gui/leftPanel/GuiUtils');
 var ObjectWithListeners = require('./ObjectWithListeners');
 
 var ConfigurationAdminPanel = require('./gui/admin/ConfigurationAdminPanel');
+var GenomeAdminPanel = require('./gui/admin/GenomeAdminPanel');
 var MapsAdminPanel = require('./gui/admin/MapsAdminPanel');
 var UsersAdminPanel = require('./gui/admin/UsersAdminPanel');
 
@@ -19,9 +20,8 @@ var Functions = require('./Functions');
 /**
  * Default constructor.
  *
- * @param options
- *          CustomMapOptions object representing all parameters needed for map
- *          creation
+ * @param {CustomMapOptions} options
+ *           object representing all parameters needed for map creation
  */
 function Admin(options) {
   var self = this;
@@ -55,6 +55,9 @@ Admin.prototype._createGui = function () {
   }, {
     name: "CONFIGURATION",
     panelClass: ConfigurationAdminPanel
+  }, {
+    name: "GENOMES",
+    panelClass: GenomeAdminPanel
   }];
 
   var tabDiv = Functions.createElement({
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index dff12e596f..b75bca3bcd 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -307,6 +307,15 @@ ServerConnector.createGetParams = function (params, prefix) {
   return result;
 };
 
+/**
+ *
+ * @param {Object} paramObj
+ * @param {string} paramObj.type
+ * @param {string} [paramObj.url]
+ * @param {Object} [paramObj.params]
+ *
+ * @returns {string}
+ */
 ServerConnector.getApiUrl = function (paramObj) {
   var type = paramObj.type;
   var params = this.createGetParams(paramObj.params);
@@ -718,6 +727,21 @@ ServerConnector.getUsersUrl = function (queryParams, filterParams) {
   });
 };
 
+/**
+ *
+ * @param {Object} queryParams
+ * @param {Object} filterParams
+ *
+ * @returns {string}
+ */
+ServerConnector.getReferenceGenomesUrl = function (queryParams, filterParams) {
+  return this.getApiUrl({
+    type: "genomics/",
+    params: filterParams
+  });
+};
+
+
 ServerConnector.getUserUrl = function (queryParams, filterParams) {
   return this.getApiUrl({
     url: this.getUsersUrl() + queryParams.login,
@@ -1160,9 +1184,25 @@ ServerConnector.getUsers = function (forceRefresh) {
       return self.processNetworkError(error);
     });
   }
+};
 
+ServerConnector.getReferenceGenomes = function () {
+  var self = this;
+
+  return self.sendGetRequest(self.getReferenceGenomesUrl()).then(function (content) {
+    var result = [];
+    var parsedData = JSON.parse(content);
+    for (var i = 0; i < parsedData.length; i++) {
+      var genome = new ReferenceGenome(parsedData[i]);
+      result.push(genome)
+    }
+    return result;
+  }).catch(function (error) {
+    return self.processNetworkError(error);
+  });
 };
 
+
 ServerConnector.getOverlays = function (params) {
   var self = this;
   if (params === undefined) {
diff --git a/frontend-js/src/main/js/gui/AbstractGuiElement.js b/frontend-js/src/main/js/gui/AbstractGuiElement.js
index 3ba1e7fdc6..529a523dcf 100644
--- a/frontend-js/src/main/js/gui/AbstractGuiElement.js
+++ b/frontend-js/src/main/js/gui/AbstractGuiElement.js
@@ -10,7 +10,13 @@ var logger = require('../logger');
 
 /**
  *
- * @param params
+ * @param {Object} params
+ * @param {HTMLElement} params.element
+ * @param {CustomMap} params.customMap
+ * @param {Configuration} params.configuration
+ * @param {Project} [params.project]
+ * @param {ServerConnector} [params.serverConnector]
+ *
  * @constructor
  *
  * @extends ObjectWithListeners
@@ -24,6 +30,7 @@ function AbstractGuiElement(params) {
   self.setProject(params.project);
   self.setMap(params.customMap);
   self.setConfiguration(params.configuration);
+  self.setServerConnector(params.serverConnector);
 
   self._controlElements = [];
 
@@ -91,6 +98,11 @@ AbstractGuiElement.prototype.getProject = function () {
 };
 
 
+/**
+ *
+ * @param {string} type
+ * @param {HTMLElement} element
+ */
 AbstractGuiElement.prototype.setControlElement = function (type, element) {
   if (type === null || type === undefined) {
     throw new Error("Unknown control element type");
@@ -102,6 +114,11 @@ AbstractGuiElement.prototype.setControlElement = function (type, element) {
   this._controlElements[type] = element;
 };
 
+/**
+ *
+ * @param {string} type
+ * @returns {HTMLElement}
+ */
 AbstractGuiElement.prototype.getControlElement = function (type) {
   if (type === null || type === undefined) {
     throw new Error("Unknown control element type");
@@ -113,11 +130,19 @@ AbstractGuiElement.prototype.getControlElement = function (type) {
   return this._controlElements[type];
 };
 
+/**
+ *
+ * @param {string} url
+ */
 AbstractGuiElement.prototype.downloadFile = function (url) {
   this._downloadFile = url;
   window.open(url, '_blank');
 };
 
+/**
+ *
+ * @returns {string}
+ */
 AbstractGuiElement.prototype.getLastDownloadUrl = function () {
   return this._downloadFile;
 };
@@ -138,6 +163,26 @@ AbstractGuiElement.prototype.getConfiguration = function () {
   return this._configuration;
 };
 
+/**
+ *
+ * @param {ServerConnector} serverConnector
+ */
+AbstractGuiElement.prototype.setServerConnector = function (serverConnector) {
+  this._serverConnector = serverConnector;
+};
+
+/**
+ *
+ * @returns {ServerConnector}
+ */
+AbstractGuiElement.prototype.getServerConnector = function () {
+  if (this._serverConnector !== undefined) {
+    return this._serverConnector;
+  } else {
+    return this.getMap().getServerConnector();
+  }
+};
+
 /**
  *
  * @param {string} [params.content]
diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js
index 3a931f2420..75ebb3459b 100644
--- a/frontend-js/src/main/js/gui/Panel.js
+++ b/frontend-js/src/main/js/gui/Panel.js
@@ -20,7 +20,6 @@ var xss = require('xss');
  * @param {string} params.panelName
  * @param {boolean} params.scrollable
  * @param {string} [params.helpTip]
- * @param {ServerConnector} [params.serverConnector]
  * @param params.parent
  *
  * @constructor
@@ -33,7 +32,6 @@ function Panel(params) {
   var self = this;
 
   self.setParent(params.parent);
-  self.setServerConnector(params.serverConnector);
   var configuration = params.configuration;
   if (params.configuration === undefined) {
     configuration = self.getMap().getConfiguration();
@@ -239,10 +237,18 @@ Panel.prototype.getParent = function () {
   return this._parent;
 };
 
+/**
+ *
+ * @param {GuiUtils} guiUtils
+ */
 Panel.prototype.setGuiUtils = function (guiUtils) {
   this._guiUtils = guiUtils;
 };
 
+/**
+ *
+ * @returns {GuiUtils}
+ */
 Panel.prototype.getGuiUtils = function () {
   return this._guiUtils;
 };
@@ -300,24 +306,4 @@ Panel.prototype.destroy = function () {
   }
 };
 
-/**
- *
- * @returns {ServerConnector}
- */
-Panel.prototype.getServerConnector = function () {
-  if (this._serverConnector !== undefined) {
-    return this._serverConnector;
-  }
-  return this.getMap().getServerConnector();
-};
-
-/**
- *
- * @param {ServerConnector} serverConnector
- */
-Panel.prototype.setServerConnector = function (serverConnector) {
-  this._serverConnector = serverConnector;
-};
-
-
 module.exports = Panel;
diff --git a/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js b/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
index 58a37304c3..ba0ddf3b12 100644
--- a/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/AbstractAdminPanel.js
@@ -9,15 +9,29 @@ var GuiConnector = require('../../GuiConnector');
 
 // noinspection JSUnusedLocalSymbols
 var logger = require('../../logger');
+// noinspection JSUnusedLocalSymbols
 var Functions = require('../../Functions');
 var Promise = require("bluebird");
 
+/**
+ *
+ * @param {Configuration} [params.configuration]
+ * @param {HTMLElement} params.element
+ * @param {Project} params.project
+ * @param {CustomMap} params.customMap
+ * @param {string} params.panelName
+ * @param {string} [params.helpTip]
+ * @param params.parent
+ *
+ * @constructor
+ */
 function AbstractAdminPanel(params) {
-  params.scrollable = true;
+  params["scrollable"] = true;
   Panel.call(this, params);
   this._createHeader(params.name);
 
   this._initPromises = [];
+  this._eventBinds = [];
 }
 
 AbstractAdminPanel.prototype = Object.create(Panel.prototype);
@@ -30,17 +44,31 @@ AbstractAdminPanel.prototype._createHeader = function (name) {
   // }));
 };
 
+/**
+ *
+ * @returns {Promise}
+ */
 AbstractAdminPanel.prototype.init = function () {
   return Promise.all(this._initPromises);
 };
 
+/**
+ *
+ * @param {Object} params
+ * @param {string} params.event
+ * @param {jQuery} params.jQueryObject
+ * @param {string} params.preferenceName
+ * @param {Object} params.defaultValue
+ * @param {function} params.getter
+ * @param {function} params.setter
+ */
 AbstractAdminPanel.prototype.bindUserGuiPreference = function (params) {
-
   params.jQueryObject.on(params.event, function () {
     return ServerConnector.getLoggedUser().then(function (user) {
       var oldValue = user.getPreferences().getGuiPreference(params.preferenceName, params.defaultValue);
       var newValue = params.getter();
       if (oldValue !== newValue) {
+        console.log(oldValue, newValue);
         user.getPreferences().setGuiPreference(params.preferenceName, newValue);
 
         var data = new UserPreferences();
@@ -53,6 +81,18 @@ AbstractAdminPanel.prototype.bindUserGuiPreference = function (params) {
     var value = user.getPreferences().getGuiPreference(params.preferenceName, params.defaultValue);
     return params.setter(value);
   }));
+
+  this._eventBinds.push(params);
+};
+
+/**
+ *
+ * @returns {Promise}
+ */
+AbstractAdminPanel.prototype.destroy = function () {
+  return Promise.each(this._eventBinds, function (params) {
+    params.jQueryObject.off(params.event);
+  });
 };
 
 
diff --git a/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js b/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
new file mode 100644
index 0000000000..bfb7483b08
--- /dev/null
+++ b/frontend-js/src/main/js/gui/admin/GenomeAdminPanel.js
@@ -0,0 +1,186 @@
+"use strict";
+
+/* exported Promise*/
+
+var AbstractAdminPanel = require('./AbstractAdminPanel');
+
+var Functions = require('../../Functions');
+var PrivilegeType = require('../../map/data/PrivilegeType');
+
+// noinspection JSUnusedLocalSymbols
+var logger = require('../../logger');
+
+/**
+ *
+ * @param {Configuration} params.configuration
+ * @param {HTMLElement} params.element
+ *
+ * @constructor
+ */
+function GenomeAdminPanel(params) {
+  params["panelName"] = "genomes";
+  AbstractAdminPanel.call(this, params);
+
+  var self = this;
+  $(self.getElement()).addClass("minerva-genome-tab");
+
+  self._createGui();
+}
+
+GenomeAdminPanel.prototype = Object.create(AbstractAdminPanel.prototype);
+GenomeAdminPanel.prototype.constructor = GenomeAdminPanel;
+
+/**
+ *
+ * @private
+ */
+GenomeAdminPanel.prototype._createGui = function () {
+  var self = this;
+  var genomeDiv = Functions.createElement({
+    type: "div"
+  });
+  self.getElement().appendChild(genomeDiv);
+
+  genomeDiv.appendChild(Functions.createElement({
+    type: "h3",
+    content: 'Configured reference genomes:'
+  }));
+
+  var genomesTable = Functions.createElement({
+    type: "table",
+    name: "genomeTable",
+    className: "display",
+    style: "width:100%"
+  });
+  genomeDiv.appendChild(genomesTable);
+
+  // noinspection JSUnusedGlobalSymbols
+  $(genomesTable).DataTable({
+    columns: [{
+      title: 'Type'
+    }, {
+      title: 'Organism'
+    }, {
+      title: 'Version'
+    }, {
+      title: 'Progress'
+    }, {
+      title: 'Source'
+    }, {
+      title: 'Edit',
+      orderable: false
+    }, {
+      title: 'Remove',
+      orderable: false
+    }],
+    order: [[1, "asc"]]
+  });
+  self.bindUserGuiPreference({
+    jQueryObject: $(genomesTable),
+    event: 'length.dt',
+    preferenceName: 'admin-genome-datatable-length',
+    defaultValue: '10',
+    getter: function () {
+      return $(genomesTable).DataTable().page.len() + '';
+    },
+    setter: function (value) {
+      return $(genomesTable).DataTable().page.len(value).draw();
+    }
+  });
+
+};
+
+/**
+ *
+ * @returns {Promise}
+ */
+GenomeAdminPanel.prototype.init = function () {
+  var self = this;
+  return AbstractAdminPanel.prototype.init.call(this).then(function () {
+    return self.getServerConnector().getLoggedUser();
+  }).then(function (user) {
+    if (user.hasPrivilege(self.getConfiguration().getPrivilegeType(PrivilegeType.MANAGE_GENOMES))) {
+      return self.getServerConnector().getReferenceGenomes().then(function (referenceGenomes) {
+        return self.setReferenceGenomes(referenceGenomes);
+      });
+    } else {
+      self.disablePanel("You have no privilege to manage genomes");
+    }
+  });
+};
+
+/**
+ *
+ * @param {ReferenceGenome[]} referenceGenomes
+ *
+ * @returns {Promise}
+ *
+ */
+GenomeAdminPanel.prototype.setReferenceGenomes = function (referenceGenomes) {
+  var self = this;
+
+  return self.getServerConnector().getLoggedUser().then(function (user) {
+
+    var dataTable = $("[name='genomeTable']", self.getElement()).DataTable();
+    var data = [];
+    var page = dataTable.page();
+
+    for (var i = 0; i < referenceGenomes.length; i++) {
+      var genome = referenceGenomes[i];
+      var rowData = self.genomeToTableRow(genome, user);
+      data.push(rowData);
+    }
+    //it should be simplified, but I couldn't make it work
+    dataTable.clear().rows.add(data).page(page).draw(false).page(page).draw(false);
+  })
+};
+
+/**
+ *
+ * @param {ReferenceGenome} genome
+ * @param {User} user
+ * @returns {Array}
+ */
+GenomeAdminPanel.prototype.genomeToTableRow = function (genome, user) {
+  var self = this;
+  var row = [];
+
+  row[0] = genome.getType();
+  row[1] = self.getGuiUtils().createAnnotationLink(genome.getOrganism()).outerHTML;
+  row[2] = genome.getVersion();
+  if (genome.getDownloadProgress() === 100) {
+    if (genome.getLocalUrl() !== undefined) {
+      row[3] = "READY";
+    } else {
+      row[3] = "ERROR";
+    }
+  } else {
+    row[3] = genome.getDownloadProgress();
+  }
+  row[4] = genome.getSourceUrl();
+
+  var disabled = " disabled ";
+  if (user.hasPrivilege(self.getConfiguration().getPrivilegeType(PrivilegeType.MANAGE_GENOMES))) {
+    disabled = "";
+  }
+  row[5] = "<button name='showEditDialog' data='" + genome.getId() + "'" + disabled + "><i class='fa fa-edit' style='font-size:17px'></i></button>";
+  row[6] = "<button name='removeGenome' data='" + genome.getId() + "'" + disabled + "><i class='fa fa-trash-o' style='font-size:17px'></button>";
+
+  return row;
+};
+
+
+/**
+ *
+ * @returns {Promise}
+ */
+GenomeAdminPanel.prototype.destroy = function () {
+  var self = this;
+  var table = $("[name='genomeTable']", self.getElement())[0];
+  if ($.fn.DataTable.isDataTable(table)) {
+    $(table).DataTable().destroy();
+  }
+  return AbstractAdminPanel.prototype.destroy.call(self);
+};
+
+module.exports = GenomeAdminPanel;
diff --git a/frontend-js/src/main/js/map/data/PrivilegeType.js b/frontend-js/src/main/js/map/data/PrivilegeType.js
index 54e528f121..45af426283 100644
--- a/frontend-js/src/main/js/map/data/PrivilegeType.js
+++ b/frontend-js/src/main/js/map/data/PrivilegeType.js
@@ -17,8 +17,9 @@ PrivilegeType.prototype = Object.create(ObjectWithListeners.prototype);
 PrivilegeType.prototype.constructor = PrivilegeType;
 
 PrivilegeType.CONFIGURATION_MANAGE = 'CONFIGURATION_MANAGE';
-PrivilegeType.USER_MANAGEMENT = 'USER_MANAGEMENT';
+PrivilegeType.MANAGE_GENOMES = 'MANAGE_GENOMES';
 PrivilegeType.PROJECT_MANAGEMENT = 'PROJECT_MANAGEMENT';
+PrivilegeType.USER_MANAGEMENT = 'USER_MANAGEMENT';
 
 PrivilegeType.prototype.setObjectType = function (objectType) {
   this._objectType = objectType;
diff --git a/frontend-js/src/main/js/map/data/ReferenceGenome.js b/frontend-js/src/main/js/map/data/ReferenceGenome.js
index 38756a6bd0..f484559a1b 100644
--- a/frontend-js/src/main/js/map/data/ReferenceGenome.js
+++ b/frontend-js/src/main/js/map/data/ReferenceGenome.js
@@ -1,16 +1,22 @@
 "use strict";
 
+var Annotation = require('./Annotation');
 var ReferenceGenomeGeneMapping = require('./ReferenceGenomeGeneMapping');
 
 function ReferenceGenome(javaObject) {
   if (javaObject !== undefined && javaObject !== null) {
+    this.setId(javaObject.idObject);
     this.setType(javaObject.type);
     this.setVersion(javaObject.version);
+    this.setLocalUrl(javaObject.localUrl);
+    this.setSourceUrl(javaObject.sourceUrl);
     if (javaObject.localUrl !== undefined) {
       this.setUrl(javaObject.localUrl);
     } else {
       this.setUrl(javaObject.sourceUrl);
     }
+    this.setOrganism(new Annotation(javaObject.organism));
+    this.setDownloadProgress(javaObject.downloadProgress);
     this._geneMapping = [];
     if (javaObject.geneMapping !== undefined) {
       for (var i = 0; i < javaObject.geneMapping.length; i++) {
@@ -20,31 +26,144 @@ function ReferenceGenome(javaObject) {
   }
 }
 
-ReferenceGenome.prototype.setType = function(type) {
+/**
+ *
+ * @param {string} type
+ */
+ReferenceGenome.prototype.setType = function (type) {
   this._type = type;
 };
 
-ReferenceGenome.prototype.getType = function() {
+/**
+ *
+ * @returns {string}
+ */
+ReferenceGenome.prototype.getType = function () {
   return this._type;
 };
 
-ReferenceGenome.prototype.setUrl = function(url) {
+/**
+ *
+ * @param {number} id
+ */
+ReferenceGenome.prototype.setId = function (id) {
+  this._id = id;
+};
+
+/**
+ *
+ * @returns {number}
+ */
+ReferenceGenome.prototype.getId = function () {
+  return this._id;
+};
+
+/**
+ *
+ * @returns {number}
+ */
+ReferenceGenome.prototype.getDownloadProgress = function () {
+  return this._downloadProgress;
+};
+
+/**
+ *
+ * @param {number} downloadProgress
+ */
+ReferenceGenome.prototype.setDownloadProgress = function (downloadProgress) {
+  this._downloadProgress = downloadProgress;
+};
+
+
+/**
+ *
+ * @param {Annotation} organism
+ */
+ReferenceGenome.prototype.setOrganism = function (organism) {
+  this._organism = organism;
+};
+
+/**
+ *
+ * @returns {Annotation}
+ */
+ReferenceGenome.prototype.getOrganism = function () {
+  return this._organism;
+};
+
+/**
+ *
+ * @param {string} url
+ */
+ReferenceGenome.prototype.setUrl = function (url) {
   this._url = url;
 };
 
-ReferenceGenome.prototype.getUrl = function() {
+/**
+ *
+ * @returns {string}
+ */
+ReferenceGenome.prototype.getUrl = function () {
   return this._url;
 };
 
-ReferenceGenome.prototype.setVersion = function(version) {
+/**
+ *
+ * @returns {string}
+ */
+ReferenceGenome.prototype.getSourceUrl = function () {
+  return this._sourceUrl;
+};
+
+/**
+ *
+ * @param {string} sourceUrl
+ */
+ReferenceGenome.prototype.setSourceUrl = function (sourceUrl) {
+  this._sourceUrl = sourceUrl;
+};
+
+/**
+ *
+ * @returns {string}
+ */
+ReferenceGenome.prototype.getLocalUrl = function () {
+  return this._localUrl;
+};
+
+/**
+ *
+ * @param {string} localUrl
+ */
+ReferenceGenome.prototype.setLocalUrl = function (localUrl) {
+  if (localUrl === null) {
+    this._localUrl = undefined;
+  } else {
+    this._localUrl = localUrl;
+  }
+};
+
+/**
+ *
+ * @param {string} version
+ */
+ReferenceGenome.prototype.setVersion = function (version) {
   this._version = version;
 };
 
-ReferenceGenome.prototype.getVersion = function() {
+/**
+ *
+ * @returns {string}
+ */
+ReferenceGenome.prototype.getVersion = function () {
   return this._version;
 };
 
-ReferenceGenome.prototype.getGeneMappings = function() {
+/**
+ *
+ * @returns {ReferenceGenomeGeneMapping[]}
+ */
+ReferenceGenome.prototype.getGeneMappings = function () {
   return this._geneMapping;
 };
 
diff --git a/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
new file mode 100644
index 0000000000..a1a4567a41
--- /dev/null
+++ b/frontend-js/src/test/js/gui/admin/GenomeAdminPanel-test.js
@@ -0,0 +1,31 @@
+"use strict";
+
+require("../../mocha-config");
+
+var GenomeAdminPanel = require('../../../../main/js/gui/admin/GenomeAdminPanel');
+var ConfigurationType = require('../../../../main/js/ConfigurationType');
+var ServerConnector = require('../../ServerConnector-mock');
+var logger = require('../../logger');
+
+var chai = require('chai');
+var assert = chai.assert;
+
+describe('GenomeAdminPanel', function () {
+  describe('init', function () {
+    it('admin', function () {
+      helper.loginAsAdmin();
+      var mapTab;
+      return ServerConnector.getConfiguration().then(function (configuration) {
+        mapTab = new GenomeAdminPanel({
+          element: testDiv,
+          configuration: configuration,
+          serverConnector: ServerConnector
+        });
+        return mapTab.init();
+      }).then(function () {
+        assert.equal(0, logger.getWarnings().length);
+        return mapTab.destroy();
+      });
+    });
+  });
+});
diff --git a/frontend-js/src/test/js/map/data/ReferenceGenome-test.js b/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
index b001486d62..204ff22eed 100644
--- a/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
+++ b/frontend-js/src/test/js/map/data/ReferenceGenome-test.js
@@ -10,7 +10,16 @@ describe('ReferenceGenome', function () {
         type: "TYP",
         version: "v3",
         localUrl: "http://google.pl/",
-        sourceUrl: "http://google.pl/"
+        sourceUrl: "http://google.pl/",
+        organism: {
+          "annotatorClassName": "",
+          "descriptionByType": "",
+          "descriptionByTypeRelation": "",
+          "id": 517528,
+          "link": "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=8822",
+          "resource": "8822",
+          "type": "TAXONOMY"
+        }
       };
       var genome = new ReferenceGenome(data);
       assert.equal(genome.getType(), data.type);
@@ -21,7 +30,16 @@ describe('ReferenceGenome', function () {
     it("simple", function () {
       var data = {
         sourceUrl: "http://google.pl/",
-        geneMapping: [{}]
+        geneMapping: [{}],
+        organism: {
+          "annotatorClassName": "",
+          "descriptionByType": "",
+          "descriptionByTypeRelation": "",
+          "id": 517528,
+          "link": "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=8822",
+          "resource": "8822",
+          "type": "TAXONOMY"
+        }
       };
       var genome = new ReferenceGenome(data);
       assert.equal(genome.getUrl(), data.sourceUrl);
@@ -37,8 +55,5 @@ describe('ReferenceGenome', function () {
       var genome = new ReferenceGenome(null);
       assert.ok(genome);
     });
-
   });
-
-
 });
diff --git a/frontend-js/testFiles/apiCalls/genomics/token=ADMIN_TOKEN_ID& b/frontend-js/testFiles/apiCalls/genomics/token=ADMIN_TOKEN_ID&
new file mode 100644
index 0000000000..e6582c8cbf
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/genomics/token=ADMIN_TOKEN_ID&
@@ -0,0 +1 @@
+[{"downloadProgress":100.0,"geneMapping":[],"idObject":43,"localUrl":null,"organism":{"annotatorClassName":"","descriptionByType":"","descriptionByTypeRelation":"","id":517528,"link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=8822","resource":"8822","type":"TAXONOMY"},"sourceUrl":"ftp://hgdownload.cse.ucsc.edu/goldenPath/aptMan1/bigZips/aptMan1.2bit","type":"UCSC","version":"aptMan1"},{"downloadProgress":100.0,"geneMapping":[{"downloadProgress":100.0,"localUrl":null,"name":"refGene","sourceUrl":"http://pg-sandbox.uni.lu/data/refGene.txt.bb"}],"idObject":154,"localUrl":null,"organism":{"annotatorClassName":"","descriptionByType":"","descriptionByTypeRelation":"","id":523719,"link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=9606","resource":"9606","type":"TAXONOMY"},"sourceUrl":"ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/bigZips/hg19.2bit","type":"UCSC","version":"hg19"},{"downloadProgress":100.0,"geneMapping":[],"idObject":1563,"localUrl":"../minerva-big//5280/hg38.2bit","organism":{"annotatorClassName":"","descriptionByType":"","descriptionByTypeRelation":"","id":927074,"link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=9606","resource":"9606","type":"TAXONOMY"},"sourceUrl":"ftp://hgdownload.cse.ucsc.edu/goldenPath/hg38/bigZips/hg38.2bit","type":"UCSC","version":"hg38"}]
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
index b8be215211..a47b01f80e 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeRestImpl.java
@@ -70,9 +70,11 @@ public class ReferenceGenomeRestImpl extends BaseRestImpl {
     Map<String, Object> result = new TreeMap<>();
     result.put("organism", super.createAnnotation(genome.getOrganism()));
     result.put("version", genome.getVersion());
+    result.put("type", genome.getType());
     result.put("downloadProgress", genome.getDownloadProgress());
     result.put("sourceUrl", genome.getSourceUrl());
     result.put("localUrl", getLocalUrl(genome.getSourceUrl()));
+    result.put("idObject", genome.getId());
     result.put("geneMapping", geneMappingToMaps(genome.getGeneMapping()));
 
     return result;
-- 
GitLab