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> 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