From 1f85699ba6d339211595bf82e0fbb583960fde8c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Thu, 20 Jul 2017 18:00:12 +0200 Subject: [PATCH] drug, mirna and checmical have common interface --- frontend-js/src/main/js/map/data/Chemical.js | 36 +++-------------- frontend-js/src/main/js/map/data/Drug.js | 35 +++------------- frontend-js/src/main/js/map/data/MiRna.js | 35 ++-------------- .../main/js/map/data/TargettingStructure.js | 40 +++++++++++++++++++ .../overlay/AbstractTargettingDbOverlay.js | 18 ++++++++- .../main/js/map/window/AbstractInfoWindow.js | 38 ++++++------------ .../test/js/gui/leftPanel/GuiUtils-test.js | 1 - .../js/map/window/AliasInfoWindow-test.js | 8 ++++ 8 files changed, 92 insertions(+), 119 deletions(-) create mode 100644 frontend-js/src/main/js/map/data/TargettingStructure.js diff --git a/frontend-js/src/main/js/map/data/Chemical.js b/frontend-js/src/main/js/map/data/Chemical.js index de0fe4ec01..10fb8b1946 100644 --- a/frontend-js/src/main/js/map/data/Chemical.js +++ b/frontend-js/src/main/js/map/data/Chemical.js @@ -1,22 +1,25 @@ "use strict"; var Annotation = require("./Annotation"); + var Target = require("./Target"); +var TargettingStructure = require("./TargettingStructure"); function Chemical(javaObject) { + TargettingStructure.call(this, javaObject); if (javaObject !== undefined) { - this.setName(javaObject.name); this.setReferences(javaObject.references); this.setDescription(javaObject.description); this.setSynonyms(javaObject.synonyms); - this.setId(javaObject.id); - this.setTargets(javaObject.targets); this.setDirectEvidence(javaObject.directEvidence); this.setDirectEvidenceReferences(javaObject.directEvidenceReferences); } } +Chemical.prototype = Object.create(TargettingStructure.prototype); +Chemical.prototype.constructor = Chemical; + Chemical.prototype.setDirectEvidence = function(directeEvidence) { this._directeEvidence = directeEvidence; }; @@ -63,22 +66,6 @@ Chemical.prototype.getSynonyms = function() { return this._synonyms; }; -Chemical.prototype.setName = function(name) { - this._name = name; -}; - -Chemical.prototype.getName = function() { - return this._name; -}; - -Chemical.prototype.setId = function(id) { - this._id = id; -}; - -Chemical.prototype.getId = function() { - return this._id; -}; - Chemical.prototype.setDescription = function(description) { this._description = description; }; @@ -87,17 +74,6 @@ Chemical.prototype.getDescription = function() { return this._description; }; -Chemical.prototype.setTargets = function(targets) { - this._targets = []; - for (var i = 0; i < targets.length; i++) { - this._targets.push(new Target(targets[i])); - } -}; - -Chemical.prototype.getTargets = function() { - return this._targets; -}; - Chemical.prototype.setBloodBrainBarrier = function(bloodBrainBarrier) { this._bloodBrainBarrier = bloodBrainBarrier; }; diff --git a/frontend-js/src/main/js/map/data/Drug.js b/frontend-js/src/main/js/map/data/Drug.js index 9391dbc8a3..b737199fd4 100644 --- a/frontend-js/src/main/js/map/data/Drug.js +++ b/frontend-js/src/main/js/map/data/Drug.js @@ -2,20 +2,22 @@ var Annotation = require("./Annotation"); var Target = require("./Target"); +var TargettingStructure = require("./TargettingStructure"); function Drug(javaObject) { + TargettingStructure.call(this, javaObject); if (javaObject !== undefined) { this.setBrandNames(javaObject.brandNames); this.setReferences(javaObject.references); this.setSynonyms(javaObject.synonyms); - this.setName(javaObject.name); - this.setId(javaObject.id); this.setDescription(javaObject.description); - this.setTargets(javaObject.targets); this.setBloodBrainBarrier(javaObject.bloodBrainBarrier); } } +Drug.prototype = Object.create(TargettingStructure.prototype); +Drug.prototype.constructor = Drug; + Drug.prototype.setBrandNames = function(brandNames) { this._brandNames = brandNames; }; @@ -43,22 +45,6 @@ Drug.prototype.getSynonyms = function() { return this._synonyms; }; -Drug.prototype.setName = function(name) { - this._name = name; -}; - -Drug.prototype.getName = function() { - return this._name; -}; - -Drug.prototype.setId = function(id) { - this._id = id; -}; - -Drug.prototype.getId = function() { - return this._id; -}; - Drug.prototype.setDescription = function(description) { this._description = description; }; @@ -67,17 +53,6 @@ Drug.prototype.getDescription = function() { return this._description; }; -Drug.prototype.setTargets = function(targets) { - this._targets = []; - for (var i = 0; i < targets.length; i++) { - this._targets.push(new Target(targets[i])); - } -}; - -Drug.prototype.getTargets = function() { - return this._targets; -}; - Drug.prototype.setBloodBrainBarrier = function(bloodBrainBarrier) { this._bloodBrainBarrier = bloodBrainBarrier; }; diff --git a/frontend-js/src/main/js/map/data/MiRna.js b/frontend-js/src/main/js/map/data/MiRna.js index 2b8f60c887..6c09ac419b 100644 --- a/frontend-js/src/main/js/map/data/MiRna.js +++ b/frontend-js/src/main/js/map/data/MiRna.js @@ -1,40 +1,13 @@ "use strict"; var Target = require("./Target"); +var TargettingStructure = require("./TargettingStructure"); function MiRna(javaObject) { - if (javaObject !== undefined) { - this.setName(javaObject.name); - this.setId(javaObject.id); - this.setTargets(javaObject.targets); - } + TargettingStructure.call(this, javaObject); } -MiRna.prototype.setName = function(name) { - this._name = name; -}; - -MiRna.prototype.getName = function() { - return this._name; -}; - -MiRna.prototype.setId = function(id) { - this._id = id; -}; - -MiRna.prototype.getId = function() { - return this._id; -}; - -MiRna.prototype.setTargets = function(targets) { - this._targets = []; - for (var i = 0; i < targets.length; i++) { - this._targets.push(new Target(targets[i])); - } -}; - -MiRna.prototype.getTargets = function() { - return this._targets; -}; +MiRna.prototype = Object.create(TargettingStructure.prototype); +MiRna.prototype.constructor = MiRna; module.exports = MiRna; diff --git a/frontend-js/src/main/js/map/data/TargettingStructure.js b/frontend-js/src/main/js/map/data/TargettingStructure.js new file mode 100644 index 0000000000..c313ff3985 --- /dev/null +++ b/frontend-js/src/main/js/map/data/TargettingStructure.js @@ -0,0 +1,40 @@ +"use strict"; + +var Target = require("./Target"); + +function TargettingStructure(javaObject) { + if (javaObject !== undefined) { + this.setName(javaObject.name); + this.setId(javaObject.id); + this.setTargets(javaObject.targets); + } +} + +TargettingStructure.prototype.setName = function(name) { + this._name = name; +}; + +TargettingStructure.prototype.getName = function() { + return this._name; +}; + +TargettingStructure.prototype.setId = function(id) { + this._id = id; +}; + +TargettingStructure.prototype.getId = function() { + return this._id; +}; + +TargettingStructure.prototype.setTargets = function(targets) { + this._targets = []; + for (var i = 0; i < targets.length; i++) { + this._targets.push(new Target(targets[i])); + } +}; + +TargettingStructure.prototype.getTargets = function() { + return this._targets; +}; + +module.exports = TargettingStructure; diff --git a/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js b/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js index f7b7b1eff6..9d0fa57f97 100644 --- a/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js @@ -114,7 +114,21 @@ AbstractTargettingDbOverlay.prototype.getIdentifiedElements = function() { AbstractTargettingDbOverlay.prototype.getDetailDataByIdentifiedElement = function(element, general) { var self = this; if (general) { - return self.searchNamesByTarget(element); + return self.searchNamesByTarget(element).then(function(names) { + var promises = []; + names.forEach(function(name) { + promises.push(self.searchBySingleQuery(name)); + }) + return Promise.all(promises); + }).then(function(drugs) { + var result = []; + drugs.forEach(function(drugList) { + drugList.forEach(function(drug) { + result.push(drug); + }) + }); + return result; + }); } else { return new Promise(function(resolve) { var result = []; @@ -131,7 +145,7 @@ AbstractTargettingDbOverlay.prototype.getDetailDataByIdentifiedElement = functio var elements = targets[k].getTargetElements(); for (var l = 0; l < elements.length; l++) { if (element.equals(elements[l])) { - result.push(drug.getName()); + result.push(drug); } } } diff --git a/frontend-js/src/main/js/map/window/AbstractInfoWindow.js b/frontend-js/src/main/js/map/window/AbstractInfoWindow.js index d9f2caf8a2..ba14cb62b1 100644 --- a/frontend-js/src/main/js/map/window/AbstractInfoWindow.js +++ b/frontend-js/src/main/js/map/window/AbstractInfoWindow.js @@ -442,14 +442,8 @@ AbstractInfoWindow.prototype._createTargetInfoDiv = function(overlay, data, name count = 0; for ( var dataId in data) { - if (data.hasOwnProperty(dataId) && data[dataId] !== undefined && data[dataId] !== null) { - // if we have empty array, it means that we got data from server and it's - // empty - if (Object.prototype.toString.call(data[dataId]) === '[object Array]') { - continue; - } else { - count++; - } + if (data.hasOwnProperty(dataId)) { + count++; } } @@ -458,25 +452,19 @@ AbstractInfoWindow.prototype._createTargetInfoDiv = function(overlay, data, name table.appendChild(row); for ( var searchId in data) { - if (data.hasOwnProperty(searchId) && data[searchId] !== undefined && data[searchId] !== null) { - // if we have empty array, it means that we got data from server and - // it's - // empty - if (Object.prototype.toString.call(data[searchId]) === '[object Array]') { - continue; + if (data.hasOwnProperty(searchId)) { + row = document.createElement("tr"); + cell = document.createElement("td"); + if (typeof data[searchId] === "string") { + cell.innerHTML = data[searchId]; + } else if (typeof data[searchId].getName === "function") { + cell.innerHTML = data[searchId].getName(); } else { - row = document.createElement("tr"); - cell = document.createElement("td"); - if (typeof data[searchId] === "string") { - cell.innerHTML = data[searchId]; - } else { - cell.innerHTML = searchId; - } - - row.appendChild(cell); - table.appendChild(row); - count++; + cell.innerHTML = searchId; } + row.appendChild(cell); + table.appendChild(row); + count++; } } if (count === 0) { diff --git a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js index 6617b629b7..5e0492f2f6 100644 --- a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js +++ b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js @@ -101,7 +101,6 @@ describe('GuiUtils', function() { var res = utils.createPostTranslationalModifications("label", alias.getOther("modifications")); assert.ok(res.innerHTML); assert.ok(res.innerHTML.indexOf("phosphorylated") >= 0); - logger.debug(res.innerHTML); }); describe('createReactionElement', function() { diff --git a/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js b/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js index 7010e8351e..158e53b6c3 100644 --- a/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js +++ b/frontend-js/src/test/js/map/window/AliasInfoWindow-test.js @@ -7,6 +7,7 @@ var functions = require('../../../../main/js/Functions'); var Helper = require('../../Helper'); var Alias = require('../../../../main/js/map/data/Alias'); +var Drug = require('../../../../main/js/map/data/Drug'); var AliasInfoWindow = require('../../../../main/js/map/window/AliasInfoWindow'); var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement'); var LayoutData = require('../../../../main/js/map/data/LayoutData'); @@ -80,6 +81,13 @@ describe('AliasInfoWindow', function() { oc.searchNamesByTarget = function() { return Promise.resolve([ "xField" ]); }; + oc.getElementsByQueryFromServer = function() { + return Promise.resolve([ new Drug({ + name : "xField", + references : [], + targets : [], + }) ]); + } return oc.getDetailDataByIdentifiedElement(new IdentifiedElement(alias), true).then(function(data) { var overlayDiv = aliasWindow.createOverlayInfoDiv(oc, data); -- GitLab