You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2015/02/02 21:00:26 UTC

[1/6] incubator-nifi git commit: NIFI-307: - Updating how action buttons are invoked in tables throughout the application.

Repository: incubator-nifi
Updated Branches:
  refs/heads/develop 037f36dd9 -> ed8f77160


NIFI-307:
- Updating how action buttons are invoked in tables throughout the application.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/9cd9d126
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/9cd9d126
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/9cd9d126

Branch: refs/heads/develop
Commit: 9cd9d126e34a3039fcf42215c4ad6e67551c8f25
Parents: 037f36d
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 12:44:51 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 12:44:51 2015 -0500

----------------------------------------------------------------------
 .../webapp/js/nf/cluster/nf-cluster-table.js    | 319 +++++++-------
 .../webapp/js/nf/counters/nf-counters-table.js  |  63 +--
 .../webapp/js/nf/history/nf-history-table.js    | 147 ++++---
 .../js/nf/provenance/nf-provenance-table.js     | 103 ++---
 .../js/nf/templates/nf-templates-table.js       |  73 ++-
 .../main/webapp/js/nf/users/nf-users-table.js   | 440 +++++++++----------
 6 files changed, 562 insertions(+), 583 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
index 13b0e5f..2968919 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
@@ -110,6 +110,22 @@ nf.ClusterTable = (function () {
     };
 
     /**
+     * Prompts to verify node connection.
+     * 
+     * @argument {object} node     The node
+     */
+    var promptForConnect = function (node) {
+        // prompt to connect
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Connect \'' + formatNodeAddress(node) + '\' to this cluster?',
+            overlayBackground: false,
+            yesHandler: function () {
+                connect(node.nodeId);
+            }
+        });
+    };
+
+    /**
      * Connects the node in the specified row.
      * 
      * @argument {string} nodeId     The node id
@@ -133,6 +149,22 @@ nf.ClusterTable = (function () {
     };
 
     /**
+     * Prompts to verify node disconnection.
+     * 
+     * @argument {object} node     The node
+     */
+    var promptForDisconnect = function (node) {
+        // prompt for disconnect
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Disconnect \'' + formatNodeAddress(node) + '\' from the cluster?',
+            overlayBackground: false,
+            yesHandler: function () {
+                disconnect(node.nodeId);
+            }
+        });
+    };
+
+    /**
      * Disconnects the node in the specified row.
      * 
      * @argument {string} nodeId     The node id
@@ -156,6 +188,22 @@ nf.ClusterTable = (function () {
     };
 
     /**
+     * Prompts to verify node disconnection.
+     * 
+     * @argument {object} node     The node
+     */
+    var promptForRemoval = function (node) {
+        // prompt for disconnect
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Remove \'' + formatNodeAddress(node) + '\' from the cluster?',
+            overlayBackground: false,
+            yesHandler: function () {
+                remove(node.nodeId);
+            }
+        });
+    };
+
+    /**
      * Disconnects the node in the specified row.
      * 
      * @argument {string} nodeId     The node id
@@ -230,6 +278,86 @@ nf.ClusterTable = (function () {
         // perform the filter
         return item[args.property].search(filterExp) >= 0;
     };
+    
+    /**
+     * Show the node details.
+     * 
+     * @argument {object} item     The item
+     */
+    var showNodeDetails = function (item) {
+        $.ajax({
+            type: 'GET',
+            url: config.urls.nodes + '/' + encodeURIComponent(item.nodeId),
+            dataType: 'json'
+        }).done(function (response) {
+            var node = response.node;
+
+            // update the dialog fields
+            $('#node-id').text(node.nodeId);
+            $('#node-address').text(formatNodeAddress(node));
+
+            // format the events
+            var events = $('#node-events');
+            if ($.isArray(node.events) && node.events.length > 0) {
+                var eventMessages = [];
+                $.each(node.events, function (i, event) {
+                    eventMessages.push(event.timestamp + ": " + event.message);
+                });
+                $('<div></div>').append(nf.Common.formatUnorderedList(eventMessages)).appendTo(events);
+            } else {
+                events.append('<div><span class="unset">None</span></div>');
+            }
+
+            // show the dialog
+            $('#node-details-dialog').modal('show');
+        }).fail(nf.Common.handleAjaxError);
+    };
+    
+    /**
+     * Makes the specified node the primary node of the cluster.
+     * 
+     * @argument {object} item     The node item
+     */
+    var makePrimary = function (item) {
+        $.ajax({
+            type: 'PUT',
+            url: config.urls.nodes + '/' + encodeURIComponent(item.nodeId),
+            data: {
+                primary: true
+            },
+            dataType: 'json'
+        }).done(function (response) {
+            var grid = $('#cluster-table').data('gridInstance');
+            var data = grid.getData();
+
+            var node = response.node;
+
+            // start the update
+            data.beginUpdate();
+            data.updateItem(node.nodeId, node);
+
+            // need to find the previous primary node
+            // get the property grid data
+            var clusterItems = data.getItems();
+            $.each(clusterItems, function (i, otherNode) {
+                // attempt to identify the previous primary node
+                if (node.nodeId !== otherNode.nodeId && otherNode.primary === true) {
+                    // reset its primary status
+                    otherNode.primary = false;
+                    otherNode.status = 'CONNECTED';
+
+                    // set the new node state
+                    data.updateItem(otherNode.nodeId, otherNode);
+
+                    // no need to continue processing
+                    return false;
+                }
+            });
+
+            // end the update
+            data.endUpdate();
+        }).fail(nf.Common.handleAjaxError);
+    };
 
     return {
         /**
@@ -292,7 +420,7 @@ nf.ClusterTable = (function () {
 
             // define a custom formatter for the more details column
             var moreDetailsFormatter = function (row, cell, value, columnDef, dataContext) {
-                return '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 4px;" onclick="javascript:nf.ClusterTable.showNodeDetails(\'' + row + '\');"/>';
+                return '<img src="images/iconDetails.png" title="View Details" class="pointer show-node-details" style="margin-top: 4px;"/>';
             };
 
             // define a custom formatter for the run status column
@@ -348,11 +476,11 @@ nf.ClusterTable = (function () {
 
                     // return the appropriate markup
                     if (canConnect) {
-                        return '<img src="images/iconConnect.png" title="Connect" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.ClusterTable.promptForConnect(\'' + row + '\');"/>&nbsp;<img src="images/iconDelete.png" title="Remove" class="pointer" onclick="javascript:nf.ClusterTable.promptForRemoval(\'' + row + '\');"/>';
+                        return '<img src="images/iconConnect.png" title="Connect" class="pointer prompt-for-connect" style="margin-top: 2px;"/>&nbsp;<img src="images/iconDelete.png" title="Remove" class="pointer prompt-for-removal"/>';
                     } else if (canDisconnect) {
-                        var actions = '<img src="images/iconDisconnect.png" title="Disconnect" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.ClusterTable.promptForDisconnect(\'' + row + '\');"/>';
+                        var actions = '<img src="images/iconDisconnect.png" title="Disconnect" class="pointer prompt-for-disconnect" style="margin-top: 2px;"/>';
                         if (canBecomePrimary) {
-                            actions += '&nbsp;<img src="images/iconPrimary.png" title="Make Primary" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.ClusterTable.makePrimary(\'' + row + '\');"/>';
+                            actions += '&nbsp;<img src="images/iconPrimary.png" title="Make Primary" class="pointer make-primary" style="margin-top: 2px;"/>';
                         }
                         return actions;
                     } else {
@@ -360,7 +488,7 @@ nf.ClusterTable = (function () {
                     }
                 };
 
-                columnModel.push({id: 'action', label: '&nbsp;', formatter: actionFormatter, resizable: false, sortable: false, width: 80, maxWidth: 80});
+                columnModel.push({id: 'actions', label: '&nbsp;', formatter: actionFormatter, resizable: false, sortable: false, width: 80, maxWidth: 80});
             }
 
             var clusterOptions = {
@@ -398,6 +526,31 @@ nf.ClusterTable = (function () {
                     sortAsc: args.sortAsc
                 }, clusterData);
             });
+            
+            // configure a click listener
+            clusterGrid.onClick.subscribe(function (e, args) {
+                var target = $(e.target);
+
+                // get the node at this row
+                var item = clusterData.getItem(args.row);
+
+                // determine the desired action
+                if (clusterGrid.getColumns()[args.cell].id === 'actions') {
+                    if (target.hasClass('prompt-for-connect')) {
+                        promptForConnect(item);
+                    } else if (target.hasClass('prompt-for-removal')) {
+                        promptForRemoval(item);
+                    } else if (target.hasClass('prompt-for-disconnect')) {
+                        promptForDisconnect(item);
+                    } else if (target.hasClass('make-primary')) {
+                        makePrimary(item);
+                    }
+                } else if (clusterGrid.getColumns()[args.cell].id === 'moreDetails') {
+                    if (target.hasClass('show-node-details')) {
+                        showNodeDetails(item);
+                    }
+                }
+            });
 
             // wire up the dataview to the grid
             clusterData.onRowCountChanged.subscribe(function (e, args) {
@@ -420,122 +573,6 @@ nf.ClusterTable = (function () {
         },
         
         /**
-         * Prompts to verify node connection.
-         * 
-         * @argument {string} row     The row
-         */
-        promptForConnect: function (row) {
-            var grid = $('#cluster-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var node = data.getItem(row);
-
-                // prompt to connect
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Connect \'' + formatNodeAddress(node) + '\' to this cluster?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        connect(node.nodeId);
-                    }
-                });
-            }
-
-        },
-        
-        /**
-         * Prompts to verify node disconnection.
-         * 
-         * @argument {string} row     The row
-         */
-        promptForDisconnect: function (row) {
-            var grid = $('#cluster-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var node = data.getItem(row);
-
-                // prompt for disconnect
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Disconnect \'' + formatNodeAddress(node) + '\' from the cluster?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        disconnect(node.nodeId);
-                    }
-                });
-            }
-        },
-        
-        /**
-         * Makes the specified node the primary node of the cluster.
-         * 
-         * @argument {string} row     The row
-         */
-        makePrimary: function (row) {
-            var grid = $('#cluster-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                $.ajax({
-                    type: 'PUT',
-                    url: config.urls.nodes + '/' + encodeURIComponent(item.nodeId),
-                    data: {
-                        primary: true
-                    },
-                    dataType: 'json'
-                }).done(function (response) {
-                    var node = response.node;
-
-                    // start the update
-                    data.beginUpdate();
-                    data.updateItem(node.nodeId, node);
-
-                    // need to find the previous primary node
-                    // get the property grid data
-                    var clusterItems = data.getItems();
-                    $.each(clusterItems, function (i, otherNode) {
-                        // attempt to identify the previous primary node
-                        if (node.nodeId !== otherNode.nodeId && otherNode.primary === true) {
-                            // reset its primary status
-                            otherNode.primary = false;
-                            otherNode.status = 'CONNECTED';
-
-                            // set the new node state
-                            data.updateItem(otherNode.nodeId, otherNode);
-
-                            // no need to continue processing
-                            return false;
-                        }
-                    });
-
-                    // end the update
-                    data.endUpdate();
-                }).fail(nf.Common.handleAjaxError);
-            }
-        },
-        
-        /**
-         * Prompts to verify node disconnection.
-         * 
-         * @argument {string} row     The row
-         */
-        promptForRemoval: function (row) {
-            var grid = $('#cluster-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var node = data.getItem(row);
-
-                // prompt for disconnect
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Remove \'' + formatNodeAddress(node) + '\' from the cluster?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        remove(node.nodeId);
-                    }
-                });
-            }
-        },
-        
-        /**
          * Update the size of the grid based on its container's current size.
          */
         resetTableSize: function () {
@@ -575,46 +612,6 @@ nf.ClusterTable = (function () {
                     $('#total-nodes').text('0');
                 }
             }).fail(nf.Common.handleAjaxError);
-        },
-        
-        /**
-         * Populate the expanded row.
-         * 
-         * @argument {string} row     The row
-         */
-        showNodeDetails: function (row) {
-            var grid = $('#cluster-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                $.ajax({
-                    type: 'GET',
-                    url: config.urls.nodes + '/' + encodeURIComponent(item.nodeId),
-                    dataType: 'json'
-                }).done(function (response) {
-                    var node = response.node;
-
-                    // update the dialog fields
-                    $('#node-id').text(node.nodeId);
-                    $('#node-address').text(formatNodeAddress(node));
-
-                    // format the events
-                    var events = $('#node-events');
-                    if ($.isArray(node.events) && node.events.length > 0) {
-                        var eventMessages = [];
-                        $.each(node.events, function (i, event) {
-                            eventMessages.push(event.timestamp + ": " + event.message);
-                        });
-                        $('<div></div>').append(nf.Common.formatUnorderedList(eventMessages)).appendTo(events);
-                    } else {
-                        events.append('<div><span class="unset">None</span></div>');
-                    }
-
-                    // show the dialog
-                    $('#node-details-dialog').modal('show');
-                }).fail(nf.Common.handleAjaxError);
-            }
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
index 536ffdb..2b26aaa 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
@@ -110,6 +110,26 @@ nf.CountersTable = (function () {
         // perform the filter
         return item[args.property].search(filterExp) >= 0;
     };
+    
+    /**
+     * Resets the specified counter.
+     * 
+     * @argument {object} item     The counter item
+     */
+    var resetCounter = function (item) {
+        $.ajax({
+            type: 'PUT',
+            url: config.urls.counters + '/' + encodeURIComponent(item.id),
+            dataType: 'json'
+        }).done(function (response) {
+            var counter = response.counter;
+
+            // get the table and update the row accordingly
+            var countersGrid = $('#counters-table').data('gridInstance');
+            var countersData = countersGrid.getData();
+            countersData.updateItem(counter.id, counter);
+        }).fail(nf.Common.handleAjaxError);
+    };
 
     return {
         /**
@@ -159,7 +179,7 @@ nf.CountersTable = (function () {
             if (nf.Common.isDFM()) {
                 // function for formatting the actions column
                 var actionFormatter = function (row, cell, value, columnDef, dataContext) {
-                    return '<img src="images/iconResetCounter.png" title="Reset" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.CountersTable.resetCounter(\'' + row + '\');"/>';
+                    return '<img src="images/iconResetCounter.png" title="Reset" class="pointer reset-counter" style="margin-top: 2px;"/>';
                 };
 
                 // add the action column
@@ -202,6 +222,21 @@ nf.CountersTable = (function () {
                     sortAsc: args.sortAsc
                 }, countersData);
             });
+            
+            // configure a click listener
+            countersGrid.onClick.subscribe(function (e, args) {
+                var target = $(e.target);
+
+                // get the node at this row
+                var item = countersData.getItem(args.row);
+
+                // determine the desired action
+                if (countersGrid.getColumns()[args.cell].id === 'actions') {
+                    if (target.hasClass('reset-counter')) {
+                        resetCounter(item);
+                    }
+                }
+            });
 
             // wire up the dataview to the grid
             countersData.onRowCountChanged.subscribe(function (e, args) {
@@ -224,32 +259,6 @@ nf.CountersTable = (function () {
         },
         
         /**
-         * Resets the specified counter.
-         * 
-         * @argument {string} row     The row
-         */
-        resetCounter: function (row) {
-            var grid = $('#counters-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                $.ajax({
-                    type: 'PUT',
-                    url: config.urls.counters + '/' + encodeURIComponent(item.id),
-                    dataType: 'json'
-                }).done(function (response) {
-                    var counter = response.counter;
-
-                    // get the table and update the row accordingly
-                    var countersGrid = $('#counters-table').data('gridInstance');
-                    var countersData = countersGrid.getData();
-                    countersData.updateItem(counter.id, counter);
-                }).fail(nf.Common.handleAjaxError);
-            }
-        },
-        
-        /**
          * Update the size of the grid based on its container's current size.
          */
         resetTableSize: function () {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
index be0ea73..72fc549 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
@@ -244,7 +244,7 @@ nf.HistoryTable = (function () {
 
         // define a custom formatter for the more details column
         var moreDetailsFormatter = function (row, cell, value, columnDef, dataContext) {
-            return '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 4px;" onclick="javascript:nf.HistoryTable.showActionDetails(\'' + row + '\');"/>';
+            return '<img src="images/iconDetails.png" title="View Details" class="pointer show-action-details" style="margin-top: 4px;"/>';
         };
 
         // initialize the templates table
@@ -283,6 +283,21 @@ nf.HistoryTable = (function () {
         });
         historyGrid.setSortColumn('timestamp', false);
 
+        // configure a click listener
+        historyGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = historyModel.getItem(args.row);
+
+            // determine the desired action
+            if (historyGrid.getColumns()[args.cell].id === 'moreDetails') {
+                if (target.hasClass('show-action-details')) {
+                    showActionDetails(item);
+                }
+            }
+        });
+
         // listen for when the viewport changes so we can fetch the appropriate records
         historyGrid.onViewportChanged.subscribe(function (e, args) {
             var vp = historyGrid.getViewport();
@@ -325,6 +340,68 @@ nf.HistoryTable = (function () {
             nf.HistoryTable.loadHistoryTable();
         }).fail(nf.Common.handleAjaxError);
     };
+    
+    /**
+     * Shows the details for the specified action.
+     * 
+     * @param {object} action
+     */
+    var showActionDetails = function (action) {
+        // create the markup for the dialog
+        var detailsMarkup = $('<div></div>').append(
+                $('<div class="action-detail"><div class="history-details-name">Id</div>' + nf.Common.escapeHtml(action.sourceId) + '</div>'));
+
+        // get any component details
+        var componentDetails = action.componentDetails;
+
+        // inspect the operation to determine if there are any component details
+        if (nf.Common.isDefinedAndNotNull(componentDetails)) {
+            if (action.sourceType === 'Processor') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">Type</div>' + nf.Common.escapeHtml(componentDetails.type) + '</div>'));
+            } else if (action.sourceType === 'RemoteProcessGroup') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">Uri</div>' + nf.Common.formatValue(componentDetails.uri) + '</div>'));
+            }
+        }
+
+        // get any action details
+        var actionDetails = action.actionDetails;
+
+        // inspect the operation to determine if there are any action details
+        if (nf.Common.isDefinedAndNotNull(actionDetails)) {
+            if (action.operation === 'Configure') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">Name</div>' + nf.Common.formatValue(actionDetails.name) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Value</div>' + nf.Common.formatValue(actionDetails.value) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Previous Value</div>' + nf.Common.formatValue(actionDetails.previousValue) + '</div>'));
+            } else if (action.operation === 'Connect' || action.operation === 'Disconnect') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">Source Id</div>' + nf.Common.escapeHtml(actionDetails.sourceId) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Source Name</div>' + nf.Common.formatValue(actionDetails.sourceName) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Source Type</div>' + nf.Common.escapeHtml(actionDetails.sourceType) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Relationship(s)</div>' + nf.Common.formatValue(actionDetails.relationship) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Destination Id</div>' + nf.Common.escapeHtml(actionDetails.destinationId) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Destination Name</div>' + nf.Common.formatValue(actionDetails.destinationName) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Destination Type</div>' + nf.Common.escapeHtml(actionDetails.destinationType) + '</div>'));
+            } else if (action.operation === 'Move') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">Group</div>' + nf.Common.formatValue(actionDetails.group) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Group Id</div>' + nf.Common.escapeHtml(actionDetails.groupId) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Previous Group</div>' + nf.Common.formatValue(actionDetails.previousGroup) + '</div>')).append(
+                        $('<div class="action-detail"><div class="history-details-name">Previous Group Id</div>' + nf.Common.escapeHtml(actionDetails.previousGroupId) + '</div>'));
+            } else if (action.operation === 'Purge') {
+                detailsMarkup.append(
+                        $('<div class="action-detail"><div class="history-details-name">End Date</div>' + nf.Common.escapeHtml(actionDetails.endDate) + '</div>'));
+            }
+        }
+
+        // populate the dialog
+        $('#action-details').append(detailsMarkup);
+
+        // show the dialog
+        $('#action-details-dialog').modal('show');
+    };
 
     return {
         init: function () {
@@ -356,74 +433,6 @@ nf.HistoryTable = (function () {
 
             // request refresh of the current 'page'
             historyGrid.onViewportChanged.notify();
-        },
-        
-        /**
-         * Shows the details for the specified action.
-         * 
-         * @param {object} index
-         */
-        showActionDetails: function (index) {
-            var historyGrid = $('#history-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(historyGrid)) {
-                var historyModel = historyGrid.getData();
-                var action = historyModel.getItem(index);
-
-                // create the markup for the dialog
-                var detailsMarkup = $('<div></div>').append(
-                        $('<div class="action-detail"><div class="history-details-name">Id</div>' + nf.Common.escapeHtml(action.sourceId) + '</div>'));
-
-                // get any component details
-                var componentDetails = action.componentDetails;
-
-                // inspect the operation to determine if there are any component details
-                if (nf.Common.isDefinedAndNotNull(componentDetails)) {
-                    if (action.sourceType === 'Processor') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">Type</div>' + nf.Common.escapeHtml(componentDetails.type) + '</div>'));
-                    } else if (action.sourceType === 'RemoteProcessGroup') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">Uri</div>' + nf.Common.formatValue(componentDetails.uri) + '</div>'));
-                    }
-                }
-
-                // get any action details
-                var actionDetails = action.actionDetails;
-
-                // inspect the operation to determine if there are any action details
-                if (nf.Common.isDefinedAndNotNull(actionDetails)) {
-                    if (action.operation === 'Configure') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">Name</div>' + nf.Common.formatValue(actionDetails.name) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Value</div>' + nf.Common.formatValue(actionDetails.value) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Previous Value</div>' + nf.Common.formatValue(actionDetails.previousValue) + '</div>'));
-                    } else if (action.operation === 'Connect' || action.operation === 'Disconnect') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">Source Id</div>' + nf.Common.escapeHtml(actionDetails.sourceId) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Source Name</div>' + nf.Common.formatValue(actionDetails.sourceName) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Source Type</div>' + nf.Common.escapeHtml(actionDetails.sourceType) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Relationship(s)</div>' + nf.Common.formatValue(actionDetails.relationship) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Destination Id</div>' + nf.Common.escapeHtml(actionDetails.destinationId) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Destination Name</div>' + nf.Common.formatValue(actionDetails.destinationName) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Destination Type</div>' + nf.Common.escapeHtml(actionDetails.destinationType) + '</div>'));
-                    } else if (action.operation === 'Move') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">Group</div>' + nf.Common.formatValue(actionDetails.group) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Group Id</div>' + nf.Common.escapeHtml(actionDetails.groupId) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Previous Group</div>' + nf.Common.formatValue(actionDetails.previousGroup) + '</div>')).append(
-                                $('<div class="action-detail"><div class="history-details-name">Previous Group Id</div>' + nf.Common.escapeHtml(actionDetails.previousGroupId) + '</div>'));
-                    } else if (action.operation === 'Purge') {
-                        detailsMarkup.append(
-                                $('<div class="action-detail"><div class="history-details-name">End Date</div>' + nf.Common.escapeHtml(actionDetails.endDate) + '</div>'));
-                    }
-                }
-
-                // populate the dialog
-                $('#action-details').append(detailsMarkup);
-
-                // show the dialog
-                $('#action-details-dialog').modal('show');
-            }
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
index 759bcda..2880375 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
@@ -553,7 +553,7 @@ nf.ProvenanceTable = (function () {
 
         // define a custom formatter for the more details column
         var moreDetailsFormatter = function (row, cell, value, columnDef, dataContext) {
-            return '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 4px;" onclick="javascript:nf.ProvenanceTable.showEventDetailsByIndex(\'' + row + '\');"/>';
+            return '<img src="images/iconDetails.png" title="View Details" class="pointer show-event-details" style="margin-top: 4px;"/>';
         };
 
         // define how general values are formatted
@@ -570,12 +570,12 @@ nf.ProvenanceTable = (function () {
 
             // conditionally include the cluster node id
             if (nf.Common.SUPPORTS_SVG) {
-                markup += '<img src="images/iconLineage.png" title="Show Lineage" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.ProvenanceTable.showLineage(\'' + row + '\');"/>';
+                markup += '<img src="images/iconLineage.png" title="Show Lineage" class="pointer show-lineage" style="margin-top: 2px;"/>';
             }
 
             // conditionally support going to the component
             if (isInShell && nf.Common.isDefinedAndNotNull(dataContext.groupId)) {
-                markup += '&nbsp;<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.ProvenanceTable.goTo(\'' + row + '\');"/>';
+                markup += '&nbsp;<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>';
             }
 
             return markup;
@@ -599,7 +599,7 @@ nf.ProvenanceTable = (function () {
 
         // conditionally show the action column
         if (nf.Common.SUPPORTS_SVG || isInShell) {
-            provenanceColumns.push({id: 'action', name: '&nbsp;', formatter: showLineageFormatter, resizable: false, sortable: false, width: 50, maxWidth: 50});
+            provenanceColumns.push({id: 'actions', name: '&nbsp;', formatter: showLineageFormatter, resizable: false, sortable: false, width: 50, maxWidth: 50});
         }
 
         var provenanceOptions = {
@@ -641,6 +641,27 @@ nf.ProvenanceTable = (function () {
                 sortAsc: args.sortAsc
             }, provenanceData);
         });
+        
+        // configure a click listener
+        provenanceGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = provenanceData.getItem(args.row);
+
+            // determine the desired action
+            if (provenanceGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('show-lineage')) {
+                    nf.ProvenanceLineage.showLineage(item.flowFileUuid, item.eventId.toString(), item.clusterNodeId);
+                } else if (target.hasClass('go-to')) {
+                    goTo(item);
+                }
+            } else if (provenanceGrid.getColumns()[args.cell].id === 'moreDetails') {
+                if (target.hasClass('show-event-details')) {
+                    nf.ProvenanceTable.showEventDetails(item);
+                }
+            }
+        });
 
         // wire up the dataview to the grid
         provenanceData.onRowCountChanged.subscribe(function (e, args) {
@@ -884,6 +905,25 @@ nf.ProvenanceTable = (function () {
         }
     };
 
+    /**
+     * Goes to the specified component if possible.
+     * 
+     * @argument {object} item       The event it
+     */
+    var goTo = function (item) {
+        // ensure the component is still present in the flow
+        if (nf.Common.isDefinedAndNotNull(item.groupId)) {
+            // only attempt this if we're within a frame
+            if (top !== window) {
+                // and our parent has canvas utils and shell defined
+                if (nf.Common.isDefinedAndNotNull(parent.nf) && nf.Common.isDefinedAndNotNull(parent.nf.CanvasUtils) && nf.Common.isDefinedAndNotNull(parent.nf.Shell)) {
+                    parent.nf.CanvasUtils.showComponent(item.groupId, item.componentId);
+                    parent.$('#shell-close-button').click();
+                }
+            }
+        }
+    };
+
     return {
         /**
          * The max delay between requests.
@@ -910,31 +950,6 @@ nf.ProvenanceTable = (function () {
         },
         
         /**
-         * Goes to the specified component if possible.
-         * 
-         * @argument {string} row       The row
-         */
-        goTo: function (row) {
-            var grid = $('#provenance-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // ensure the component is still present in the flow
-                if (nf.Common.isDefinedAndNotNull(item.groupId)) {
-                    // only attempt this if we're within a frame
-                    if (top !== window) {
-                        // and our parent has canvas utils and shell defined
-                        if (nf.Common.isDefinedAndNotNull(parent.nf) && nf.Common.isDefinedAndNotNull(parent.nf.CanvasUtils) && nf.Common.isDefinedAndNotNull(parent.nf.Shell)) {
-                            parent.nf.CanvasUtils.showComponent(item.groupId, item.componentId);
-                            parent.$('#shell-close-button').click();
-                        }
-                    }
-                }
-            }
-        },
-        
-        /**
          * Update the size of the grid based on its container's current size.
          */
         resetTableSize: function () {
@@ -1096,36 +1111,6 @@ nf.ProvenanceTable = (function () {
         },
         
         /**
-         * Shows the lineage for the event in the specified row.
-         * 
-         * @param {type} row
-         */
-        showLineage: function (row) {
-            var grid = $('#provenance-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.ProvenanceLineage.showLineage(item.flowFileUuid, item.eventId.toString(), item.clusterNodeId);
-            }
-        },
-        
-        /**
-         * Gets the event details and shows the details dialog.
-         * 
-         * @param {long} index
-         */
-        showEventDetailsByIndex: function (index) {
-            var provenanceGrid = $('#provenance-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(provenanceGrid)) {
-                var provenanceModel = provenanceGrid.getData();
-                var event = provenanceModel.getItem(index);
-
-                // show the event details
-                nf.ProvenanceTable.showEventDetails(event);
-            }
-        },
-        
-        /**
          * Shows the details for the specified action.
          * 
          * @param {object} event

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
index 1756207..ec8f49e 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
@@ -54,6 +54,22 @@ nf.TemplatesTable = (function () {
     };
 
     /**
+     * Prompts the user before attempting to delete the specified template.
+     * 
+     * @argument {object} template     The template
+     */
+    var promptToDeleteTemplate = function (template) {
+        // prompt for deletion
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Delete template \'' + nf.Common.escapeHtml(template.name) + '\'?',
+            overlayBackground: false,
+            yesHandler: function () {
+                deleteTemplate(template.id);
+            }
+        });
+    };
+
+    /**
      * Deletes the template with the specified id.
      * 
      * @argument {string} templateId     The template id
@@ -177,11 +193,11 @@ nf.TemplatesTable = (function () {
 
             // function for formatting the actions column
             var actionFormatter = function (row, cell, value, columnDef, dataContext) {
-                var markup = '<img src="images/iconExport.png" title="Download" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.TemplatesTable.exportTemplate(\'' + row + '\');"/>';
+                var markup = '<img src="images/iconExport.png" title="Download" class="pointer export-template" style="margin-top: 2px;"/>';
 
                 // all DFMs to remove templates
                 if (nf.Common.isDFM()) {
-                    markup += '&nbsp;<img src="images/iconDelete.png" title="Remove Template" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.TemplatesTable.promptToDeleteTemplate(\'' + row + '\');"/>';
+                    markup += '&nbsp;<img src="images/iconDelete.png" title="Remove Template" class="pointer prompt-to-delete-template" style="margin-top: 2px;"/>';
                 }
                 return markup;
             };
@@ -230,6 +246,23 @@ nf.TemplatesTable = (function () {
                 }, templatesData);
             });
 
+            // configure a click listener
+            templatesGrid.onClick.subscribe(function (e, args) {
+                var target = $(e.target);
+
+                // get the node at this row
+                var item = templatesData.getItem(args.row);
+
+                // determine the desired action
+                if (templatesGrid.getColumns()[args.cell].id === 'actions') {
+                    if (target.hasClass('export-template')) {
+                        window.open(config.urls.templates + '/' + encodeURIComponent(item.id));
+                    } else if (target.hasClass('prompt-to-delete-template')) {
+                        promptToDeleteTemplate(item);
+                    }
+                }
+            });
+
             // wire up the dataview to the grid
             templatesData.onRowCountChanged.subscribe(function (e, args) {
                 templatesGrid.updateRowCount();
@@ -261,42 +294,6 @@ nf.TemplatesTable = (function () {
         },
         
         /**
-         * Exports the specified template.
-         * 
-         * @argument {string} row     The row
-         */
-        exportTemplate: function (row) {
-            var grid = $('#templates-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                window.open(config.urls.templates + '/' + encodeURIComponent(item.id));
-            }
-        },
-        
-        /**
-         * Prompts the user before attempting to delete the specified template.
-         * 
-         * @argument {string} row     The row
-         */
-        promptToDeleteTemplate: function (row) {
-            var grid = $('#templates-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var template = data.getItem(row);
-
-                // prompt for deletion
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Delete template \'' + nf.Common.escapeHtml(template.name) + '\'?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        deleteTemplate(template.id);
-                    }
-                });
-            }
-        },
-        
-        /**
          * Load the processor templates table.
          */
         loadTemplatesTable: function () {

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/9cd9d126/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
index 996544f..88ea225 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
@@ -483,7 +483,7 @@ nf.UsersTable = (function () {
 
         // define a custom formatter for the more details column
         var moreDetailsFormatter = function (row, cell, value, columnDef, dataContext) {
-            return '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 4px;" onclick="javascript:nf.UsersTable.showUserDetails(\'' + row + '\');"/>';
+            return '<img src="images/iconDetails.png" title="View Details" class="pointer show-user-details" style="margin-top: 4px;"/>';
         };
 
         // function for formatting the last accessed time
@@ -566,20 +566,20 @@ nf.UsersTable = (function () {
 
             // if this represents a grouped row
             if (nf.Common.isDefinedAndNotNull(dataContext.userGroup) && grouped) {
-                var actions = '<img src="images/iconEdit.png" title="Edit Access" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.UsersTable.updateGroupAccess(\'' + row + '\');"/>&nbsp;<img src="images/iconRevoke.png" title="Revoke Access" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.UsersTable.revokeGroupAccess(\'' + row + '\');"/>&nbsp;&nbsp;<img src="images/ungroup.png" title="Ungroup" class="pointer" onclick="javascript:nf.UsersTable.ungroup(\'' + row + '\');"/>';
+                var actions = '<img src="images/iconEdit.png" title="Edit Access" class="pointer update-group-access" style="margin-top: 2px;"/>&nbsp;<img src="images/iconRevoke.png" title="Revoke Access" class="pointer revoke-group-access" style="margin-top: 2px;"/>&nbsp;&nbsp;<img src="images/ungroup.png" title="Ungroup" class="pointer ungroup"/>';
             } else {
                 // return the appropriate markup for an individual user
-                var actions = '<img src="images/iconEdit.png" title="Edit Access" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.UsersTable.updateUserAccess(\'' + row + '\');"/>';
+                var actions = '<img src="images/iconEdit.png" title="Edit Access" class="pointer update-user-access" style="margin-top: 2px;"/>';
 
                 if (dataContext.status === 'ACTIVE') {
-                    actions += '&nbsp;<img src="images/iconRevoke.png" title="Revoke Access" class="pointer" onclick="javascript:nf.UsersTable.revokeUserAccess(\'' + row + '\');"/>';
+                    actions += '&nbsp;<img src="images/iconRevoke.png" title="Revoke Access" class="pointer revoke-user-access"/>';
 
                     // add an ungroup active if appropriate
                     if (nf.Common.isDefinedAndNotNull(dataContext.userGroup)) {
-                        actions += '&nbsp;&nbsp;<img src="images/ungroup.png" title="Ungroup" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.UsersTable.ungroupUser(\'' + row + '\');"/>';
+                        actions += '&nbsp;&nbsp;<img src="images/ungroup.png" title="Ungroup" class="pointer ungroup-user" style="margin-top: 2px;"/>';
                     }
                 } else {
-                    actions += '&nbsp;<img src="images/iconDelete.png" title="Delete Account" class="pointer" onclick="javascript:nf.UsersTable.deleteUserAccount(\'' + row + '\');"/>';
+                    actions += '&nbsp;<img src="images/iconDelete.png" title="Delete Account" class="pointer delete-user-account"/>';
                 }
             }
 
@@ -632,6 +632,37 @@ nf.UsersTable = (function () {
                 sortAsc: args.sortAsc
             }, usersData);
         });
+        
+        // configure a click listener
+        usersGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = usersData.getItem(args.row);
+
+            // determine the desired action
+            if (usersGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('update-group-access')) {
+                    updateGroupAccess(item);
+                } else if (target.hasClass('revoke-group-access')) {
+                    revokeGroupAccess(item);
+                } else if (target.hasClass('ungroup')) {
+                    ungroup(item);
+                } else if (target.hasClass('update-user-access')) {
+                    updateUserAccess(item);
+                } else if (target.hasClass('revoke-user-access')) {
+                    revokeUserAccess(item);
+                } else if (target.hasClass('ungroup-user')) {
+                    ungroupUser(item);
+                } else if (target.hasClass('delete-user-account')) {
+                    deleteUserAccount(item);
+                }
+            } else if (usersGrid.getColumns()[args.cell].id === 'moreDetails') {
+                if (target.hasClass('show-user-details')) {
+                    showUserDetails(item);
+                }
+            }
+        });
 
         // wire up the dataview to the grid
         usersData.onRowCountChanged.subscribe(function (e, args) {
@@ -804,193 +835,192 @@ nf.UsersTable = (function () {
         }
     };
 
-    return {
-        init: function () {
-            initUserDetailsDialog();
-            initUserRolesDialog();
-            initGroupRolesDialog();
-            initUserRevokeDialog();
-            initUserDeleteDialog();
-            initUserGroupDialog();
-            initGroupRevokeDialog();
-            initUsersTable();
-        },
-        
-        /**
-         * Disables the specified user's account.
-         * 
-         * @argument {string} row        The row
-         */
-        revokeUserAccess: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
+    /**
+     * Shows details for the specified user.
+     * 
+     * @param {object} user
+     */
+    var showUserDetails = function (user) {
+        var grouped = $('#group-collaspe-checkbox').hasClass('checkbox-checked');
+
+        // update the dialog fields
+        $('#user-name-details-dialog').text(user.userName);
+        $('#user-dn-details-dialog').text(user.dn);
+
+        // handle fields that could vary for groups
+        if (nf.Common.isDefinedAndNotNull(user.creation)) {
+            $('#user-created-details-dialog').text(user.creation);
+        } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
+            $('#user-created-details-dialog').html('<span class="unset">Multiple users with different creation timestamps.</span>');
+        } else {
+            $('#user-created-details-dialog').html('<span class="unset">No creation timestamp set</span>');
+        }
 
-                // populate the users info
-                $('#user-id-revoke-dialog').val(item.id);
-                $('#user-name-revoke-dialog').text(item.userName);
+        if (nf.Common.isDefinedAndNotNull(user.lastVerified)) {
+            $('#user-verified-details-dialog').text(user.lastVerified);
+        } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
+            $('#user-verified-details-dialog').html('<span class="unset">Multiple users with different last verified timestamps.</span>');
+        } else {
+            $('#user-verified-details-dialog').html('<span class="unset">No last verified timestamp set.</span>');
+        }
 
-                // show the dialog
-                $('#user-revoke-dialog').modal('show');
-            }
-        },
-        
-        /**
-         * Delete's the specified user's account.
-         * 
-         * @argument {string} row        The row
-         */
-        deleteUserAccount: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
+        if (nf.Common.isDefinedAndNotNull(user.justification)) {
+            $('#user-justification-details-dialog').text(user.justification);
+        } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
+            $('#user-justification-details-dialog').html('<span class="unset">Multiple users with different justifications.</span>');
+        } else {
+            $('#user-justification-details-dialog').html('<span class="unset">No justification set.</span>');
+        }
 
-                // populate the users info
-                $('#user-id-delete-dialog').val(item.id);
-                $('#user-name-delete-dialog').text(item.userName);
+        // show the dialog
+        $('#user-details-dialog').modal('show');
+    };
+    
+    /**
+     * Updates the specified groups level of access.
+     * 
+     * @argument {object} item        The user item
+     */
+    var updateGroupAccess = function (item) {
+        // record the current group
+        $('#group-name-roles-dialog').text(item.userGroup);
 
-                // show the dialog
-                $('#user-delete-dialog').modal('show');
-            }
-        },
-        
-        /**
-         * Disables the specified group's account.
-         * 
-         * @argument {string} row        The row
-         */
-        revokeGroupAccess: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
+        // show the dialog
+        $('#group-roles-dialog').modal('show');
+    };
+    
+    /**
+     * Disables the specified group's account.
+     * 
+     * @argument {object} item        The user item
+     */
+    var revokeGroupAccess = function (item) {
+        // record the current group
+        $('#group-name-revoke-dialog').text(item.userGroup);
 
-                // record the current group
-                $('#group-name-revoke-dialog').text(item.userGroup);
+        // show the dialog
+        $('#group-revoke-dialog').modal('show');
+    };
 
-                // show the dialog
-                $('#group-revoke-dialog').modal('show');
+    /**
+     * Ungroups the specified group.
+     * 
+     * @argument {object} item        The user item
+     */
+    var ungroup = function (item) {
+        // prompt for ungroup
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Remove all users from group \'' + nf.Common.escapeHtml(item.userGroup) + '\'?',
+            overlayBackground: false,
+            yesHandler: function () {
+                $.ajax({
+                    type: 'DELETE',
+                    url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup),
+                    dataType: 'json'
+                }).done(function (response) {
+                    nf.UsersTable.loadUsersTable();
+                }).fail(nf.Common.handleAjaxError);
             }
-        },
-        
-        /**
-         * Updates the specified users's level of access.
-         * 
-         * @argument {string} row        The row
-         */
-        updateUserAccess: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // populate the user info
-                $('#user-id-roles-dialog').val(item.id);
-                $('#user-name-roles-dialog').attr('title', item.dn).text(item.userName);
-                $('#user-justification-roles-dialog').html(nf.Common.formatValue(item.justification));
-
-                // function for checking a checkbox
-                var check = function (domId) {
-                    $('#' + domId).removeClass('checkbox-unchecked').addClass('checkbox-checked');
-                };
-
-                // go through each user role
-                $.each(item.authorities, function (i, authority) {
-                    if (authority === 'ROLE_ADMIN') {
-                        check('role-admin-checkbox');
-                    } else if (authority === 'ROLE_DFM') {
-                        check('role-dfm-checkbox');
-                    } else if (authority === 'ROLE_PROVENANCE') {
-                        check('role-provenance-checkbox');
-                    } else if (authority === 'ROLE_MONITOR') {
-                        check('role-monitor-checkbox');
-                    } else if (authority === 'ROLE_NIFI') {
-                        check('role-nifi-checkbox');
-                    } else if (authority === 'ROLE_PROXY') {
-                        check('role-proxy-checkbox');
-                    }
-                });
+        });
+    };
+    
+    /**
+     * Updates the specified users's level of access.
+     * 
+     * @argument {object} item        The user item
+     */
+    var updateUserAccess = function (item) {
+        // populate the user info
+        $('#user-id-roles-dialog').val(item.id);
+        $('#user-name-roles-dialog').attr('title', item.dn).text(item.userName);
+        $('#user-justification-roles-dialog').html(nf.Common.formatValue(item.justification));
+
+        // function for checking a checkbox
+        var check = function (domId) {
+            $('#' + domId).removeClass('checkbox-unchecked').addClass('checkbox-checked');
+        };
 
-                // show the dialog
-                $('#user-roles-dialog').modal('show');
+        // go through each user role
+        $.each(item.authorities, function (i, authority) {
+            if (authority === 'ROLE_ADMIN') {
+                check('role-admin-checkbox');
+            } else if (authority === 'ROLE_DFM') {
+                check('role-dfm-checkbox');
+            } else if (authority === 'ROLE_PROVENANCE') {
+                check('role-provenance-checkbox');
+            } else if (authority === 'ROLE_MONITOR') {
+                check('role-monitor-checkbox');
+            } else if (authority === 'ROLE_NIFI') {
+                check('role-nifi-checkbox');
+            } else if (authority === 'ROLE_PROXY') {
+                check('role-proxy-checkbox');
             }
-        },
-        
-        /**
-         * Updates the specified groups level of access.
-         * 
-         * @argument {string} row        The row
-         */
-        updateGroupAccess: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
+        });
 
-                // record the current group
-                $('#group-name-roles-dialog').text(item.userGroup);
+        // show the dialog
+        $('#user-roles-dialog').modal('show');
+    };
+    
+    /**
+     * Disables the specified user's account.
+     * 
+     * @argument {object} item        The user item
+     */
+    var revokeUserAccess = function (item) {
+        // populate the users info
+        $('#user-id-revoke-dialog').val(item.id);
+        $('#user-name-revoke-dialog').text(item.userName);
 
-                // show the dialog
-                $('#group-roles-dialog').modal('show');
-            }
-        },
-        
-        /**
-         * Prompts to verify group removal.
-         * 
-         * @argument {string} row        The row
-         */
-        ungroupUser: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // prompt for ungroup
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Remove user \'' + nf.Common.escapeHtml(item.userName) + '\' from group \'' + nf.Common.escapeHtml(item.userGroup) + '\'?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        $.ajax({
-                            type: 'DELETE',
-                            url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup) + '/users/' + encodeURIComponent(item.id),
-                            dataType: 'json'
-                        }).done(function (response) {
-                            nf.UsersTable.loadUsersTable();
-                        }).fail(nf.Common.handleAjaxError);
-                    }
-                });
-            }
-        },
-        
-        /**
-         * Ungroups the specified group.
-         * 
-         * @argument {string} row        The row
-         */
-        ungroup: function (row) {
-            var grid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // prompt for ungroup
-                nf.Dialog.showYesNoDialog({
-                    dialogContent: 'Remove all users from group \'' + nf.Common.escapeHtml(item.userGroup) + '\'?',
-                    overlayBackground: false,
-                    yesHandler: function () {
-                        $.ajax({
-                            type: 'DELETE',
-                            url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup),
-                            dataType: 'json'
-                        }).done(function (response) {
-                            nf.UsersTable.loadUsersTable();
-                        }).fail(nf.Common.handleAjaxError);
-                    }
-                });
+        // show the dialog
+        $('#user-revoke-dialog').modal('show');
+    };
+    
+    /**
+     * Prompts to verify group removal.
+     * 
+     * @argument {object} item        The user item
+     */
+    var ungroupUser = function (item) {
+        // prompt for ungroup
+        nf.Dialog.showYesNoDialog({
+            dialogContent: 'Remove user \'' + nf.Common.escapeHtml(item.userName) + '\' from group \'' + nf.Common.escapeHtml(item.userGroup) + '\'?',
+            overlayBackground: false,
+            yesHandler: function () {
+                $.ajax({
+                    type: 'DELETE',
+                    url: config.urls.userGroups + '/' + encodeURIComponent(item.userGroup) + '/users/' + encodeURIComponent(item.id),
+                    dataType: 'json'
+                }).done(function (response) {
+                    nf.UsersTable.loadUsersTable();
+                }).fail(nf.Common.handleAjaxError);
             }
+        });
+    };
+
+    /**
+     * Delete's the specified user's account.
+     * 
+     * @argument {object} item        The user item
+     */
+    var deleteUserAccount = function (item) {
+        // populate the users info
+        $('#user-id-delete-dialog').val(item.id);
+        $('#user-name-delete-dialog').text(item.userName);
+
+        // show the dialog
+        $('#user-delete-dialog').modal('show');
+    };
+
+    return {
+        init: function () {
+            initUserDetailsDialog();
+            initUserRolesDialog();
+            initGroupRolesDialog();
+            initUserRevokeDialog();
+            initUserDeleteDialog();
+            initUserGroupDialog();
+            initGroupRevokeDialog();
+            initUsersTable();
         },
         
         /**
@@ -1037,54 +1067,6 @@ nf.UsersTable = (function () {
                     $('#total-users').text('0');
                 }
             }).fail(nf.Common.handleAjaxError);
-        },
-        
-        /**
-         * Shows details for the specified user.
-         * 
-         * @param {string} row
-         */
-        showUserDetails: function (row) {
-            var usersGrid = $('#users-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(usersGrid)) {
-                var usersData = usersGrid.getData();
-
-                // get the user
-                var user = usersData.getItem(row);
-                var grouped = $('#group-collaspe-checkbox').hasClass('checkbox-checked');
-
-                // update the dialog fields
-                $('#user-name-details-dialog').text(user.userName);
-                $('#user-dn-details-dialog').text(user.dn);
-
-                // handle fields that could vary for groups
-                if (nf.Common.isDefinedAndNotNull(user.creation)) {
-                    $('#user-created-details-dialog').text(user.creation);
-                } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
-                    $('#user-created-details-dialog').html('<span class="unset">Multiple users with different creation timestamps.</span>');
-                } else {
-                    $('#user-created-details-dialog').html('<span class="unset">No creation timestamp set</span>');
-                }
-
-                if (nf.Common.isDefinedAndNotNull(user.lastVerified)) {
-                    $('#user-verified-details-dialog').text(user.lastVerified);
-                } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
-                    $('#user-verified-details-dialog').html('<span class="unset">Multiple users with different last verified timestamps.</span>');
-                } else {
-                    $('#user-verified-details-dialog').html('<span class="unset">No last verified timestamp set.</span>');
-                }
-
-                if (nf.Common.isDefinedAndNotNull(user.justification)) {
-                    $('#user-justification-details-dialog').text(user.justification);
-                } else if (grouped && nf.Common.isDefinedAndNotNull(user.userGroup)) {
-                    $('#user-justification-details-dialog').html('<span class="unset">Multiple users with different justifications.</span>');
-                } else {
-                    $('#user-justification-details-dialog').html('<span class="unset">No justification set.</span>');
-                }
-
-                // show the dialog
-                $('#user-details-dialog').modal('show');
-            }
         }
     };
 }());
\ No newline at end of file


[4/6] incubator-nifi git commit: NIFI-295: - Considering the default value when a property is unset.

Posted by mc...@apache.org.
NIFI-295:
- Considering the default value when a property is unset.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/600a47be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/600a47be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/600a47be

Branch: refs/heads/develop
Commit: 600a47be166e942b64bcc7c624af5db7b5c17cc2
Parents: 94b3903
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 13:40:07 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 13:40:07 2015 -0500

----------------------------------------------------------------------
 .../apache/nifi/web/controller/ControllerFacade.java | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/600a47be/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
index b2a1ae4..b009581 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
@@ -1190,17 +1190,24 @@ public class ControllerFacade implements ControllerServiceProvider {
         for (final Map.Entry<PropertyDescriptor, String> entry : procNode.getProperties().entrySet()) {
             final PropertyDescriptor descriptor = entry.getKey();
             
-            addIfAppropriate(searchStr, descriptor.getName(), "Property", matches);
-            addIfAppropriate(searchStr, descriptor.getDescription(), "Property", matches);
+            addIfAppropriate(searchStr, descriptor.getName(), "Property name", matches);
+            addIfAppropriate(searchStr, descriptor.getDescription(), "Property description", matches);
             
             // never include sensitive properties values in search results
             if (descriptor.isSensitive()) {
                 continue;
             }
             
-            final String value = entry.getValue();
+            String value = entry.getValue();
+            
+            // if unset consider default value
+            if (value == null) {
+                value = descriptor.getDefaultValue();
+            }
+            
+            // evaluate if the value matches the search criteria
             if (StringUtils.containsIgnoreCase(value, searchStr)) {
-                matches.add("Property: " + descriptor.getName() + " - " + value);
+                matches.add("Property value: " + descriptor.getName() + " - " + value);
             }
         }
 


[5/6] incubator-nifi git commit: NIFI-289: - Added logging when error conditions occur in UpdateAttribute REST endpoints.

Posted by mc...@apache.org.
NIFI-289:
- Added logging when error conditions occur in UpdateAttribute REST endpoints.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/93b78a7d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/93b78a7d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/93b78a7d

Branch: refs/heads/develop
Commit: 93b78a7dd5d4e4fa43fc84c5992010389638d595
Parents: 600a47b
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 14:02:24 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 14:02:24 2015 -0500

----------------------------------------------------------------------
 .../nifi/update/attributes/api/RuleResource.java    | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/93b78a7d/nifi/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java b/nifi/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
index 05ed0a1..dc2d27c 100644
--- a/nifi/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
+++ b/nifi/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-ui/src/main/java/org/apache/nifi/update/attributes/api/RuleResource.java
@@ -70,6 +70,8 @@ import com.sun.jersey.api.NotFoundException;
 
 import org.apache.nifi.update.attributes.FlowFilePolicy;
 import org.apache.nifi.update.attributes.entity.EvaluationContextEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  *
@@ -77,6 +79,8 @@ import org.apache.nifi.update.attributes.entity.EvaluationContextEntity;
 @Path("/criteria")
 public class RuleResource {
 
+    private static final Logger logger = LoggerFactory.getLogger(RuleResource.class);
+
     @Context
     private ServletContext servletContext;
 
@@ -612,7 +616,9 @@ public class RuleResource {
         } catch (final InvalidRevisionException ire) {
             throw new WebApplicationException(invalidRevision(ire.getMessage()));
         } catch (final Exception e) {
-            throw new WebApplicationException(error(e.getMessage()));
+            final String message = String.format("Unable to get UpdateAttribute[id=%s] criteria: %s", contextConfig.getProcessorId(), e);
+            logger.error(message, e);
+            throw new WebApplicationException(error(message));
         }
 
         Criteria criteria = null;
@@ -620,7 +626,9 @@ public class RuleResource {
             try {
                 criteria = CriteriaSerDe.deserialize(processorInfo.getAnnotationData());
             } catch (final IllegalArgumentException iae) {
-                throw new WebApplicationException(error("Unable to load existing rules. Deserialization error: " + iae.getMessage()));
+                final String message = String.format("Unable to deserialize existing rules for UpdateAttribute[id=%s]. Deserialization error: %s", contextConfig.getProcessorId(), iae);
+                logger.error(message, iae);
+                throw new WebApplicationException(error(message));
             }
         }
         // ensure the criteria isn't null
@@ -644,7 +652,9 @@ public class RuleResource {
         } catch (final InvalidRevisionException ire) {
             throw new WebApplicationException(invalidRevision(ire.getMessage()));
         } catch (final Exception e) {
-            throw new WebApplicationException(error(e.getMessage()));
+            final String message = String.format("Unable to save UpdateAttribute[id=%s] criteria: %s", contextConfig.getProcessorId(), e);
+            logger.error(message, e);
+            throw new WebApplicationException(error(message));
         }
     }
 


[3/6] incubator-nifi git commit: NIFI-297: - Fixed name of the nifi user log.

Posted by mc...@apache.org.
NIFI-297:
- Fixed name of the nifi user log.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/94b39036
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/94b39036
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/94b39036

Branch: refs/heads/develop
Commit: 94b39036dc10b025c321cf983dace0a3b9f45196
Parents: b4d07e2
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 13:16:34 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 13:16:34 2015 -0500

----------------------------------------------------------------------
 .../nifi-resources/src/main/resources/conf/logback.xml           | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/94b39036/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/logback.xml
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/logback.xml b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/logback.xml
index 5f4e933..42d3353 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/logback.xml
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-resources/src/main/resources/conf/logback.xml
@@ -42,7 +42,7 @@
     </appender>
     
     <appender name="USER_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>logs/${project.artifactId}-user.log</file>
+        <file>logs/nifi-user.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <!--
               For daily rollover, use 'user_%d.log'.
@@ -50,7 +50,7 @@
               To GZIP rolled files, replace '.log' with '.log.gz'.
               To ZIP rolled files, replace '.log' with '.log.zip'.
             -->
-            <fileNamePattern>./logs/${project.artifactId}-user_%d.log</fileNamePattern>
+            <fileNamePattern>./logs/nifi-user_%d.log</fileNamePattern>
             <!-- keep 30 log files worth of history -->
             <maxHistory>30</maxHistory>
         </rollingPolicy>


[2/6] incubator-nifi git commit: NIFI-307: - Updating how action buttons are invoked in tables throughout the application. NIFI-311: - Addressing visibility and behavior issue with the refresh button in the component cluster summary dialog.

Posted by mc...@apache.org.
NIFI-307:
- Updating how action buttons are invoked in tables throughout the application.
NIFI-311:
- Addressing visibility and behavior issue with the refresh button in the component cluster summary dialog.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/b4d07e26
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/b4d07e26
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/b4d07e26

Branch: refs/heads/develop
Commit: b4d07e262f05ce16b4731d9a4b57de1d8d35848e
Parents: 9cd9d12
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 12:45:53 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 12:45:53 2015 -0500

----------------------------------------------------------------------
 .../webapp/js/nf/summary/nf-summary-table.js    | 523 +++++++------------
 .../src/main/webapp/js/nf/summary/nf-summary.js |   6 -
 2 files changed, 190 insertions(+), 339 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b4d07e26/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
index 969d7bf..a4583bc 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
@@ -263,7 +263,7 @@ nf.SummaryTable = (function () {
 
         // define a custom formatter for showing more processor details
         var moreProcessorDetails = function (row, cell, value, columnDef, dataContext) {
-            var markup = '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 5px; float: left;" onclick="javascript:nf.SummaryTable.showProcessorDetails(\'' + row + '\');"/>';
+            var markup = '<img src="images/iconDetails.png" title="View Details" class="pointer show-processor-details" style="margin-top: 5px; float: left;"/>';
 
             // if there are bulletins, render them on the graph
             if (!nf.Common.isEmpty(dataContext.bulletins)) {
@@ -333,26 +333,26 @@ nf.SummaryTable = (function () {
                 var markup = '';
 
                 if (isInShell) {
-                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.goToProcessor(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 if (nf.Common.SUPPORTS_SVG) {
                     if (isClustered) {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterProcessorStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-cluster-processor-status-history" style="margin-top: 2px;"/>&nbsp;';
                     } else {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showProcessorStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-processor-status-history" style="margin-top: 2px;"/>&nbsp;';
                     }
                 }
 
                 if (isClustered) {
-                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterProcessorSummary(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer show-cluster-processor-summary" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 return markup;
             };
 
             // define the action column for clusters and within the shell
-            processorsColumnModel.push({id: 'action', name: '&nbsp;', formatter: processorActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
+            processorsColumnModel.push({id: 'actions', name: '&nbsp;', formatter: processorActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
         }
 
         // initialize the templates table
@@ -394,6 +394,38 @@ nf.SummaryTable = (function () {
             }, processorsData);
         });
 
+        // configure a click listener
+        processorsGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = processorsData.getItem(args.row);
+
+            // determine the desired action
+            if (processorsGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('go-to')) {
+                    goTo(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-processor-status-history')) {
+                    nf.StatusHistory.showClusterProcessorChart(item.groupId, item.id);
+                } else if (target.hasClass('show-processor-status-history')) {
+                    nf.StatusHistory.showStandaloneProcessorChart(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-processor-summary')) {
+                    // load the cluster processor summary
+                    loadClusterProcessorSummary(item.id);
+
+                    // hide the summary loading indicator
+                    $('#summary-loading-container').hide();
+
+                    // show the dialog
+                    $('#cluster-processor-summary-dialog').modal('show');
+                }
+            } else if (processorsGrid.getColumns()[args.cell].id === 'moreDetails') {
+                if (target.hasClass('show-processor-details')) {
+                    nf.ProcessorDetails.showDetails(item.groupId, item.id);
+                }
+            }
+        });
+
         // wire up the dataview to the grid
         processorsData.onRowCountChanged.subscribe(function (e, args) {
             processorsGrid.updateRowCount();
@@ -464,6 +496,11 @@ nf.SummaryTable = (function () {
                 }
             }
         });
+        
+        // cluster processor refresh
+        nf.Common.addHoverEffect('#cluster-processor-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
+            loadClusterProcessorSummary($('#cluster-processor-id').text());
+        });
 
         // initialize the cluster processor column model
         var clusterProcessorsColumnModel = [
@@ -524,7 +561,7 @@ nf.SummaryTable = (function () {
 
         // define a custom formatter for showing more processor details
         var moreConnectionDetails = function (row, cell, value, columnDef, dataContext) {
-            return '<img src="images/iconDetails.png" title="View Details" class="pointer" style="margin-top: 5px;" onclick="javascript:nf.SummaryTable.showConnectionDetails(\'' + row + '\');"/>';
+            return '<img src="images/iconDetails.png" title="View Details" class="pointer show-connection-details" style="margin-top: 5px;"/>';
         };
 
         // define the input, read, written, and output columns (reused between both tables)
@@ -548,26 +585,26 @@ nf.SummaryTable = (function () {
                 var markup = '';
 
                 if (isInShell) {
-                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.goToConnection(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 if (nf.Common.SUPPORTS_SVG) {
                     if (isClustered) {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterConnectionStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-cluster-connection-status-history" style="margin-top: 2px;"/>&nbsp;';
                     } else {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showConnectionStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-connection-status-history" style="margin-top: 2px;"/>&nbsp;';
                     }
                 }
 
                 if (isClustered) {
-                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterConnectionSummary(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer show-cluster-connection-summary" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 return markup;
             };
 
             // define the action column for clusters and within the shell
-            connectionsColumnModel.push({id: 'action', name: '&nbsp;', formatter: connectionActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
+            connectionsColumnModel.push({id: 'actions', name: '&nbsp;', formatter: connectionActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
         }
 
         // initialize the templates table
@@ -609,6 +646,38 @@ nf.SummaryTable = (function () {
             }, connectionsData);
         });
 
+        // configure a click listener
+        connectionsGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = connectionsData.getItem(args.row);
+
+            // determine the desired action
+            if (connectionsGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('go-to')) {
+                    goTo(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-connection-status-history')) {
+                    nf.StatusHistory.showClusterConnectionChart(item.groupId, item.id);
+                } else if (target.hasClass('show-connection-status-history')) {
+                    nf.StatusHistory.showStandaloneConnectionChart(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-connection-summary')) {
+                    // load the cluster processor summary
+                    loadClusterConnectionSummary(item.id);
+
+                    // hide the summary loading indicator
+                    $('#summary-loading-container').hide();
+
+                    // show the dialog
+                    $('#cluster-connection-summary-dialog').modal('show');
+                }
+            } else if (connectionsGrid.getColumns()[args.cell].id === 'moreDetails') {
+                if (target.hasClass('show-connection-details')) {
+                    nf.ConnectionDetails.showDetails(item.groupId, item.id);
+                }
+            }
+        });
+
         // wire up the dataview to the grid
         connectionsData.onRowCountChanged.subscribe(function (e, args) {
             connectionsGrid.updateRowCount();
@@ -651,6 +720,11 @@ nf.SummaryTable = (function () {
                 }
             }
         });
+        
+        // cluster connection refresh
+        nf.Common.addHoverEffect('#cluster-connection-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
+            loadClusterConnectionSummary($('#cluster-connection-id').text());
+        });
 
         // initialize the cluster processor column model
         var clusterConnectionsColumnModel = [
@@ -734,18 +808,18 @@ nf.SummaryTable = (function () {
                 var markup = '';
 
                 if (isInShell) {
-                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.goToInputPort(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 if (isClustered) {
-                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterInputPortSummary(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer show-cluster-input-port-summary" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 return markup;
             };
 
             // define the action column for clusters and within the shell
-            inputPortsColumnModel.push({id: 'action', name: '&nbsp;', formatter: inputPortActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
+            inputPortsColumnModel.push({id: 'actions', name: '&nbsp;', formatter: inputPortActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
         }
 
         // initialize the input ports table
@@ -787,6 +861,30 @@ nf.SummaryTable = (function () {
             }, inputPortsData);
         });
 
+        // configure a click listener
+        inputPortsGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = inputPortsData.getItem(args.row);
+
+            // determine the desired action
+            if (inputPortsGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('go-to')) {
+                    goTo(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-input-port-summary')) {
+                    // load the cluster processor summary
+                    loadClusterInputPortSummary(item.id);
+
+                    // hide the summary loading indicator
+                    $('#summary-loading-container').hide();
+
+                    // show the dialog
+                    $('#cluster-input-port-summary-dialog').modal('show');
+                }
+            }
+        });
+
         // wire up the dataview to the grid
         inputPortsData.onRowCountChanged.subscribe(function (e, args) {
             inputPortsGrid.updateRowCount();
@@ -857,6 +955,11 @@ nf.SummaryTable = (function () {
                 }
             }
         });
+        
+        // cluster input port refresh
+        nf.Common.addHoverEffect('#cluster-input-port-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
+            loadClusterInputPortSummary($('#cluster-input-port-id').text());
+        });
 
         // initialize the cluster input port column model
         var clusterInputPortsColumnModel = [
@@ -927,18 +1030,18 @@ nf.SummaryTable = (function () {
                 var markup = '';
 
                 if (isInShell) {
-                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.goToOutputPort(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 if (isClustered) {
-                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterOutputPortSummary(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer show-cluster-output-port-summary" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 return markup;
             };
 
             // define the action column for clusters and within the shell
-            outputPortsColumnModel.push({id: 'action', name: '&nbsp;', formatter: outputPortActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
+            outputPortsColumnModel.push({id: 'actions', name: '&nbsp;', formatter: outputPortActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
         }
 
         // initialize the input ports table
@@ -980,6 +1083,30 @@ nf.SummaryTable = (function () {
             }, outputPortsData);
         });
 
+        // configure a click listener
+        outputPortsGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = outputPortsData.getItem(args.row);
+
+            // determine the desired action
+            if (outputPortsGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('go-to')) {
+                    goTo(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-output-port-summary')) {
+                    // load the cluster processor summary
+                    loadClusterOutputPortSummary(item.id);
+
+                    // hide the summary loading indicator
+                    $('#summary-loading-container').hide();
+
+                    // show the dialog
+                    $('#cluster-output-port-summary-dialog').modal('show');
+                }
+            }
+        });
+
         // wire up the dataview to the grid
         outputPortsData.onRowCountChanged.subscribe(function (e, args) {
             outputPortsGrid.updateRowCount();
@@ -1050,6 +1177,11 @@ nf.SummaryTable = (function () {
                 }
             }
         });
+        
+        // cluster output port refresh
+        nf.Common.addHoverEffect('#cluster-output-port-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
+            loadClusterOutputPortSummary($('#cluster-output-port-id').text());
+        });
 
         // initialize the cluster output port column model
         var clusterOutputPortsColumnModel = [
@@ -1152,26 +1284,26 @@ nf.SummaryTable = (function () {
                 var markup = '';
 
                 if (isInShell) {
-                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.goToRemoteProcessGroup(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconGoTo.png" title="Go To" class="pointer go-to" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 if (nf.Common.SUPPORTS_SVG) {
                     if (isClustered) {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterRemoteProcessGroupStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-cluster-remote-process-group-status-history" style="margin-top: 2px;"/>&nbsp;';
                     } else {
-                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showRemoteProcessGroupStatusHistory(\'' + row + '\');"/>&nbsp;';
+                        markup += '<img src="images/iconChart.png" title="Show History" class="pointer show-remote-process-group-status-history" style="margin-top: 2px;"/>&nbsp;';
                     }
                 }
 
                 if (isClustered) {
-                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer" style="margin-top: 2px;" onclick="javascript:nf.SummaryTable.showClusterRemoteProcessGroupSummary(\'' + row + '\');"/>&nbsp;';
+                    markup += '<img src="images/iconClusterSmall.png" title="Show Details" class="pointer show-cluster-remote-process-group-summary" style="margin-top: 2px;"/>&nbsp;';
                 }
 
                 return markup;
             };
 
             // define the action column for clusters and within the shell
-            remoteProcessGroupsColumnModel.push({id: 'action', name: '&nbsp;', formatter: remoteProcessGroupActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
+            remoteProcessGroupsColumnModel.push({id: 'actions', name: '&nbsp;', formatter: remoteProcessGroupActionFormatter, resizable: false, sortable: false, width: 75, maxWidth: 75});
         }
 
         // initialize the remote process groups table
@@ -1213,6 +1345,34 @@ nf.SummaryTable = (function () {
             }, remoteProcessGroupsData);
         });
 
+        // configure a click listener
+        remoteProcessGroupsGrid.onClick.subscribe(function (e, args) {
+            var target = $(e.target);
+
+            // get the node at this row
+            var item = remoteProcessGroupsData.getItem(args.row);
+
+            // determine the desired action
+            if (remoteProcessGroupsGrid.getColumns()[args.cell].id === 'actions') {
+                if (target.hasClass('go-to')) {
+                    goTo(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-remote-process-group-status-history')) {
+                    nf.StatusHistory.showClusterRemoteProcessGroupChart(item.groupId, item.id);
+                } else if (target.hasClass('show-remote-process-group-status-history')) {
+                    nf.StatusHistory.showStandaloneRemoteProcessGroupChart(item.groupId, item.id);
+                } else if (target.hasClass('show-cluster-remote-process-group-summary')) {
+                    // load the cluster processor summary
+                    loadClusterRemoteProcessGroupSummary(item.id);
+
+                    // hide the summary loading indicator
+                    $('#summary-loading-container').hide();
+
+                    // show the dialog
+                    $('#cluster-remote-process-group-summary-dialog').modal('show');
+                }
+            }
+        });
+
         // wire up the dataview to the grid
         remoteProcessGroupsData.onRowCountChanged.subscribe(function (e, args) {
             remoteProcessGroupsGrid.updateRowCount();
@@ -1283,6 +1443,11 @@ nf.SummaryTable = (function () {
                 }
             }
         });
+        
+        // cluster remote process group refresh
+        nf.Common.addHoverEffect('#cluster-remote-process-group-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
+            loadClusterRemoteProcessGroupSummary($('#cluster-remote-process-group-id').text());
+        });
 
         // initialize the cluster remote process group column model
         var clusterRemoteProcessGroupsColumnModel = [
@@ -1749,7 +1914,6 @@ nf.SummaryTable = (function () {
 
                 // populate the processor details
                 $('#cluster-processor-name').text(clusterProcessorStatus.processorName).ellipsis();
-                ;
                 $('#cluster-processor-id').text(clusterProcessorStatus.processorId);
 
                 // update the stats last refreshed timestamp
@@ -1801,7 +1965,6 @@ nf.SummaryTable = (function () {
 
                 // populate the processor details
                 $('#cluster-connection-name').text(clusterConnectionStatus.connectionName).ellipsis();
-                ;
                 $('#cluster-connection-id').text(clusterConnectionStatus.connectionId);
 
                 // update the stats last refreshed timestamp
@@ -1959,18 +2122,16 @@ nf.SummaryTable = (function () {
             }
         }).fail(nf.Common.handleAjaxError);
     };
-    
+
     return {
         /**
          * URL for loading system diagnostics.
          */
         systemDiagnosticsUrl: null,
-        
         /**
          * URL for loading the summary.
          */
         url: null,
-        
         /**
          * Initializes the status table.
          * 
@@ -1994,7 +2155,6 @@ nf.SummaryTable = (function () {
                 });
             }).promise();
         },
-        
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -2024,7 +2184,6 @@ nf.SummaryTable = (function () {
                 remoteProcessGroupGrid.resizeCanvas();
             }
         },
-        
         /**
          * Load the processor status table.
          */
@@ -2043,7 +2202,7 @@ nf.SummaryTable = (function () {
                     // remove any tooltips from the processor table
                     var processorsGridElement = $('#processor-summary-table');
                     nf.Common.cleanUpTooltips(processorsGridElement, 'img.has-bulletins');
-                    
+
                     // get the processor grid/data
                     var processorsGrid = processorsGridElement.data('gridInstance');
                     var processorsData = processorsGrid.getData();
@@ -2129,308 +2288,6 @@ nf.SummaryTable = (function () {
                     $('#total-items').text('0');
                 }
             }).fail(nf.Common.handleAjaxError);
-        },
-        
-        // processor actions
-
-        /**
-         * Shows the details for the processor at the specified row.
-         * 
-         * @param {type} row        row index
-         */
-        showProcessorDetails: function (row) {
-            var grid = $('#processor-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.ProcessorDetails.showDetails(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Goes to the specified processor.
-         * 
-         * @param {type} row
-         */
-        goToProcessor: function (row) {
-            var grid = $('#processor-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                goTo(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the processor status history for a cluster.
-         * 
-         * @param {type} row
-         */
-        showClusterProcessorStatusHistory: function (row) {
-            var grid = $('#processor-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showClusterProcessorChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the processor status history.
-         * 
-         * @param {type} row
-         */
-        showProcessorStatusHistory: function (row) {
-            var grid = $('#processor-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showStandaloneProcessorChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the cluster processor details dialog for the specified processor.
-         * 
-         * @argument {string} row     The row
-         */
-        showClusterProcessorSummary: function (row) {
-            var grid = $('#processor-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // load the cluster processor summary
-                loadClusterProcessorSummary(item.id);
-
-                // hide the summary loading indicator
-                $('#summary-loading-container').hide();
-
-                // show the dialog
-                $('#cluster-processor-summary-dialog').modal('show');
-            }
-        },
-        
-        // connection actions
-
-        /**
-         * Shows the details for the connection at the specified row.
-         * 
-         * @param {type} row        row index
-         */
-        showConnectionDetails: function (row) {
-            var grid = $('#connection-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.ConnectionDetails.showDetails(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Goes to the specified connection.
-         * 
-         * @param {type} row
-         */
-        goToConnection: function (row) {
-            var grid = $('#connection-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                goTo(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the connection status history for a cluster.
-         * 
-         * @param {type} row
-         */
-        showClusterConnectionStatusHistory: function (row) {
-            var grid = $('#connection-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showClusterConnectionChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the connection status history.
-         * 
-         * @param {type} row
-         */
-        showConnectionStatusHistory: function (row) {
-            var grid = $('#connection-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showStandaloneConnectionChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the cluster connection details dialog for the specified connection.
-         * 
-         * @argument {string} row     The row
-         */
-        showClusterConnectionSummary: function (row) {
-            var grid = $('#connection-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // load the cluster processor summary
-                loadClusterConnectionSummary(item.id);
-
-                // hide the summary loading indicator
-                $('#summary-loading-container').hide();
-
-                // show the dialog
-                $('#cluster-connection-summary-dialog').modal('show');
-            }
-        },
-        
-        // input actions
-
-        /**
-         * Goes to the specified input port.
-         * 
-         * @param {type} row
-         */
-        goToInputPort: function (row) {
-            var grid = $('#input-port-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                goTo(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the cluster input port details dialog for the specified connection.
-         * 
-         * @argument {string} row     The row
-         */
-        showClusterInputPortSummary: function (row) {
-            var grid = $('#input-port-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // load the cluster processor summary
-                loadClusterInputPortSummary(item.id);
-
-                // hide the summary loading indicator
-                $('#summary-loading-container').hide();
-
-                // show the dialog
-                $('#cluster-input-port-summary-dialog').modal('show');
-            }
-        },
-        
-        // output actions
-
-        /**
-         * Goes to the specified output port.
-         * 
-         * @param {type} row
-         */
-        goToOutputPort: function (row) {
-            var grid = $('#output-port-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                goTo(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the cluster output port details dialog for the specified connection.
-         * 
-         * @argument {string} row     The row
-         */
-        showClusterOutputPortSummary: function (row) {
-            var grid = $('#output-port-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // load the cluster processor summary
-                loadClusterOutputPortSummary(item.id);
-
-                // hide the summary loading indicator
-                $('#summary-loading-container').hide();
-
-                // show the dialog
-                $('#cluster-output-port-summary-dialog').modal('show');
-            }
-        },
-        
-        // remote process group actions
-
-        /**
-         * Goes to the specified remote process group.
-         * 
-         * @param {type} row
-         */
-        goToRemoteProcessGroup: function (row) {
-            var grid = $('#remote-process-group-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                goTo(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the remote process group status history for a cluster.
-         * 
-         * @param {type} row
-         */
-        showClusterRemoteProcessGroupStatusHistory: function (row) {
-            var grid = $('#remote-process-group-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showClusterRemoteProcessGroupChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the remote process group status history.
-         * 
-         * @param {type} row
-         */
-        showRemoteProcessGroupStatusHistory: function (row) {
-            var grid = $('#remote-process-group-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-                nf.StatusHistory.showStandaloneRemoteProcessGroupChart(item.groupId, item.id);
-            }
-        },
-        
-        /**
-         * Shows the cluster remote process group details dialog for the specified connection.
-         * 
-         * @argument {string} row     The row
-         */
-        showClusterRemoteProcessGroupSummary: function (row) {
-            var grid = $('#remote-process-group-summary-table').data('gridInstance');
-            if (nf.Common.isDefinedAndNotNull(grid)) {
-                var data = grid.getData();
-                var item = data.getItem(row);
-
-                // load the cluster processor summary
-                loadClusterRemoteProcessGroupSummary(item.id);
-
-                // hide the summary loading indicator
-                $('#summary-loading-container').hide();
-
-                // show the dialog
-                $('#cluster-remote-process-group-summary-dialog').modal('show');
-            }
         }
     };
 }());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/b4d07e26/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
index 7b90a0f..4f80241 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary.js
@@ -69,12 +69,6 @@ nf.Summary = (function () {
         nf.Common.addHoverEffect('#refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
             nf.SummaryTable.loadProcessorSummaryTable();
         });
-        nf.Common.addHoverEffect('#cluster-processor-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
-            nf.SummaryTable.loadClusterProcessorSummary($('#cluster-processor-id').text());
-        });
-        nf.Common.addHoverEffect('#cluster-connection-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
-            nf.SummaryTable.loadClusterConnectionSummary($('#cluster-connection-id').text());
-        });
 
         // return a deferred for page initialization
         return $.Deferred(function (deferred) {


[6/6] incubator-nifi git commit: NIFI-288: - Removing the border radius on the provenance progress bars.

Posted by mc...@apache.org.
NIFI-288:
- Removing the border radius on the provenance progress bars.

Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/ed8f7716
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/ed8f7716
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/ed8f7716

Branch: refs/heads/develop
Commit: ed8f7716061055e4039b1586a4c7ff41f6c3e06a
Parents: 93b78a7
Author: Matt Gilman <ma...@gmail.com>
Authored: Mon Feb 2 14:39:49 2015 -0500
Committer: Matt Gilman <ma...@gmail.com>
Committed: Mon Feb 2 14:39:49 2015 -0500

----------------------------------------------------------------------
 .../nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css     | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/ed8f7716/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css
index 7877f69..751a647 100644
--- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css
+++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/provenance.css
@@ -453,6 +453,11 @@ div.content-detail-value {
 
 #provenance-percent-complete, #lineage-percent-complete {
     width: 378px;
+    border-radius: 0;
+}
+
+#provenance-percent-complete .ui-progressbar-value, #lineage-percent-complete .ui-progressbar-value {
+    border-radius: 0;
 }
 
 div.progress-label {