Repository: nifi
Updated Branches:
  refs/heads/NIFI-108-2 b212e7516 -> 642c46d06


NIFI-108:
- Adding a refresh button to the queue listing table.
- Fixing the flowfile summary sorting in the cluster manager.


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

Branch: refs/heads/NIFI-108-2
Commit: 642c46d062925b9be440adbb5a5008452ee840cd
Parents: b212e75
Author: Matt Gilman <[email protected]>
Authored: Fri Jan 8 09:49:50 2016 -0500
Committer: Matt Gilman <[email protected]>
Committed: Fri Jan 8 09:49:50 2016 -0500

----------------------------------------------------------------------
 .../nifi/web/api/dto/ListingRequestDTO.java     |  3 +-
 .../nifi/controller/FlowFileSummaries.java      | 45 ++++++++++++++++----
 .../WEB-INF/partials/canvas/queue-listing.jsp   |  7 ++-
 .../src/main/webapp/css/queue-listing.css       | 35 +++++++++++----
 .../webapp/js/nf/canvas/nf-queue-listing.js     | 23 +++++++---
 5 files changed, 88 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/642c46d0/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ListingRequestDTO.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ListingRequestDTO.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ListingRequestDTO.java
index 67c8389..e5026d6 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ListingRequestDTO.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ListingRequestDTO.java
@@ -22,6 +22,7 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.nifi.web.api.dto.util.TimeAdapter;
 import org.apache.nifi.web.api.dto.util.TimestampAdapter;
 
 import com.wordnik.swagger.annotations.ApiModelProperty;
@@ -93,7 +94,7 @@ public class ListingRequestDTO {
     /**
      * @return the time this request was last updated
      */
-    @XmlJavaTypeAdapter(TimestampAdapter.class)
+    @XmlJavaTypeAdapter(TimeAdapter.class)
     @ApiModelProperty(
         value = "The last time this listing request was updated."
     )

http://git-wip-us.apache.org/repos/asf/nifi/blob/642c46d0/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowFileSummaries.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowFileSummaries.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowFileSummaries.java
index 7687d8a..7a303e2 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowFileSummaries.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/FlowFileSummaries.java
@@ -60,28 +60,57 @@ public class FlowFileSummaries {
         }
     }
 
+    /**
+     * Creates a comparator for comparing two FlowFileSummaryDTO objects. The 
objects must be fully populated in
+     * @param column
+     * @param direction
+     * @return
+     */
     public static Comparator<FlowFileSummaryDTO> createDTOComparator(final 
SortColumn column, final SortDirection direction) {
         final Comparator<FlowFileSummaryDTO> comparator = new 
Comparator<FlowFileSummaryDTO>() {
             @Override
             public int compare(final FlowFileSummaryDTO o1, final 
FlowFileSummaryDTO o2) {
+                final int val;
                 switch (column) {
                     case FILENAME:
-                        return o1.getFilename().compareTo(o2.getFilename());
+                        val = o1.getFilename().compareTo(o2.getFilename());
+                        break;
                     case FLOWFILE_AGE:
-                        return 
o1.getLineageDuration().compareTo(o2.getLineageDuration());
+                        val = 
o1.getLineageDuration().compareTo(o2.getLineageDuration());
+                        break;
                     case FLOWFILE_SIZE:
-                        return Long.compare(o1.getSize(), o2.getSize());
+                        val = Long.compare(o1.getSize(), o2.getSize());
+                        break;
                     case FLOWFILE_UUID:
-                        return o1.getUuid().compareTo(o2.getUuid());
+                        val = o1.getUuid().compareTo(o2.getUuid());
+                        break;
                     case PENALIZATION:
-                        return Boolean.compare(o1.getPenalized(), 
o2.getPenalized());
+                        val = Boolean.compare(o1.getPenalized(), 
o2.getPenalized());
+                        break;
                     case QUEUE_POSITION:
-                        return Long.compare(o1.getPosition(), 
o2.getPosition());
+                        val = Long.compare(o1.getPosition(), o2.getPosition());
+                        break;
                     case QUEUED_DURATION:
-                        return 
o1.getQueuedDuration().compareTo(o2.getQueuedDuration());
+                        val = 
o1.getQueuedDuration().compareTo(o2.getQueuedDuration());
+                        break;
+                    default:
+                        return 0;
                 }
 
-                return 0;
+                if (val == 0) {
+                    // secondary sort on cluster node id if populated
+                    if (o1.getClusterNodeId() == null && o2.getClusterNodeId() 
== null) {
+                        return val;
+                    } else if (o2.getClusterNodeId() == null) {
+                        return -1;
+                    } else if (o1.getClusterNodeId() == null) {
+                        return 1;
+                    } else {
+                        return 
o1.getClusterNodeId().compareTo(o2.getClusterNodeId());
+                    }
+                } else {
+                    return val;
+                }
             }
         };
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/642c46d0/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/queue-listing.jsp
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/queue-listing.jsp
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/queue-listing.jsp
index 0d8435a..ab34d63 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/queue-listing.jsp
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/WEB-INF/partials/canvas/queue-listing.jsp
@@ -20,10 +20,15 @@
         <div id="queue-listing-header-text"></div>
     </div>
     <div id="queue-listing-stats-container">
+        <div id="queue-listing-refresh-button" class="pointer" 
title="Refresh"></div>
+        <div id="queue-listing-last-refreshed-container">
+            Last updated:&nbsp;<span id="queue-listing-last-refreshed"></span>
+        </div>
+        <div id="queue-listing-loading-container" 
class="loading-container"></div>
         <div id="queue-listing-stats">
             Displaying&nbsp;<span 
id="displayed-flowfiles"></span>&nbsp;of&nbsp;<span 
id="total-flowfiles-count"></span>&nbsp;(<span 
id="total-flowfiles-size"></span>)
         </div>
-        <div id="queue-listing-loading-container" 
class="loading-container"></div>
+        <div class="clear"></div>
     </div>
     <div id="queue-listing-table"></div>
 </div>

http://git-wip-us.apache.org/repos/asf/nifi/blob/642c46d0/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/queue-listing.css
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/queue-listing.css
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/queue-listing.css
index 689ceaf..73d1868 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/queue-listing.css
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/css/queue-listing.css
@@ -41,19 +41,28 @@
 }
 
 #queue-listing-stats-container {
-    margin-left: 15px;
-    margin-top: 30px;
+    margin-left: 20px;
+    margin-top: 18px;
     -webkit-user-select: none;
     -moz-user-select: none;
 }
 
-#queue-listing-stats {
-    font-size: 9px;
+#queue-listing-refresh-button {
+    float: left;
+    height: 24px;
+    width: 26px;
+}
+
+#queue-listing-last-refreshed-container {
+    float: left;
+    color: #666;
+    font-weight: normal;
+    margin-top: 6px;
+    margin-left: 3px;
+}
+
+#queue-listing-last-refreshed {
     font-weight: bold;
-    color: #9f6000;
-    clear: left;
-    line-height: normal;
-    margin-left: 5px;
 }
 
 #queue-listing-loading-container {
@@ -65,6 +74,16 @@
     margin-left: 3px;
 }
 
+#queue-listing-stats {
+    font-size: 9px;
+    font-weight: bold;
+    color: #9f6000;
+    float: right;
+    line-height: normal;
+    margin-right: 20px;
+    margin-top: 9px;
+}
+
 /* queue listing table */
 
 #queue-listing-table {

http://git-wip-us.apache.org/repos/asf/nifi/blob/642c46d0/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 6bb6df8..eeb2dd2 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
@@ -226,6 +226,9 @@ nf.QueueListing = (function () {
                         
$('#total-flowfiles-count').text(nf.Common.formatInteger(listingRequest.queueSize.objectCount));
                         
$('#total-flowfiles-size').text(nf.Common.formatDataSize(listingRequest.queueSize.byteCount));
 
+                        // update the last updated time
+                        
$('#queue-listing-last-refreshed').text(listingRequest.lastUpdated);
+
                         // get the grid to load the data
                         var queueListingGrid = 
$('#queue-listing-table').data('gridInstance');
                         var queueListingData = queueListingGrid.getData();
@@ -420,6 +423,12 @@ nf.QueueListing = (function () {
                 resetTableSize();
             });
 
+            // define mouse over event for the refresh button
+            nf.Common.addHoverEffect('#queue-listing-refresh-button', 
'button-refresh', 'button-refresh-hover').click(function () {
+                var connection = $('#queue-listing-table').data('connection');
+                performListing(connection);
+            });
+
             // define a custom formatter for showing more processor details
             var moreDetailsFormatter = function (row, cell, value, columnDef, 
dataContext) {
                 return '<img src="images/iconDetails.png" title="View Details" 
class="pointer show-flowfile-details" style="margin-top: 5px; float: left;"/>';
@@ -449,13 +458,13 @@ 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: 'QUEUE_POSITION', name: 'Position', field: 'position', 
sortable: false, resizable: false, width: 75, maxWidth: 75},
-                {id: 'FLOWFILE_UUID', name: 'UUID', field: 'uuid', sortable: 
false, resizable: true},
-                {id: 'FILENAME', name: 'Filename', field: 'filename', 
sortable: false, resizable: true},
-                {id: 'FLOWFILE_SIZE', name: 'File Size', field: 'size', 
sortable: false, resizable: true, defaultSortAsc: false, formatter: 
dataSizeFormatter},
-                {id: 'QUEUED_DURATION', name: 'Queued Duration', field: 
'queuedDuration', sortable: false, resizable: true, formatter: 
durationFormatter},
-                {id: 'FLOWFILE_AGE', name: 'Lineage Duration', field: 
'lineageDuration', sortable: false, resizable: true, formatter: 
durationFormatter},
-                {id: 'PENALIZATION', name: 'Penalized', field: 'penalized', 
sortable: false, resizable: false, width: 100, maxWidth: 100, formatter: 
penalizedFormatter}
+                {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}
             ];
 
             // conditionally show the cluster node identifier

Reply via email to