From 27931cdb64f61a964164a8ac2e48a6ee49122185 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Tue, 3 Jul 2018 17:27:43 +0200
Subject: [PATCH] adding of gene mappings implemented

---
 frontend-js/src/main/js/ServerConnector.js    | 32 ++++++++++
 .../src/main/js/gui/admin/EditGenomeDialog.js | 59 ++++++++++++++++++-
 .../genomics/ReferenceGenomeController.java   | 10 ++++
 .../api/genomics/ReferenceGenomeRestImpl.java | 18 ++++++
 4 files changed, 118 insertions(+), 1 deletion(-)

diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index e8e1ce157c..bd787b7f03 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -464,6 +464,21 @@ ServerConnector.getReferenceGenomeGeneMappingUrl = function (queryParams, filter
   });
 };
 
+/**
+ *
+ * @param {Object} queryParams
+ * @param {string} queryParams.genomeId
+ * @param {Object} [filterParams]
+ *
+ * @returns {string}
+ */
+ServerConnector.getReferenceGenomeGeneMappingsUrl = function (queryParams, filterParams) {
+  return this.getApiUrl({
+    type: "genomics/" + queryParams.genomeId + "/geneMapping/",
+    params: filterParams
+  });
+};
+
 /**
  *
  * @param {Object} queryParams
@@ -2109,6 +2124,23 @@ ServerConnector.getReferenceGenome = function (params) {
   }
 };
 
+
+/**
+ *
+ * @param {Object} params
+ * @param {string|number} params.genomeId
+ * @param {string} params.mappingName
+ * @param {string} params.mappingUrl
+ * @returns {PromiseLike}
+ */
+ServerConnector.addGeneMapping = function (params) {
+  var self = this;
+  var data = {
+    name: params.mappingName,
+    url: params.mappingUrl
+  };
+  return self.sendPostRequest(self.getReferenceGenomeGeneMappingsUrl(params), data);
+};
 /**
  *
  * @param {Object} params
diff --git a/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js b/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js
index f178839c4f..24aded0d9d 100644
--- a/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js
+++ b/frontend-js/src/main/js/gui/admin/EditGenomeDialog.js
@@ -297,6 +297,25 @@ EditGenomeDialog.prototype.createGeneMappingTabContent = function () {
     }).catch(GuiConnector.alert);
   });
 
+  var menuRow = Functions.createElement({
+    type: "div",
+    className: "minerva-menu-row",
+    style: "display:table-row; margin:10px"
+  });
+  result.appendChild(menuRow);
+
+  var addGeneMappingButton = Functions.createElement({
+    type: "button",
+    name: "saveGenome",
+    content: '<span class="ui-icon ui-icon-disk"></span>&nbsp;ADD GENE MAPPING',
+    onclick: function () {
+      return self.openAddGeneMapping();
+    },
+    xss: false
+  });
+
+  menuRow.appendChild(addGeneMappingButton);
+
   return result;
 };
 
@@ -497,7 +516,7 @@ EditGenomeDialog.prototype.init = function () {
 
   var detailsTable = $("[name=detailsTable]", self.getElement())[0];
 
-  var dataTable = $(detailsTable).DataTable({
+  $(detailsTable).DataTable({
     columns: [{
       title: "Name"
     }, {
@@ -630,4 +649,42 @@ EditGenomeDialog.prototype.getSourceUrl = function () {
   return ($("[name='genomeSourceUrl']", self.getElement()).val()).toString();
 };
 
+/**
+ *
+ */
+EditGenomeDialog.prototype.openAddGeneMapping = function () {
+  var self = this;
+  var html = '<form style="z-index:10000"><span>Name: </span><input type="text" name="gene-mapping-name"><br>' +
+    '<span>Url: </span><input type="text" name="gene-mapping-url"><br></form>';
+  $(html).dialog({
+    modal: true,
+    title: "Add gene mapping",
+    close: function () {
+      $(this).dialog('destroy').remove();
+    },
+    buttons: {
+      'ADD': function () {
+        var dialog = this;
+        var name = $('input[name="gene-mapping-name"]').val().toString();
+        var url = $('input[name="gene-mapping-url"]').val().toString();
+        return self.getServerConnector().addGeneMapping({
+          genomeId: self.getReferenceGenome().getId(),
+          mappingName: name,
+          mappingUrl: url
+        }).then(function () {
+          return self.getServerConnector().getReferenceGenome({genomeId: self.getReferenceGenome().getId()});
+        }).then(function (referenceGenome) {
+          self.setReferenceGenome(referenceGenome);
+          return self.refresh();
+        }).then(function () {
+          $(dialog).dialog('destroy').remove();
+        });
+      },
+      'Cancel': function () {
+        $(this).dialog('destroy').remove();
+      }
+    }
+  });
+};
+
 module.exports = EditGenomeDialog;
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
index 0be38d8fa4..cbcb47bcad 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/genomics/ReferenceGenomeController.java
@@ -111,4 +111,14 @@ public class ReferenceGenomeController extends BaseController {
     return referenceGenomeController.removeGeneMapping(genomeId,mappingId, token);
   }
 
+  @RequestMapping(value = "/genomics/{genomeId}/geneMapping/", method = { RequestMethod.POST }, produces = {
+      MediaType.APPLICATION_JSON_VALUE })
+  public Map<String, Object> addGeneMapping(//
+      @PathVariable(value = "genomeId") String genomeId, //
+      @RequestBody MultiValueMap<String, Object> formData, //
+      @CookieValue(value = Configuration.AUTH_TOKEN) String token //
+  ) throws SecurityException, QueryException, IOException, ReferenceGenomeConnectorException  {
+    return referenceGenomeController.addGeneMapping(formData, genomeId, token);
+  }
+
 }
\ 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 bc71b2447c..b47cf24709 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
@@ -241,6 +241,24 @@ public class ReferenceGenomeRestImpl extends BaseRestImpl {
     }
   }
 
+  public Map<String, Object> addGeneMapping(MultiValueMap<String, Object> formData, String genomeId, String token)
+      throws SecurityException, QueryException, IOException, ReferenceGenomeConnectorException {
+    if (!getUserService().userHasPrivilege(token, PrivilegeType.MANAGE_GENOMES)) {
+      throw new SecurityException("Access denied");
+    }
+
+    int id = Integer.parseInt(genomeId);
+    try {
+      ReferenceGenome genome = referenceGenomeService.getReferenceGenomeById(id, token);
+      String name = getFirstValue(formData.get("name"));
+      String url = getFirstValue(formData.get("url"));
+      referenceGenomeService.addReferenceGenomeGeneMapping(genome, name, url);
+      return okStatus();
+    } catch (URISyntaxException e) {
+      throw new QueryException("Problem wih given uri", e);
+    }
+  }
+
   public Map<String, Object> removeGeneMapping(String genomeId, String mappingId, String token)
       throws SecurityException, IOException, ObjectNotFoundException {
     if (!getUserService().userHasPrivilege(token, PrivilegeType.MANAGE_GENOMES)) {
-- 
GitLab