fix rendering of "open" action (links) for sensors, by forcing row update when 
sensor metadata changes


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/bef0f7ba
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/bef0f7ba
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/bef0f7ba

Branch: refs/heads/0.6.0
Commit: bef0f7ba61f83381eaf7076b1ae4568133d12b6f
Parents: 08b9a73
Author: Alex Heneveld <[email protected]>
Authored: Thu Sep 26 12:27:17 2013 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Thu Sep 26 12:27:17 2013 +0100

----------------------------------------------------------------------
 .../webapp/assets/js/view/entity-sensors.js     | 28 +++++++++++++++-----
 .../src/main/webapp/assets/js/view/viewutils.js | 11 +++++---
 2 files changed, 29 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/bef0f7ba/usage/jsgui/src/main/webapp/assets/js/view/entity-sensors.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/entity-sensors.js 
b/usage/jsgui/src/main/webapp/assets/js/view/entity-sensors.js
index 919056c..f932b50 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/entity-sensors.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/entity-sensors.js
@@ -75,7 +75,7 @@ define([
             this.toggleFilterEmpty();
             return this;
         },
-
+        
         render: function() {
             return this;
         },
@@ -111,7 +111,7 @@ define([
         isRefreshActive: function() { return this.refreshActive; },
         updateSensorsNow:function () {
             var that = this
-            ViewUtils.get(that, that.model.getSensorUpdateUrl(), 
function(data) { that.updateWithData(data) },
+            ViewUtils.get(that, that.model.getSensorUpdateUrl(), 
that.updateWithData,
                     { enablement: that.isRefreshActive });
         },
         updateSensorsPeriodically:function () {
@@ -122,17 +122,21 @@ define([
         updateWithData: function (data) {
             var that = this
             $table = that.$('#sensors-table');
+            var options = {}
+            if (that.fullRedraw) {
+                options.refreshAllRows = true
+                that.fullRedraw = false
+            }
             ViewUtils.updateMyDataTable($table, data, function(value, name) {
                 var metadata = that.sensorMetadata[name]
                 if (metadata==null) {                        
-                    // TODO should reload metadata when this happens (new 
sensor for which no metadata known)
-                    // (currently if we have dynamic sensors, their metadata 
won't appear
-                    // until the page is refreshed; don't think that's a big 
problem -- mainly tooltips
-                    // for now, we just return the partial value
+                    // kick off reload metadata when this happens (new sensor 
for which no metadata known)
+                    // but only if we haven't loaded metadata for a while
+                    that.loadSensorMetadataIfStale(name, 10000);
                     return [name, {'name':name}, value]
                 } 
                 return [name, metadata, value];
-            });
+            }, options);
         },
 
         /**
@@ -142,6 +146,7 @@ define([
         loadSensorMetadata: function() {
             var url = this.model.getLinkByName('sensors'),
                 that = this;
+            that.lastSensorMetadataLoadTime = new Date().getTime();
             $.get(url, function (data) {
                 _.each(data, function(sensor) {
                     var actions = {};
@@ -157,10 +162,19 @@ define([
                         type: sensor.type
                     }
                 });
+                that.fullRedraw = true
                 that.updateSensorsNow();
                 that.table.find('*[rel="tooltip"]').tooltip();
             });
             return this;
+        },
+        
+        loadSensorMetadataIfStale: function(sensorName, recency) {
+            var that = this
+            if (!that.lastSensorMetadataLoadTime || 
that.lastSensorMetadataLoadTime + recency < new Date().getTime()) {
+//                log("reloading metadata because new sensor "+sensorName+" 
identified")
+                that.loadSensorMetadata();
+            }
         }
     });
 

http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/bef0f7ba/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
----------------------------------------------------------------------
diff --git a/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js 
b/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
index fb04172..76b3d5a 100644
--- a/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
+++ b/usage/jsgui/src/main/webapp/assets/js/view/viewutils.js
@@ -8,6 +8,7 @@ define([
             var settings = {
                 "bDestroy": true,
                 "iDisplayLength": 25,
+                "bDeferRender": true,
                 "sPaginationType": "full_numbers",
                 "sDom": 
"fp<'brook-db-top-toolbar'>tilp<'brook-db-bot-toolbar'>",
                 "oLanguage": {
@@ -57,9 +58,13 @@ define([
          * whose first element is the ID (hidden first column of table)
          * and other elements are the other columns in the table;
          * alternatively it can return null if the entry should be excluded
+         * 
+         * option refreshAllRows can be passed to force all rows to be 
re-rendered;
+         * useful if rendering data may have changed even if value has not
          */ 
-        updateMyDataTable: function(table, collection, fnConvertData) {
+        updateMyDataTable: function(table, collection, fnConvertData, options) 
{
             if (table==null) return;
+            if (options==null) options = {}
             var oldDisplayDataList = []
             try {
                 oldDisplayDataList = table.dataTable().fnGetData();
@@ -100,7 +105,7 @@ define([
                 var oldProps = oldDisplayData[rowProps[0]]
                 for (idx in rowProps) {
                     var v = rowProps[idx]
-                    if (!_.isEqual(v,oldProps[idx])) {
+                    if (options['refreshAllRows'] || 
!_.isEqual(v,oldProps[idx])) {
                         // update individual columns as values change
                         try {
                             table.fnUpdate( v, Number(prop), idx, false, false 
)
@@ -138,8 +143,8 @@ define([
                     log(newDisplayData[prop])
                 }
             }
-//            table.fnAdjustColumnSizing();
             try {
+                // redraw, but keeping pagination
                 table.fnStandingRedraw();
             } catch (e) {
                 log("WARNING: could not redraw")

Reply via email to