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 2017/05/31 20:29:42 UTC

[1/3] nifi git commit: NIFI-3907 Added response headers.

Repository: nifi
Updated Branches:
  refs/heads/support/nifi-0.7.x 42b312257 -> 58d2ca2e2


NIFI-3907 Added response headers.

Signed-off-by: Andy LoPresto <al...@apache.org>


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

Branch: refs/heads/support/nifi-0.7.x
Commit: a4401258a403809b712388fd33ac63af5ee1f385
Parents: 42b3122
Author: Matt Gilman <ma...@gmail.com>
Authored: Tue May 16 12:08:43 2017 -0700
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed May 31 16:28:47 2017 -0400

----------------------------------------------------------------------
 .../org/apache/nifi/web/server/JettyServer.java | 34 ++++++++++++++++++++
 1 file changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/a4401258/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java
index 3e4c237..ccf8377 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-jetty/src/main/java/org/apache/nifi/web/server/JettyServer.java
@@ -61,7 +61,14 @@ import org.springframework.web.context.WebApplicationContext;
 import org.springframework.web.context.support.WebApplicationContextUtils;
 
 import javax.servlet.DispatcherType;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileFilter;
@@ -504,6 +511,9 @@ public class JettyServer implements NiFiServer {
         // configure the max form size (3x the default)
         webappContext.setMaxFormContentSize(600000);
 
+        // add a filter to set the X-Frame-Options filter
+        webappContext.addFilter(new FilterHolder(FRAME_OPTIONS_FILTER), "/*", EnumSet.allOf(DispatcherType.class));
+
         try {
             // configure the class loader - webappClassLoader -> jetty nar -> web app's nar -> ...
             webappContext.setClassLoader(new WebAppClassLoader(parentClassLoader, webappContext));
@@ -860,4 +870,28 @@ public class JettyServer implements NiFiServer {
             logger.warn("Failed to stop web server", ex);
         }
     }
+
+    private static final Filter FRAME_OPTIONS_FILTER = new Filter() {
+        private static final String FRAME_OPTIONS = "X-Frame-Options";
+        private static final String SAME_ORIGIN = "SAMEORIGIN";
+
+        @Override
+        public void doFilter(final ServletRequest req, final ServletResponse resp, final FilterChain filterChain)
+                throws IOException, ServletException {
+
+            // set frame options accordingly
+            final HttpServletResponse response = (HttpServletResponse) resp;
+            response.addHeader(FRAME_OPTIONS, SAME_ORIGIN);
+
+            filterChain.doFilter(req, resp);
+        }
+
+        @Override
+        public void init(final FilterConfig config) {
+        }
+
+        @Override
+        public void destroy() {
+        }
+    };
 }


[2/3] nifi git commit: NIFI-3906 Added formatting to tables.

Posted by mc...@apache.org.
http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
index 7ab4a76..4961586 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/users/nf-users-table.js
@@ -555,7 +555,7 @@ nf.UsersTable = (function () {
 
             // return the status as appropriate
             if (nf.Common.isDefinedAndNotNull(value)) {
-                return value;
+                return nf.Common.escapeHtml(value);
             } else if (grouped && nf.Common.isDefinedAndNotNull(dataContext.userGroup)) {
                 return '<span class="unset">Multiple users with different status</span>';
             } else {
@@ -591,13 +591,65 @@ nf.UsersTable = (function () {
 
         // initialize the templates table
         var usersColumns = [
-            {id: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreDetailsFormatter, width: 50, maxWidth: 50},
-            {id: 'userName', name: 'User', field: 'userName', sortable: true, resizable: true},
-            {id: 'userGroup', name: 'Group', field: 'userGroup', sortable: true, resizable: true, formatter: valueFormatter},
-            {id: 'authorities', name: 'Roles', field: 'authorities', sortable: true, resizable: true, formatter: roleFormatter},
-            {id: 'lastAccessed', name: 'Last Accessed', field: 'lastAccessed', sortable: true, defaultSortAsc: false, resizable: true, formatter: valueFormatter},
-            {id: 'status', name: 'Status', field: 'status', sortable: true, resizable: false, formatter: statusFormatter},
-            {id: 'actions', name: '&nbsp;', sortable: false, resizable: false, formatter: actionFormatter, width: 100, maxWidth: 100}
+            {
+                id: 'moreDetails',
+                name: '&nbsp;',
+                sortable: false,
+                resizable: false,
+                formatter: moreDetailsFormatter,
+                width: 50,
+                maxWidth: 50
+            },
+            {
+                id: 'userName',
+                name: 'User',
+                field: 'userName',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'userGroup',
+                name: 'Group',
+                field: 'userGroup',
+                sortable: true,
+                resizable: true,
+                formatter: valueFormatter
+            },
+            {
+                id: 'authorities',
+                name: 'Roles',
+                field: 'authorities',
+                sortable: true,
+                resizable: true,
+                formatter: roleFormatter
+            },
+            {
+                id: 'lastAccessed',
+                name: 'Last Accessed',
+                field: 'lastAccessed',
+                sortable: true,
+                defaultSortAsc: false,
+                resizable: true,
+                formatter: valueFormatter
+            },
+            {
+                id: 'status',
+                name: 'Status',
+                field: 'status',
+                sortable: true,
+                resizable: false,
+                formatter: statusFormatter
+            },
+            {
+                id: 'actions',
+                name: '&nbsp;',
+                sortable: false,
+                resizable: false,
+                formatter: actionFormatter,
+                width: 100,
+                maxWidth: 100
+            }
         ];
         var usersOptions = {
             forceFitColumns: true,
@@ -635,7 +687,7 @@ nf.UsersTable = (function () {
                 sortAsc: args.sortAsc
             }, usersData);
         });
-        
+
         // configure a click listener
         usersGrid.onClick.subscribe(function (e, args) {
             var target = $(e.target);
@@ -689,7 +741,7 @@ nf.UsersTable = (function () {
 
     /**
      * Sorts the specified data using the specified sort details.
-     * 
+     *
      * @param {object} sortDetails
      * @param {object} data
      */
@@ -783,7 +835,7 @@ nf.UsersTable = (function () {
 
     /**
      * Performs the filtering.
-     * 
+     *
      * @param {object} item     The item subject to filtering
      * @param {object} args     Filter arguments
      * @returns {Boolean}       Whether or not to include the item
@@ -840,7 +892,7 @@ nf.UsersTable = (function () {
 
     /**
      * Shows details for the specified user.
-     * 
+     *
      * @param {object} user
      */
     var showUserDetails = function (user) {
@@ -878,10 +930,10 @@ nf.UsersTable = (function () {
         // 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) {
@@ -891,10 +943,10 @@ nf.UsersTable = (function () {
         // show the dialog
         $('#group-roles-dialog').modal('show');
     };
-    
+
     /**
      * Disables the specified group's account.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var revokeGroupAccess = function (item) {
@@ -907,7 +959,7 @@ nf.UsersTable = (function () {
 
     /**
      * Ungroups the specified group.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var ungroup = function (item) {
@@ -926,10 +978,10 @@ nf.UsersTable = (function () {
             }
         });
     };
-    
+
     /**
      * Updates the specified users's level of access.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var updateUserAccess = function (item) {
@@ -963,10 +1015,10 @@ nf.UsersTable = (function () {
         // show the dialog
         $('#user-roles-dialog').modal('show');
     };
-    
+
     /**
      * Disables the specified user's account.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var revokeUserAccess = function (item) {
@@ -977,10 +1029,10 @@ nf.UsersTable = (function () {
         // show the dialog
         $('#user-revoke-dialog').modal('show');
     };
-    
+
     /**
      * Prompts to verify group removal.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var ungroupUser = function (item) {
@@ -1002,7 +1054,7 @@ nf.UsersTable = (function () {
 
     /**
      * Delete's the specified user's account.
-     * 
+     *
      * @argument {object} item        The user item
      */
     var deleteUserAccount = function (item) {
@@ -1025,7 +1077,7 @@ nf.UsersTable = (function () {
             initGroupRevokeDialog();
             initUsersTable();
         },
-        
+
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -1035,7 +1087,7 @@ nf.UsersTable = (function () {
                 grid.resizeCanvas();
             }
         },
-        
+
         /**
          * Load the processor status table.
          */


[3/3] nifi git commit: NIFI-3906 Added formatting to tables.

Posted by mc...@apache.org.
NIFI-3906 Added formatting to tables.

Signed-off-by: Andy LoPresto <al...@apache.org>


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

Branch: refs/heads/support/nifi-0.7.x
Commit: 58d2ca2e2c2a54f4709422470f8303e8398c768c
Parents: a440125
Author: Scott Aslan <sc...@gmail.com>
Authored: Tue May 16 14:27:40 2017 -0700
Committer: Matt Gilman <ma...@gmail.com>
Committed: Wed May 31 16:29:22 2017 -0400

----------------------------------------------------------------------
 .../propertytable/jquery.propertytable.js       |  30 +-
 .../webapp/js/nf/canvas/nf-canvas-toolbox.js    |  18 +-
 .../webapp/js/nf/canvas/nf-component-state.js   |  27 +-
 .../webapp/js/nf/canvas/nf-queue-listing.js     |  99 +++++-
 .../src/main/webapp/js/nf/canvas/nf-settings.js | 158 ++++++++-
 .../webapp/js/nf/cluster/nf-cluster-table.js    |  83 ++++-
 .../webapp/js/nf/counters/nf-counters-table.js  |  53 ++-
 .../webapp/js/nf/history/nf-history-table.js    |  55 ++-
 .../src/main/webapp/js/nf/nf-common.js          |  16 +-
 .../js/nf/provenance/nf-provenance-table.js     | 158 ++++++---
 .../webapp/js/nf/summary/nf-summary-table.js    | 333 +++++++++++++++----
 .../js/nf/templates/nf-templates-table.js       |  54 ++-
 .../main/webapp/js/nf/users/nf-users-table.js   | 104 ++++--
 13 files changed, 982 insertions(+), 206 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
index b686eb9..7e8702e 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/jquery/propertytable/jquery.propertytable.js
@@ -1014,8 +1014,25 @@
         };
 
         var propertyColumns = [
-            {id: 'property', field: 'displayName', name: 'Property', sortable: false, resizable: true, rerenderOnResize: true, formatter: nameFormatter},
-            {id: 'value', field: 'value', name: 'Value', sortable: false, resizable: true, cssClass: 'pointer', rerenderOnResize: true, formatter: valueFormatter}
+            {
+                id: 'property',
+                field: 'displayName',
+                name: 'Property',
+                sortable: false,
+                resizable: true,
+                rerenderOnResize: true,
+                formatter: nameFormatter
+            },
+            {
+                id: 'value',
+                field: 'value',
+                name: 'Value',
+                sortable: false,
+                resizable: true,
+                cssClass: 'pointer',
+                rerenderOnResize: true,
+                formatter: valueFormatter
+            }
         ];
 
         // custom formatter for the actions column
@@ -1048,7 +1065,14 @@
 
             return markup;
         };
-        propertyColumns.push({id: "actions", name: "&nbsp;", minWidth: 20, width: 20, formatter: actionFormatter});
+        propertyColumns.push(
+            {
+                id: "actions",
+                name: "&nbsp;",
+                minWidth: 20,
+                width: 20,
+                formatter: actionFormatter
+            });
 
         var propertyConfigurationOptions = {
             forceFitColumns: true,

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
index 8c666ab..3b4aa1a 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-canvas-toolbox.js
@@ -897,8 +897,22 @@ nf.CanvasToolbox = (function () {
 
                 // initialize the processor type table
                 var processorTypesColumns = [
-                    {id: 'type', name: 'Type', field: 'label', sortable: true, resizable: true},
-                    {id: 'tags', name: 'Tags', field: 'tags', sortable: true, resizable: true}
+                    {
+                        id: 'type',
+                        name: 'Type',
+                        field: 'label',
+                        sortable: true,
+                        resizable: true,
+                        formatter: nf.Common.genericValueFormatter
+                    },
+                    {
+                        id: 'tags',
+                        name: 'Tags',
+                        field: 'tags',
+                        sortable: true,
+                        resizable: true,
+                        formatter: nf.Common.genericValueFormatter
+                    }
                 ];
                 var processorTypesOptions = {
                     forceFitColumns: true,

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
index fd2f4f6..c27d2d5 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-component-state.js
@@ -286,13 +286,34 @@ nf.ComponentState = (function () {
 
             // initialize the queue listing table
             var componentStateColumns = [
-                {id: 'key', field: 'key', name: 'Key', sortable: true, resizable: true},
-                {id: 'value', field: 'value', name: 'Value', sortable: true, resizable: true}
+                {
+                    id: 'key',
+                    field: 'key',
+                    name: 'Key',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'value',
+                    field: 'value',
+                    name: 'Value',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                }
             ];
 
             // conditionally show the cluster node identifier
             if (nf.Canvas.isClustered()) {
-                componentStateColumns.push({id: 'scope', field: 'scope', name: 'Scope', sortable: true, resizable: true});
+                componentStateColumns.push({
+                    id: 'scope',
+                    field: 'scope',
+                    name: 'Scope',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                });
             }
 
             var componentStateOptions = {

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-queue-listing.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-queue-listing.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-queue-listing.js
index 76d368e..9194ee2 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-queue-listing.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-queue-listing.js
@@ -550,19 +550,89 @@ nf.QueueListing = (function () {
 
             // initialize the queue listing table
             var queueListingColumns = [
-                {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreDetailsFormatter, width: 50, maxWidth: 50},
-                {id: 'position', name: 'Position', field: 'position', sortable: false, resizable: false, width: 75, maxWidth: 75},
-                {id: 'uuid', name: 'UUID', field: 'uuid', sortable: false, resizable: true},
-                {id: 'filename', name: 'Filename', field: 'filename', sortable: false, resizable: true},
-                {id: 'size', name: 'File Size', field: 'size', sortable: false, resizable: true, defaultSortAsc: false, formatter: dataSizeFormatter},
-                {id: 'queuedDuration', name: 'Queued Duration', field: 'queuedDuration', sortable: false, resizable: true, formatter: durationFormatter},
-                {id: 'lineageDuration', name: 'Lineage Duration', field: 'lineageDuration', sortable: false, resizable: true, formatter: durationFormatter},
-                {id: 'penalized', name: 'Penalized', field: 'penalized', sortable: false, resizable: false, width: 100, maxWidth: 100, formatter: penalizedFormatter}
+                {
+                    id: 'moreDetails',
+                    field: 'moreDetails',
+                    name: '&nbsp;',
+                    sortable: false,
+                    resizable: false,
+                    formatter: moreDetailsFormatter,
+                    width: 50,
+                    maxWidth: 50
+                },
+                {
+                    id: 'position',
+                    name: 'Position',
+                    field: 'position',
+                    sortable: false,
+                    resizable: false,
+                    width: 75,
+                    maxWidth: 75,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'uuid',
+                    name: 'UUID',
+                    field: 'uuid',
+                    sortable: false,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'filename',
+                    name: 'Filename',
+                    field: 'filename',
+                    sortable: false,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'size',
+                    name: 'File Size',
+                    field: 'size',
+                    sortable: false,
+                    resizable: true,
+                    defaultSortAsc: false,
+                    formatter: dataSizeFormatter
+                },
+                {
+                    id: 'queuedDuration',
+                    name: 'Queued Duration',
+                    field: 'queuedDuration',
+                    sortable: false,
+                    resizable: true,
+                    formatter: durationFormatter
+                },
+                {
+                    id: 'lineageDuration',
+                    name: 'Lineage Duration',
+                    field: 'lineageDuration',
+                    sortable: false,
+                    resizable: true,
+                    formatter: durationFormatter
+                },
+                {
+                    id: 'penalized',
+                    name: 'Penalized',
+                    field: 'penalized',
+                    sortable: false,
+                    resizable: false,
+                    width: 100,
+                    maxWidth: 100,
+                    formatter: penalizedFormatter
+                }
             ];
 
             // conditionally show the cluster node identifier
             if (nf.Canvas.isClustered()) {
-                queueListingColumns.push({id: 'clusterNodeAddress', name: 'Node', field: 'clusterNodeAddress', sortable: false, resizable: true});
+                queueListingColumns.push({
+                    id: 'clusterNodeAddress',
+                    name: 'Node',
+                    field: 'clusterNodeAddress',
+                    sortable: false,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                });
             }
 
             // add an actions column when the user can access provenance
@@ -572,7 +642,16 @@ nf.QueueListing = (function () {
                     return '<div title="Provenance" class="pointer provenance-icon view-provenance"></div>';
                 };
 
-                queueListingColumns.push({id: 'actions', name: '&nbsp;', resizable: false, formatter: actionsFormatter, sortable: false, width: 50, maxWidth: 50});
+                queueListingColumns.push(
+                    {
+                        id: 'actions',
+                        name: '&nbsp;',
+                        resizable: false,
+                        formatter: actionsFormatter,
+                        sortable: false,
+                        width: 50,
+                        maxWidth: 50
+                    });
             }
 
             var queueListingOptions = {

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
index 64b1c50..485003c 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/canvas/nf-settings.js
@@ -383,8 +383,22 @@ nf.Settings = (function () {
 
         // initialize the processor type table
         var controllerServiceTypesColumns = [
-            {id: 'type', name: 'Type', field: 'label', sortable: false, resizable: true},
-            {id: 'tags', name: 'Tags', field: 'tags', sortable: false, resizable: true}
+            {
+                id: 'type',
+                name: 'Type',
+                field: 'label',
+                sortable: false,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'tags',
+                name: 'Tags',
+                field: 'tags',
+                sortable: false,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            }
         ];
 
         // initialize the dataview
@@ -553,7 +567,7 @@ nf.Settings = (function () {
      * @returns {String}
      */
     var typeFormatter = function (row, cell, value, columnDef, dataContext) {
-        return nf.Common.substringAfterLast(value, '.');
+        return nf.Common.substringAfterLast(nf.Common.escapeHtml(value), '.');
     };
 
     /**
@@ -706,19 +720,67 @@ nf.Settings = (function () {
 
         // define the column model for the controller services table
         var controllerServicesColumns = [
-            {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', resizable: false, formatter: moreControllerServiceDetails, sortable: true, width: 90, maxWidth: 90, toolTip: 'Sorts based on presence of bulletins'},
-            {id: 'name', field: 'name', name: 'Name', sortable: true, resizable: true},
-            {id: 'type', field: 'type', name: 'Type', formatter: typeFormatter, sortable: true, resizable: true},
-            {id: 'state', field: 'state', name: 'State', formatter: controllerServiceStateFormatter, sortable: true, resizeable: true}
+            {
+                id: 'moreDetails',
+                field: 'moreDetails',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: moreControllerServiceDetails,
+                sortable: true,
+                width: 90,
+                maxWidth: 90,
+                toolTip: 'Sorts based on presence of bulletins'
+            },
+            {
+                id: 'name',
+                field: 'name',
+                name: 'Name',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'type',
+                field: 'type',
+                name: 'Type',
+                formatter: typeFormatter,
+                sortable: true,
+                resizable: true
+            },
+            {
+                id: 'state',
+                field: 'state',
+                name: 'State',
+                formatter: controllerServiceStateFormatter,
+                sortable: true,
+                resizeable: true
+            }
         ];
 
         // only show availability when clustered
         if (nf.Canvas.isClustered()) {
-            controllerServicesColumns.push({id: 'availability', field: 'availability', name: 'Availability', formatter: availabilityFormatter, sortable: true, resizeable: true});
+            controllerServicesColumns.push(
+                {
+                    id: 'availability',
+                    field: 'availability',
+                    name: 'Availability',
+                    formatter: availabilityFormatter,
+                    sortable: true,
+                    resizeable: true
+                });
         }
 
         // action column should always be last
-        controllerServicesColumns.push({id: 'actions', name: '&nbsp;', resizable: false, formatter: controllerServiceActionFormatter, sortable: false, width: 90, maxWidth: 90});
+        controllerServicesColumns.push(
+            {
+                id: 'actions',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: controllerServiceActionFormatter,
+                sortable: false,
+                width: 90,
+                maxWidth: 90
+            });
 
         // initialize the dataview
         var controllerServicesData = new Slick.Data.DataView({
@@ -1116,8 +1178,22 @@ nf.Settings = (function () {
 
         // initialize the processor type table
         var reportingTaskTypesColumns = [
-            {id: 'type', name: 'Type', field: 'label', sortable: false, resizable: true},
-            {id: 'tags', name: 'Tags', field: 'tags', sortable: false, resizable: true}
+            {
+                id: 'type',
+                name: 'Type',
+                field: 'label',
+                sortable: false,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'tags',
+                name: 'Tags',
+                field: 'tags',
+                sortable: false,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            }
         ];
 
         // initialize the dataview
@@ -1361,19 +1437,67 @@ nf.Settings = (function () {
 
         // define the column model for the reporting tasks table
         var reportingTasksColumnModel = [
-            {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', resizable: false, formatter: moreReportingTaskDetails, sortable: true, width: 90, maxWidth: 90, toolTip: 'Sorts based on presence of bulletins'},
-            {id: 'name', field: 'name', name: 'Name', sortable: true, resizable: true},
-            {id: 'type', field: 'type', name: 'Type', sortable: true, resizable: true, formatter: typeFormatter},
-            {id: 'state', field: 'state', name: 'Run Status', sortable: true, resizeable: true, formatter: reportingTaskRunStatusFormatter}
+            {
+                id: 'moreDetails',
+                field: 'moreDetails',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: moreReportingTaskDetails,
+                sortable: true,
+                width: 90,
+                maxWidth: 90,
+                toolTip: 'Sorts based on presence of bulletins'
+            },
+            {
+                id: 'name',
+                field: 'name',
+                name: 'Name',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'type',
+                field: 'type',
+                name: 'Type',
+                sortable: true,
+                resizable: true,
+                formatter: typeFormatter
+            },
+            {
+                id: 'state',
+                field: 'state',
+                name: 'Run Status',
+                sortable: true,
+                resizeable: true,
+                formatter: reportingTaskRunStatusFormatter
+            }
         ];
 
         // only show availability when clustered
         if (nf.Canvas.isClustered()) {
-            reportingTasksColumnModel.push({id: 'availability', field: 'availability', name: 'Availability', formatter: availabilityFormatter, sortable: true, resizeable: true});
+            reportingTasksColumnModel.push(
+                {
+                    id: 'availability',
+                    field: 'availability',
+                    name: 'Availability',
+                    formatter: availabilityFormatter,
+                    sortable: true,
+                    resizeable: true
+                });
         }
 
         // action column should always be last
-        reportingTasksColumnModel.push({id: 'actions', name: '&nbsp;', resizable: false, formatter: reportingTaskActionFormatter, sortable: false, width: 90, maxWidth: 90});
+        reportingTasksColumnModel.push(
+            {
+                id: 'actions',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: reportingTaskActionFormatter,
+                sortable: false,
+                width: 90,
+                maxWidth: 90
+            });
 
         // initialize the dataview
         var reportingTasksData = new Slick.Data.DataView({

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
index 74bd958..0340c01 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
@@ -434,9 +434,9 @@ nf.ClusterTable = (function () {
             // define a custom formatter for the status column
             var statusFormatter = function (row, cell, value, columnDef, dataContext) {
                 if (dataContext.primary === true) {
-                    return value + ', PRIMARY';
+                    return nf.Common.escapeHtml(value) + ', PRIMARY';
                 } else {
-                    return value;
+                    return nf.Common.escapeHtml(value);
                 }
             };
 
@@ -446,13 +446,67 @@ nf.ClusterTable = (function () {
             };
 
             var columnModel = [
-                {id: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreDetailsFormatter, width: 50, maxWidth: 50},
-                {id: 'node', field: 'node', name: 'Node Address', formatter: nodeFormatter, resizable: true, sortable: true},
-                {id: 'activeThreadCount', field: 'activeThreadCount', name: 'Active Thread Count', resizable: true, sortable: true, defaultSortAsc: false},
-                {id: 'queued', field: 'queued', name: '<span class="queued-title">Queue</span>&nbsp;/&nbsp;<span class="queued-size-title">Size</span>', resizable: true, sortable: true, defaultSortAsc: false},
-                {id: 'status', field: 'status', name: 'Status', formatter: statusFormatter, resizable: true, sortable: true},
-                {id: 'uptime', field: 'nodeStartTime', name: 'Uptime', formatter: valueFormatter, resizable: true, sortable: true, defaultSortAsc: false},
-                {id: 'heartbeat', field: 'heartbeat', name: 'Last Heartbeat', formatter: valueFormatter, resizable: true, sortable: true, defaultSortAsc: false}
+                {
+                    id: 'moreDetails',
+                    name: '&nbsp;',
+                    sortable: false,
+                    resizable: false,
+                    formatter: moreDetailsFormatter,
+                    width: 50,
+                    maxWidth: 50
+                },
+                {
+                    id: 'node',
+                    field: 'node',
+                    name: 'Node Address',
+                    formatter: nodeFormatter,
+                    resizable: true,
+                    sortable: true
+                },
+                {
+                    id: 'activeThreadCount',
+                    field: 'activeThreadCount',
+                    name: 'Active Thread Count',
+                    resizable: true,
+                    sortable: true,
+                    defaultSortAsc: false,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'queued',
+                    field: 'queued',
+                    name: '<span class="queued-title">Queue</span>&nbsp;/&nbsp;<span class="queued-size-title">Size</span>',
+                    resizable: true,
+                    sortable: true,
+                    defaultSortAsc: false,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'status',
+                    field: 'status',
+                    name: 'Status',
+                    formatter: statusFormatter,
+                    resizable: true,
+                    sortable: true
+                },
+                {
+                    id: 'uptime',
+                    field: 'nodeStartTime',
+                    name: 'Uptime',
+                    formatter: valueFormatter,
+                    resizable: true,
+                    sortable: true,
+                    defaultSortAsc: false
+                },
+                {
+                    id: 'heartbeat',
+                    field: 'heartbeat',
+                    name: 'Last Heartbeat',
+                    formatter: valueFormatter,
+                    resizable: true,
+                    sortable: true,
+                    defaultSortAsc: false
+                }
             ];
 
             // only allow the admin to modify the cluster
@@ -491,7 +545,16 @@ nf.ClusterTable = (function () {
                     }
                 };
 
-                columnModel.push({id: 'actions', 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 = {

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
index 5688118..6424d79 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/counters/nf-counters-table.js
@@ -34,7 +34,7 @@ nf.CountersTable = (function () {
 
     /**
      * Sorts the specified data using the specified sort details.
-     * 
+     *
      * @param {object} sortDetails
      * @param {object} data
      */
@@ -92,7 +92,7 @@ nf.CountersTable = (function () {
 
     /**
      * Performs the filtering.
-     * 
+     *
      * @param {object} item     The item subject to filtering
      * @param {object} args     Filter arguments
      * @returns {Boolean}       Whether or not to include the item
@@ -113,10 +113,10 @@ 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) {
@@ -173,9 +173,31 @@ nf.CountersTable = (function () {
 
             // initialize the templates table
             var countersColumns = [
-                {id: 'context', name: 'Context', field: 'context', sortable: true, resizable: true},
-                {id: 'name', name: 'Name', field: 'name', sortable: true, resizable: true},
-                {id: 'value', name: 'Value', field: 'value', sortable: true, resizable: true, defaultSortAsc: false}
+                {
+                    id: 'context',
+                    name: 'Context',
+                    field: 'context',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'name',
+                    name: 'Name',
+                    field: 'name',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'value',
+                    name: 'Value',
+                    field: 'value',
+                    sortable: true,
+                    resizable: true,
+                    defaultSortAsc: false,
+                    formatter: nf.Common.genericValueFormatter
+                }
             ];
 
             // only allow dfm's to reset counters
@@ -186,7 +208,16 @@ nf.CountersTable = (function () {
                 };
 
                 // add the action column
-                countersColumns.push({id: 'actions', name: '&nbsp;', sortable: false, resizable: false, formatter: actionFormatter, width: 100, maxWidth: 100});
+                countersColumns.push(
+                    {
+                        id: 'actions',
+                        name: '&nbsp;',
+                        sortable: false,
+                        resizable: false,
+                        formatter: actionFormatter,
+                        width: 100,
+                        maxWidth: 100
+                    });
             }
 
             var countersOptions = {
@@ -225,7 +256,7 @@ nf.CountersTable = (function () {
                     sortAsc: args.sortAsc
                 }, countersData);
             });
-            
+
             // configure a click listener
             countersGrid.onClick.subscribe(function (e, args) {
                 var target = $(e.target);
@@ -260,7 +291,7 @@ nf.CountersTable = (function () {
             // initialize the number of display items
             $('#displayed-counters').text('0');
         },
-        
+
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -270,7 +301,7 @@ nf.CountersTable = (function () {
                 countersGrid.resizeCanvas();
             }
         },
-        
+
         /**
          * Load the processor counters table.
          */

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
index 1938d85..23b37af 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/history/nf-history-table.js
@@ -257,12 +257,55 @@ nf.HistoryTable = (function () {
 
         // initialize the templates table
         var historyColumns = [
-            {id: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreDetailsFormatter, width: 50, maxWidth: 50},
-            {id: 'timestamp', name: 'Date/Time', field: 'timestamp', sortable: true, resizable: true},
-            {id: 'sourceName', name: 'Name', field: 'sourceName', sortable: true, resizable: true},
-            {id: 'sourceType', name: 'Type', field: 'sourceType', sortable: true, resizable: true},
-            {id: 'operation', name: 'Operation', field: 'operation', sortable: true, resizable: true},
-            {id: 'userName', name: 'User', field: 'userName', sortable: true, resizable: true}
+            {
+                id: 'moreDetails',
+                name: '&nbsp;',
+                sortable: false,
+                resizable: false,
+                formatter: moreDetailsFormatter,
+                width: 50,
+                maxWidth: 50
+            },
+            {
+                id: 'timestamp',
+                name: 'Date/Time',
+                field: 'timestamp',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'sourceName',
+                name: 'Name',
+                field: 'sourceName',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'sourceType',
+                name: 'Type',
+                field: 'sourceType',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'operation',
+                name: 'Operation',
+                field: 'operation',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'userName',
+                name: 'User',
+                field: 'userName',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            }
         ];
         var historyOptions = {
             forceFitColumns: true,

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
index 7bf401e..64dda52 100644
--- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
+++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/nf-common.js
@@ -539,6 +539,20 @@ nf.Common = (function () {
         },
 
         /**
+         * Escapes the value.
+         *
+         * @param row
+         * @param cell
+         * @param value
+         * @param columnDef
+         * @param dataContext
+         * @returns {string}
+         */
+        genericValueFormatter: function (row, cell, value, columnDef, dataContext) {
+            return nf.Common.escapeHtml(value);
+        },
+
+        /**
          * Formats the specified property (name and value) accordingly.
          * 
          * @argument {string} name      The name of the property
@@ -883,7 +897,7 @@ nf.Common = (function () {
             while (regex.test(string)) {
                 string = string.replace(regex, '$1' + ',' + '$2');
             }
-            return string;
+            return nf.Common.escapeHtml(string);
         },
 
         /**

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
index a977e08..74d7fe8 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/provenance/nf-provenance-table.js
@@ -73,7 +73,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Downloads the content for the provenance event that is currently loaded in the specified direction.
-     * 
+     *
      * @param {string} direction
      */
     var downloadContent = function (direction) {
@@ -113,7 +113,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Views the content for the provenance event that is currently loaded in the specified direction.
-     * 
+     *
      * @param {string} direction
      */
     var viewContent = function (direction) {
@@ -312,7 +312,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Initializes the search dialog.
-     * 
+     *
      * @param {boolean} isClustered     Whether or not this NiFi clustered
      */
     var initSearchDialog = function (isClustered) {
@@ -447,7 +447,7 @@ nf.ProvenanceTable = (function () {
                     }
                 }]
         });
-        
+
         return $.ajax({
             type: 'GET',
             url: config.urls.searchOptions,
@@ -489,7 +489,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Appends the specified searchable field to the search dialog.
-     * 
+     *
      * @param {type} field      The searchable field
      */
     var appendSearchableField = function (field) {
@@ -530,7 +530,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Initializes the provenance table.
-     * 
+     *
      * @param {boolean} isClustered     Whether or not this instance is clustered
      */
     var initProvenanceTable = function (isClustered) {
@@ -654,25 +654,93 @@ nf.ProvenanceTable = (function () {
             return markup;
         };
 
-        // initialize the provenance table
-        var provenanceColumns = [
-            {id: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreDetailsFormatter, width: 50, maxWidth: 50},
-            {id: 'eventTime', name: 'Date/Time', field: 'eventTime', sortable: true, defaultSortAsc: false, resizable: true},
-            {id: 'eventType', name: 'Type', field: 'eventType', sortable: true, resizable: true},
-            {id: 'flowFileUuid', name: 'FlowFile Uuid', field: 'flowFileUuid', sortable: true, resizable: true},
-            {id: 'fileSize', name: 'Size', field: 'fileSize', sortable: true, defaultSortAsc: false, resizable: true},
-            {id: 'componentName', name: 'Component Name', field: 'componentName', sortable: true, resizable: true, formatter: valueFormatter},
-            {id: 'componentType', name: 'Component Type', field: 'componentType', sortable: true, resizable: true}
-        ];
-
-        // conditionally show the cluster node identifier
-        if (isClustered) {
-            provenanceColumns.push({id: 'clusterNodeAddress', name: 'Node', field: 'clusterNodeAddress', sortable: true, resizable: true});
-        }
+            // initialize the provenance table
+            var provenanceColumns = [
+                {
+                    id: 'moreDetails',
+                    name: '&nbsp;',
+                    sortable: false,
+                    resizable: false,
+                    formatter: moreDetailsFormatter,
+                    width: 50,
+                    maxWidth: 50
+                },
+                {
+                    id: 'eventTime',
+                    name: 'Date/Time',
+                    field: 'eventTime',
+                    sortable: true,
+                    defaultSortAsc: false,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'eventType',
+                    name: 'Type',
+                    field: 'eventType',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'flowFileUuid',
+                    name: 'FlowFile Uuid',
+                    field: 'flowFileUuid',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'fileSize',
+                    name: 'Size',
+                    field: 'fileSize',
+                    sortable: true,
+                    defaultSortAsc: false,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'componentName',
+                    name: 'Component Name',
+                    field: 'componentName',
+                    sortable: true,
+                    resizable: true,
+                    formatter: valueFormatter
+                },
+                {
+                    id: 'componentType',
+                    name: 'Component Type',
+                    field: 'componentType',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                }
+            ];
+
+            // conditionally show the cluster node identifier
+            if (isClustered) {
+                provenanceColumns.push({
+                    id: 'clusterNodeAddress',
+                    name: 'Node',
+                    field: 'clusterNodeAddress',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                });
+            }
 
         // conditionally show the action column
         if (nf.Common.SUPPORTS_SVG || isInShell) {
-            provenanceColumns.push({id: 'actions', 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 = {
@@ -714,7 +782,7 @@ nf.ProvenanceTable = (function () {
                 sortAsc: args.sortAsc
             }, provenanceData);
         });
-        
+
         // configure a click listener
         provenanceGrid.onClick.subscribe(function (e, args) {
             var target = $(e.target);
@@ -793,7 +861,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Performs the provenance filtering.
-     * 
+     *
      * @param {object} item     The item subject to filtering
      * @param {object} args     Filter arguments
      * @returns {Boolean}       Whether or not to include the item
@@ -816,7 +884,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Sorts the data according to the sort details.
-     * 
+     *
      * @param {type} sortDetails
      * @param {type} data
      */
@@ -856,7 +924,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Submits a new provenance query.
-     * 
+     *
      * @argument {object} provenance The provenance query
      * @returns {deferred}
      */
@@ -873,7 +941,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Gets the results from the provenance query for the specified id.
-     * 
+     *
      * @param {object} provenance
      * @returns {deferred}
      */
@@ -894,7 +962,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Cancels the specified provenance query.
-     * 
+     *
      * @param {object} provenance
      * @return {deferred}
      */
@@ -915,7 +983,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Checks the results of the specified provenance.
-     * 
+     *
      * @param {object} provenance
      */
     var loadProvenanceResults = function (provenance) {
@@ -980,7 +1048,7 @@ nf.ProvenanceTable = (function () {
 
     /**
      * Goes to the specified component if possible.
-     * 
+     *
      * @argument {object} item       The event it
      */
     var goTo = function (item) {
@@ -1002,15 +1070,15 @@ nf.ProvenanceTable = (function () {
          * The max delay between requests.
          */
         MAX_DELAY: 4,
-        
+
         /**
          * The server time offset
          */
         serverTimeOffset: null,
-        
+
         /**
          * Initializes the provenance table. Returns a deferred that will indicate when/if the table has initialized successfully.
-         * 
+         *
          * @param {boolean} isClustered     Whether or not this instance is clustered
          */
         init: function (isClustered) {
@@ -1020,7 +1088,7 @@ nf.ProvenanceTable = (function () {
                     deferred.reject();
                     nf.Common.handleAjaxError(xhr, status, error);
                 };
-                
+
                 // load the lineage capabilities
                 loadLineageCapabilities().done(function () {
                     initDetailsDialog();
@@ -1032,7 +1100,7 @@ nf.ProvenanceTable = (function () {
                 }).fail(failure);
             }).promise();
         },
-        
+
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -1042,10 +1110,10 @@ nf.ProvenanceTable = (function () {
                 provenanceGrid.resizeCanvas();
             }
         },
-        
+
         /**
          * Updates the value of the specified progress bar.
-         * 
+         *
          * @param {jQuery}  progressBar
          * @param {integer} value
          * @returns {undefined}
@@ -1061,20 +1129,20 @@ nf.ProvenanceTable = (function () {
             }
             progressBar.progressbar('value', value).append(label);
         },
-        
+
         /**
-         * Loads the provenance table with events according to the specified optional 
+         * Loads the provenance table with events according to the specified optional
          * query. If not query is specified or it is empty, the most recent entries will
          * be returned.
-         * 
+         *
          * @param {object} query
          */
         loadProvenanceTable: function (query) {
             var provenanceProgress = $('#provenance-percent-complete');
 
-            // add support to cancel outstanding requests - when the button is pressed we 
+            // add support to cancel outstanding requests - when the button is pressed we
             // could be in one of two stages, 1) waiting to GET the status or 2)
-            // in the process of GETting the status. Handle both cases by cancelling 
+            // in the process of GETting the status. Handle both cases by cancelling
             // the setTimeout (1) and by setting a flag to indicate that a request has
             // been request so we can ignore the results (2).
 
@@ -1143,7 +1211,7 @@ nf.ProvenanceTable = (function () {
                 }).fail(closeDialog);
             };
 
-            // processes the provenance, if the provenance is not done wait delay 
+            // processes the provenance, if the provenance is not done wait delay
             // before polling again
             var processProvenanceResponse = function (delay) {
                 // if the request was cancelled just ignore the current response
@@ -1196,10 +1264,10 @@ nf.ProvenanceTable = (function () {
                 processProvenanceResponse(1);
             }).fail(closeDialog);
         },
-        
+
         /**
          * Shows the details for the specified action.
-         * 
+         *
          * @param {object} event
          */
         showEventDetails: function (event) {

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
index a48758a..095c4af 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/summary/nf-summary-table.js
@@ -78,7 +78,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Goes to the specified component if possible.
-     * 
+     *
      * @argument {string} groupId       The id of the group
      * @argument {string} componentId   The id of the component
      */
@@ -95,7 +95,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Initializes the summary table.
-     * 
+     *
      * @param {type} isClustered
      */
     var initSummaryTable = function (isClustered) {
@@ -302,12 +302,12 @@ nf.SummaryTable = (function () {
 
         // formatter for io
         var ioFormatter = function (row, cell, value, columnDef, dataContext) {
-            return dataContext.read + ' / ' + dataContext.written;
+            return nf.Common.escapeHtml(dataContext.read) + ' / ' + nf.Common.escapeHtml(dataContext.written);
         };
 
         // formatter for tasks
         var taskTimeFormatter = function (row, cell, value, columnDef, dataContext) {
-            return nf.Common.formatInteger(dataContext.tasks) + ' / ' + dataContext.tasksDuration;
+            return nf.Common.formatInteger(dataContext.tasks) + ' / ' + nf.Common.escapeHtml(dataContext.tasksDuration);
         };
 
         // function for formatting the last accessed time
@@ -319,25 +319,91 @@ nf.SummaryTable = (function () {
         var runStatusFormatter = function (row, cell, value, columnDef, dataContext) {
             var activeThreadCount = '';
             if (nf.Common.isDefinedAndNotNull(dataContext.activeThreadCount) && dataContext.activeThreadCount > 0) {
-                activeThreadCount = '(' + dataContext.activeThreadCount + ')';
+                activeThreadCount = '(' + nf.Common.escapeHtml(dataContext.activeThreadCount) + ')';
             }
             var formattedValue = '<div class="' + nf.Common.escapeHtml(value.toLowerCase()) + '" style="margin-top: 3px;"></div>';
             return formattedValue + '<div class="status-text" style="margin-top: 4px;">' + nf.Common.escapeHtml(value) + '</div><div style="float: left; margin-left: 4px;">' + nf.Common.escapeHtml(activeThreadCount) + '</div>';
         };
 
         // define the input, read, written, and output columns (reused between both tables)
-        var nameColumn = {id: 'name', field: 'name', name: 'Name', sortable: true, resizable: true};
-        var runStatusColumn = {id: 'runStatus', field: 'runStatus', name: 'Run Status', formatter: runStatusFormatter, sortable: true};
-        var inputColumn = {id: 'input', field: 'input', name: '<span class="input-title">In</span>&nbsp;/&nbsp;<span class="input-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / data size in the last 5 min', sortable: true, defaultSortAsc: false, resizable: true};
-        var ioColumn = {id: 'io', field: 'io', name: '<span class="read-title">Read</span>&nbsp;/&nbsp;<span class="written-title">Write</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Data size in the last 5 min', formatter: ioFormatter, sortable: true, defaultSortAsc: false, resizable: true};
-        var outputColumn = {id: 'output', field: 'output', name: '<span class="output-title">Out</span>&nbsp;/&nbsp;<span class="output-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / data size in the last 5 min', sortable: true, defaultSortAsc: false, resizable: true};
-        var tasksTimeColumn = {id: 'tasks', field: 'tasks', name: '<span class="tasks-title">Tasks</span>&nbsp;/&nbsp;<span class="time-title">Time</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / duration in the last 5 min', formatter: taskTimeFormatter, sortable: true, defaultSortAsc: false, resizable: true};
+        var nameColumn = {
+            id: 'name',
+            field: 'name',
+            name: 'Name',
+            sortable: true,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
+        var runStatusColumn = {
+            id: 'runStatus',
+            field: 'runStatus',
+            name: 'Run Status',
+            formatter: runStatusFormatter,
+            sortable: true
+        };
+        var inputColumn = {
+            id: 'input',
+            field: 'input',
+            name: '<span class="input-title">In</span>&nbsp;/&nbsp;<span class="input-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / data size in the last 5 min',
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
+        var ioColumn = {
+            id: 'io',
+            field: 'io',
+            name: '<span class="read-title">Read</span>&nbsp;/&nbsp;<span class="written-title">Write</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Data size in the last 5 min',
+            formatter: ioFormatter,
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true
+        };
+        var outputColumn = {
+            id: 'output',
+            field: 'output',
+            name: '<span class="output-title">Out</span>&nbsp;/&nbsp;<span class="output-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / data size in the last 5 min',
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
+        var tasksTimeColumn = {
+            id: 'tasks',
+            field: 'tasks',
+            name: '<span class="tasks-title">Tasks</span>&nbsp;/&nbsp;<span class="time-title">Time</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / duration in the last 5 min',
+            formatter: taskTimeFormatter,
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true
+        };
 
         // define the column model for the processor summary table
         var processorsColumnModel = [
-            {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', resizable: false, formatter: moreProcessorDetails, sortable: true, width: 50, maxWidth: 50, toolTip: 'Sorts based on presence of bulletins'},
+            {
+                id: 'moreDetails',
+                field: 'moreDetails',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: moreProcessorDetails,
+                sortable: true,
+                width: 50,
+                maxWidth: 50,
+                toolTip: 'Sorts based on presence of bulletins'
+            },
             nameColumn,
-            {id: 'type', field: 'type', name: 'Type', sortable: true, resizable: true},
+            {
+                id: 'type',
+                field: 'type',
+                name: 'Type',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             runStatusColumn,
             inputColumn,
             ioColumn,
@@ -523,7 +589,7 @@ 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());
@@ -531,7 +597,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster processor column model
         var clusterProcessorsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             runStatusColumn,
             inputColumn,
             ioColumn,
@@ -592,14 +665,50 @@ nf.SummaryTable = (function () {
         };
 
         // define the input, read, written, and output columns (reused between both tables)
-        var queueColumn = {id: 'queued', field: 'queued', name: '<span class="queued-title">Queue</span>&nbsp;/&nbsp;<span class="queued-size-title">Size</span>', sortable: true, defaultSortAsc: false, resize: true};
+        var queueColumn = {
+            id: 'queued',
+            field: 'queued',
+            name: '<span class="queued-title">Queue</span>&nbsp;/&nbsp;<span class="queued-size-title">Size</span>',
+            sortable: true,
+            defaultSortAsc: false,
+            resize: true,
+            formatter: nf.Common.genericValueFormatter};
 
         // define the column model for the summary table
         var connectionsColumnModel = [
-            {id: 'moreDetails', name: '&nbsp;', sortable: false, resizable: false, formatter: moreConnectionDetails, width: 50, maxWidth: 50},
-            {id: 'sourceName', field: 'sourceName', name: 'Source Name', sortable: true, resizable: true},
-            {id: 'name', field: 'name', name: 'Name', sortable: true, resizable: true, formatter: valueFormatter},
-            {id: 'destinationName', field: 'destinationName', name: 'Destination Name', sortable: true, resizable: true},
+            {
+                id: 'moreDetails',
+                name: '&nbsp;',
+                sortable: false,
+                resizable: false,
+                formatter: moreConnectionDetails,
+                width: 50,
+                maxWidth: 50
+            },
+            {
+                id: 'sourceName',
+                field: 'sourceName',
+                name: 'Source Name',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
+            {
+                id: 'name',
+                field: 'name',
+                name: 'Name',
+                sortable: true,
+                resizable: true,
+                formatter: valueFormatter
+            },
+            {
+                id: 'destinationName',
+                field: 'destinationName',
+                name: 'Destination Name',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             inputColumn,
             queueColumn,
             outputColumn
@@ -747,7 +856,7 @@ 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());
@@ -755,7 +864,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster processor column model
         var clusterConnectionsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             inputColumn,
             queueColumn,
             outputColumn
@@ -819,16 +935,60 @@ nf.SummaryTable = (function () {
 
             return markup;
         };
-        
-        var moreDetailsColumn = {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', resizable: false, formatter: moreDetails, sortable: true, width: 50, maxWidth: 50, toolTip: 'Sorts based on presence of bulletins'};
-        var transferredColumn = {id: 'transferred', field: 'transferred', name: '<span class="transferred-title">Transferred</span>&nbsp;/&nbsp;<span class="transferred-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / data size transferred to and from connections in the last 5 min', resizable: true, defaultSortAsc: false, sortable: true};
-        var sentColumn = {id: 'sent', field: 'sent', name: '<span class="sent-title">Sent</span>&nbsp;/&nbsp;<span class="sent-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / data size in the last 5 min', sortable: true, defaultSortAsc: false, resizable: true};
-        var receivedColumn = {id: 'received', field: 'received', name: '<span class="received-title">Received</span>&nbsp;/&nbsp;<span class="received-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>', toolTip: 'Count / data size in the last 5 min', sortable: true, defaultSortAsc: false, resizable: true};
+
+        var moreDetailsColumn = {
+            id: 'moreDetails',
+            field: 'moreDetails',
+            name: '&nbsp;',
+            resizable: false,
+            formatter: moreDetails,
+            sortable: true,
+            width: 50,
+            maxWidth: 50,
+            toolTip: 'Sorts based on presence of bulletins'
+        };
+        var transferredColumn = {
+            id: 'transferred',
+            field: 'transferred',
+            name: '<span class="transferred-title">Transferred</span>&nbsp;/&nbsp;<span class="transferred-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / data size transferred to and from connections in the last 5 min',
+            resizable: true,
+            defaultSortAsc: false,
+            sortable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
+        var sentColumn = {
+            id: 'sent',
+            field: 'sent',
+            name: '<span class="sent-title">Sent</span>&nbsp;/&nbsp;<span class="sent-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / data size in the last 5 min',
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
+        var receivedColumn = {
+            id: 'received',
+            field: 'received',
+            name: '<span class="received-title">Received</span>&nbsp;/&nbsp;<span class="received-size-title">Size</span>&nbsp;<span style="font-weight: normal; overflow: hidden;">5 min</span>',
+            toolTip: 'Count / data size in the last 5 min',
+            sortable: true,
+            defaultSortAsc: false,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter
+        };
 
         // define the column model for the summary table
         var processGroupsColumnModel = [
             moreDetailsColumn,
-            {id: 'name', field: 'name', name: 'Name', sortable: true, resizable: true, formatter: valueFormatter},
+            {
+                id: 'name',
+                field: 'name',
+                name: 'Name',
+                sortable: true,
+                resizable: true,
+                formatter: valueFormatter
+            },
             transferredColumn,
             inputColumn,
             ioColumn,
@@ -836,7 +996,7 @@ nf.SummaryTable = (function () {
             sentColumn,
             receivedColumn
         ];
-        
+
         // add an action column if appropriate
         if (isClustered || isInShell || nf.Common.SUPPORTS_SVG) {
             // define how the column is formatted
@@ -1006,7 +1166,7 @@ nf.SummaryTable = (function () {
                 }
             }
         });
-        
+
         // cluster process group refresh
         nf.Common.addHoverEffect('#cluster-process-group-refresh-button', 'button-refresh', 'button-refresh-hover').click(function () {
             loadClusterProcessGroupSummary($('#cluster-process-group-id').text());
@@ -1014,7 +1174,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster process groups column model
         var clusterProcessGroupsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             transferredColumn,
             inputColumn,
             ioColumn,
@@ -1232,7 +1399,7 @@ 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());
@@ -1240,7 +1407,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster input port column model
         var clusterInputPortsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             runStatusColumn,
             outputColumn
         ];
@@ -1454,7 +1628,7 @@ 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());
@@ -1462,7 +1636,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster output port column model
         var clusterOutputPortsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             runStatusColumn,
             inputColumn
         ];
@@ -1518,7 +1699,7 @@ nf.SummaryTable = (function () {
         var transmissionStatusFormatter = function (row, cell, value, columnDef, dataContext) {
             var activeThreadCount = '';
             if (nf.Common.isDefinedAndNotNull(dataContext.activeThreadCount) && dataContext.activeThreadCount > 0) {
-                activeThreadCount = '(' + dataContext.activeThreadCount + ')';
+                activeThreadCount = '(' + nf.Common.escapeHtml(dataContext.activeThreadCount) + ')';
             }
 
             // determine what to put in the mark up
@@ -1539,12 +1720,35 @@ nf.SummaryTable = (function () {
             return formattedValue + '<div class="status-text" style="margin-top: 4px;">' + transmissionLabel + '</div><div style="float: left; margin-left: 4px;">' + nf.Common.escapeHtml(activeThreadCount) + '</div>';
         };
 
-        var transmissionStatusColumn = {id: 'transmissionStatus', field: 'transmissionStatus', name: 'Transmitting', formatter: transmissionStatusFormatter, sortable: true, resizable: true};
-        var targetUriColumn = {id: 'targetUri', field: 'targetUri', name: 'Target URI', sortable: true, resizable: true};
+        var transmissionStatusColumn = {
+            id: 'transmissionStatus',
+            field: 'transmissionStatus',
+            name: 'Transmitting',
+            formatter: transmissionStatusFormatter,
+            sortable: true,
+            resizable: true};
+
+        var targetUriColumn = {
+            id: 'targetUri',
+            field: 'targetUri',
+            name: 'Target URI',
+            sortable: true,
+            resizable: true,
+            formatter: nf.Common.genericValueFormatter};
 
         // define the column model for the summary table
         var remoteProcessGroupsColumnModel = [
-            {id: 'moreDetails', field: 'moreDetails', name: '&nbsp;', resizable: false, formatter: moreDetails, sortable: true, width: 50, maxWidth: 50, toolTip: 'Sorts based on presence of bulletins'},
+            {
+                id: 'moreDetails',
+                field: 'moreDetails',
+                name: '&nbsp;',
+                resizable: false,
+                formatter: moreDetails,
+                sortable: true,
+                width: 50,
+                maxWidth: 50,
+                toolTip: 'Sorts based on presence of bulletins'
+            },
             nameColumn,
             targetUriColumn,
             transmissionStatusColumn,
@@ -1718,7 +1922,7 @@ 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());
@@ -1726,7 +1930,14 @@ nf.SummaryTable = (function () {
 
         // initialize the cluster remote process group column model
         var clusterRemoteProcessGroupsColumnModel = [
-            {id: 'node', field: 'node', name: 'Node', sortable: true, resizable: true},
+            {
+                id: 'node',
+                field: 'node',
+                name: 'Node',
+                sortable: true,
+                resizable: true,
+                formatter: nf.Common.genericValueFormatter
+            },
             targetUriColumn,
             transmissionStatusColumn,
             sentColumn,
@@ -1836,7 +2047,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Sorts the specified data using the specified sort details.
-     * 
+     *
      * @param {string} tableId
      * @param {object} sortDetails
      * @param {object} data
@@ -1962,7 +2173,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Performs the processor filtering.
-     * 
+     *
      * @param {object} item     The item subject to filtering
      * @param {object} args     Filter arguments
      * @returns {Boolean}       Whether or not to include the item
@@ -2065,7 +2276,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Adds a new storage usage process bar to the dialog.
-     * 
+     *
      * @argument {jQuery} container     The container to add the storage usage to.
      * @argument {object} storageUsage     The storage usage.
      */
@@ -2099,7 +2310,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Poplates the processor summary table using the specified process group.
-     * 
+     *
      * @argument {array} processorItems                 The processor data
      * @argument {array} connectionItems                The connection data
      * @argument {array} processGroupItems              The process group data
@@ -2133,7 +2344,7 @@ nf.SummaryTable = (function () {
         $.each(processGroupStatus.remoteProcessGroupStatus, function (i, rpgStatus) {
             remoteProcessGroupItems.push(rpgStatus);
         });
-        
+
         // add the process group status as well
         processGroupItems.push(processGroupStatus);
 
@@ -2169,7 +2380,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads  the cluster processor details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterProcessorSummary = function (rowId) {
@@ -2223,7 +2434,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads the cluster connection details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterConnectionSummary = function (rowId) {
@@ -2274,7 +2485,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads the cluster input port details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterProcessGroupSummary = function (rowId) {
@@ -2331,7 +2542,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads the cluster input port details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterInputPortSummary = function (rowId) {
@@ -2380,7 +2591,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads the cluster output port details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterOutputPortSummary = function (rowId) {
@@ -2429,7 +2640,7 @@ nf.SummaryTable = (function () {
 
     /**
      * Loads the cluster remote process group details dialog for the specified processor.
-     * 
+     *
      * @argument {string} rowId     The row id
      */
     var loadClusterRemoteProcessGroupSummary = function (rowId) {
@@ -2480,20 +2691,20 @@ nf.SummaryTable = (function () {
     };
 
     return {
-        
+
         /**
          * URL for loading system diagnostics.
          */
         systemDiagnosticsUrl: null,
-        
+
         /**
          * URL for loading the summary.
          */
         url: null,
-        
+
         /**
          * Initializes the status table.
-         * 
+         *
          * @argument {boolean} isClustered Whether or not this NiFi is clustered.
          */
         init: function (isClustered) {
@@ -2514,7 +2725,7 @@ nf.SummaryTable = (function () {
                 });
             }).promise();
         },
-        
+
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -2528,7 +2739,7 @@ nf.SummaryTable = (function () {
             if (nf.Common.isDefinedAndNotNull(connectionsGrid)) {
                 connectionsGrid.resizeCanvas();
             }
-            
+
             var processGroupsGrid = $('#process-group-summary-table').data('gridInstance');
             if (nf.Common.isDefinedAndNotNull(processGroupsGrid)) {
                 processGroupsGrid.resizeCanvas();
@@ -2549,7 +2760,7 @@ nf.SummaryTable = (function () {
                 remoteProcessGroupGrid.resizeCanvas();
             }
         },
-        
+
         /**
          * Load the processor status table.
          */
@@ -2576,7 +2787,7 @@ nf.SummaryTable = (function () {
                     // get the connections grid/data (do not render bulletins)
                     var connectionsGrid = $('#connection-summary-table').data('gridInstance');
                     var connectionsData = connectionsGrid.getData();
-                    
+
                     // remove any tooltips from the process group table
                     var processGroupGridElement = $('#process-group-summary-table');
                     nf.Common.cleanUpTooltips(processGroupGridElement, 'img.has-bulletins');
@@ -2628,7 +2839,7 @@ nf.SummaryTable = (function () {
                     connectionsData.setItems(connectionItems);
                     connectionsData.reSort();
                     connectionsGrid.invalidate();
-                    
+
                     // update the process groups
                     processGroupData.setItems(processGroupItems);
                     processGroupData.reSort();

http://git-wip-us.apache.org/repos/asf/nifi/blob/58d2ca2e/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
index 0f9ea8a..958678b 100644
--- a/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-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/templates/nf-templates-table.js
@@ -35,7 +35,7 @@ nf.TemplatesTable = (function () {
 
     /**
      * Sorts the specified data using the specified sort details.
-     * 
+     *
      * @param {object} sortDetails
      * @param {object} data
      */
@@ -59,7 +59,7 @@ nf.TemplatesTable = (function () {
 
     /**
      * Prompts the user before attempting to delete the specified template.
-     * 
+     *
      * @argument {object} template     The template
      */
     var promptToDeleteTemplate = function (template) {
@@ -75,7 +75,7 @@ nf.TemplatesTable = (function () {
 
     /**
      * Deletes the template with the specified id.
-     * 
+     *
      * @argument {string} templateId     The template id
      */
     var deleteTemplate = function (templateId) {
@@ -87,7 +87,7 @@ nf.TemplatesTable = (function () {
             var templatesGrid = $('#templates-table').data('gridInstance');
             var templatesData = templatesGrid.getData();
             templatesData.deleteItem(templateId);
-            
+
             // update the total number of templates
             $('#total-templates').text(templatesData.getItems().length);
         }).fail(nf.Common.handleAjaxError);
@@ -129,7 +129,7 @@ nf.TemplatesTable = (function () {
 
     /**
      * Performs the filtering.
-     * 
+     *
      * @param {object} item     The item subject to filtering
      * @param {object} args     Filter arguments
      * @returns {Boolean}       Whether or not to include the item
@@ -239,10 +239,42 @@ nf.TemplatesTable = (function () {
 
             // initialize the templates table
             var templatesColumns = [
-                {id: 'timestamp', name: 'Date/Time', field: 'timestamp', sortable: true, defaultSortAsc: false, resizable: false, formatter: valueFormatter, width: 225, maxWidth: 225},
-                {id: 'name', name: 'Name', field: 'name', sortable: true, resizable: true},
-                {id: 'description', name: 'Description', field: 'description', sortable: true, resizable: true, formatter: valueFormatter},
-                {id: 'actions', name: '&nbsp;', sortable: false, resizable: false, formatter: actionFormatter, width: 100, maxWidth: 100}
+                {
+                    id: 'timestamp',
+                    name: 'Date/Time',
+                    field: 'timestamp',
+                    sortable: true,
+                    defaultSortAsc: false,
+                    resizable: false,
+                    formatter: valueFormatter,
+                    width: 225,
+                    maxWidth: 225
+                },
+                {
+                    id: 'name',
+                    name: 'Name',
+                    field: 'name',
+                    sortable: true,
+                    resizable: true,
+                    formatter: nf.Common.genericValueFormatter
+                },
+                {
+                    id: 'description',
+                    name: 'Description',
+                    field: 'description',
+                    sortable: true,
+                    resizable: true,
+                    formatter: valueFormatter
+                },
+                {
+                    id: 'actions',
+                    name: '&nbsp;',
+                    sortable: false,
+                    resizable: false,
+                    formatter: actionFormatter,
+                    width: 100,
+                    maxWidth: 100
+                }
             ];
             var templatesOptions = {
                 forceFitColumns: true,
@@ -317,7 +349,7 @@ nf.TemplatesTable = (function () {
             // initialize the number of displayed items
             $('#displayed-templates').text('0');
         },
-        
+
         /**
          * Update the size of the grid based on its container's current size.
          */
@@ -327,7 +359,7 @@ nf.TemplatesTable = (function () {
                 templateGrid.resizeCanvas();
             }
         },
-        
+
         /**
          * Load the processor templates table.
          */