diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/util/HierarchyUtil.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/util/HierarchyUtil.js index 870cf7a7070a5d9d4f77e01661010a9bf9a7088e..e84edc6c3988cc45e4381d17c88987db6f653946 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/util/HierarchyUtil.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/util/HierarchyUtil.js @@ -59,8 +59,7 @@ var HierarchyUtil = new function() { return max; } - var result = getMaxChildrenDepthWithQueueRecurion(sample, 0); - return result; + return getMaxChildrenDepthWithQueueRecurion(sample, 0); } var getMaxParentsDepth = function(sample) { @@ -83,10 +82,10 @@ var HierarchyUtil = new function() { return max; } - var result = getMaxParentsDepthWithQueueRecurion(sample, 0); - return result; + return getMaxParentsDepthWithQueueRecurion(sample, 0); } + var getSliderValue = function(id) { var element = $('#' + id) return element.length > 0 ? element.data('slider').getValue() : 0; @@ -165,4 +164,46 @@ var HierarchyUtil = new function() { updater.filterSampleAndUpdate(); }); } + + + this.createRelationShipsMap = function(sample) { + var relationShipsMap = {}; + traverseParents(sample, relationShipsMap); + traverseChildren(sample, relationShipsMap ); + return relationShipsMap; + } + var traverseParents = function(sample, relationShipsMap) { + if (sample.parents) { + for (var i = 0; i < sample.parents.length; i++) { + var parent = sample.parents[i]; + addRelationShip(parent, sample, relationShipsMap); + traverseParents(parent, relationShipsMap); + } + } + } + + var traverseChildren = function(sample, relationShipsMap) { + if (sample.children) { + for (var i = 0; i < sample.children.length; i++) { + var child = sample.children[i]; + addRelationShip(sample, child, relationShipsMap); + traverseChildren(child, relationShipsMap); + } + } + } + + var addRelationShip = function(parent, child, relationShipsMap) { + getRelationShips(child, relationShipsMap).parents.push(parent); + getRelationShips(parent, relationShipsMap).children.push(child); + } + + var getRelationShips = function(sample, relationShipsMap) { + var relationShips = relationShipsMap[sample.identifier]; + if (typeof relationShips === 'undefined') { + relationShips = {parents: [], children: []}; + relationShipsMap[sample.identifier] = relationShips; + } + return relationShips; + } + } diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableModel.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableModel.js index 20411e8ec4b8e2a9b3bfae50a40e7581839967e2..d0dcab0b2048ca83bdc8c6080d4b372d0edd8aaf 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableModel.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableModel.js @@ -15,8 +15,8 @@ */ function SampleHierarchyTableModel(sample) { - this.title = "Sample Hierarchy Table for " + sample.identifier; this.sample = sample; + this.relationShipsMap = HierarchyUtil.createRelationShipsMap(sample); this.getData = function(dataList) { var dataList = []; @@ -62,6 +62,7 @@ function SampleHierarchyTableModel(sample) { this._addRow = function(dataList, sample, level, path) { var annotations = FormUtil.getAnnotationsFromSample(sample); + var relationShips = this.relationShipsMap[sample.identifier]; dataList.push({ level : level, sampleType : sample.sampleTypeCode, @@ -69,17 +70,17 @@ function SampleHierarchyTableModel(sample) { permId : sample.permId, path: path, name : sample.properties["NAME"], - parentAnnotations : this._createAnnotations(annotations, sample.parents), - childrenAnnotations : this._createAnnotations(annotations, sample.children), + parentAnnotations : this._createAnnotations(annotations, relationShips.parents), + childrenAnnotations : this._createAnnotations(annotations, relationShips.children), sample : sample }); } - this._createAnnotations = function(annotations, relatedSamples) { + this._createAnnotations = function(annotations, allSamples) { var content = ""; var rowStarted = false; - AnnotationUtil.buildAnnotations(annotations, relatedSamples, { + AnnotationUtil.buildAnnotations(annotations, allSamples, { startRow : function() { if (content !== "") { content += "\n"; diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableView.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableView.js index 3fb9933500cea1b4964d1de4440d958832b82f9a..146ab8b7905d3445907da97cb50b155d8290c132 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableView.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/SampleHierarchyTable/SampleHierarchyTableView.js @@ -31,7 +31,7 @@ function SampleHierarchyTableView(controller, model) { }); $container.append($containerColumn); - $containerColumn.append($("<h1>").append(this._model.title)); + $containerColumn.append($("<h1>").append("Sample Hierarchy Table for " + this._model.sample.identifier)); HierarchyUtil.addHierarchyFilterWidget($containerColumn, this._model.sample, { filterSampleAndUpdate : function() { _this._dataGrid.refresh(); @@ -65,14 +65,14 @@ function SampleHierarchyTableView(controller, model) { property : 'parentAnnotations', sortable : true, render : function(data) { - return _this._annotationsRenderer(data.sample.parents, data.sample); + return _this._annotationsRenderer(_this._model.relationShipsMap[data.identifier].parents, data.sample); } } , { label : 'Children/Annotations', property : 'childrenAnnotations', sortable : true, render : function(data) { - return _this._annotationsRenderer(data.sample.children, data.sample); + return _this._annotationsRenderer(_this._model.relationShipsMap[data.identifier].children, data.sample); } }];