http://git-wip-us.apache.org/repos/asf/nifi/blob/a901bc65/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
index 1b4e920..62c35b2 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
@@ -16,7 +16,29 @@
  */
 package org.apache.nifi.web.api.dto;
 
-import org.apache.commons.lang3.StringUtils;
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.TimeUnit;
+
+import javax.ws.rs.WebApplicationException;
+
 import org.apache.nifi.action.Action;
 import org.apache.nifi.action.component.details.ComponentDetails;
 import org.apache.nifi.action.component.details.ExtensionDetails;
@@ -122,35 +144,17 @@ import 
org.apache.nifi.web.api.dto.provenance.lineage.LineageResultsDTO;
 import org.apache.nifi.web.api.dto.provenance.lineage.ProvenanceLinkDTO;
 import org.apache.nifi.web.api.dto.provenance.lineage.ProvenanceNodeDTO;
 import org.apache.nifi.web.api.dto.status.ConnectionStatusDTO;
+import org.apache.nifi.web.api.dto.status.ConnectionStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.PortStatusDTO;
+import org.apache.nifi.web.api.dto.status.PortStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.ProcessGroupStatusDTO;
+import org.apache.nifi.web.api.dto.status.ProcessGroupStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.ProcessorStatusDTO;
+import org.apache.nifi.web.api.dto.status.ProcessorStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusDTO;
-import org.apache.nifi.web.api.dto.status.StatusDTO;
+import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.StatusMerger;
 
-import javax.ws.rs.WebApplicationException;
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.concurrent.TimeUnit;
-
 public final class DtoFactory {
 
     @SuppressWarnings("rawtypes")
@@ -717,175 +721,108 @@ public final class DtoFactory {
         dto.setTargetUri(remoteProcessGroupStatus.getTargetUri());
         dto.setName(remoteProcessGroupStatus.getName());
         
dto.setTransmissionStatus(remoteProcessGroupStatus.getTransmissionStatus().toString());
-        
dto.setActiveThreadCount(remoteProcessGroupStatus.getActiveThreadCount());
-        dto.setFlowFilesSent(remoteProcessGroupStatus.getSentCount());
-        dto.setBytesSent(remoteProcessGroupStatus.getSentContentSize());
-        dto.setFlowFilesReceived(remoteProcessGroupStatus.getReceivedCount());
-        
dto.setBytesReceived(remoteProcessGroupStatus.getReceivedContentSize());
-        
dto.setAuthorizationIssues(remoteProcessGroupStatus.getAuthorizationIssues());
-
-        StatusMerger.updatePrettyPrintedFields(dto);
+
+        final RemoteProcessGroupStatusSnapshotDTO snapshot = new 
RemoteProcessGroupStatusSnapshotDTO();
+        dto.setAggregateStatus(snapshot);
+
+        
snapshot.setActiveThreadCount(remoteProcessGroupStatus.getActiveThreadCount());
+        snapshot.setFlowFilesSent(remoteProcessGroupStatus.getSentCount());
+        snapshot.setBytesSent(remoteProcessGroupStatus.getSentContentSize());
+        
snapshot.setFlowFilesReceived(remoteProcessGroupStatus.getReceivedCount());
+        
snapshot.setBytesReceived(remoteProcessGroupStatus.getReceivedContentSize());
+        
snapshot.setAuthorizationIssues(remoteProcessGroupStatus.getAuthorizationIssues());
+
+        StatusMerger.updatePrettyPrintedFields(snapshot);
         return dto;
     }
 
     public ProcessGroupStatusDTO createProcessGroupStatusDto(final 
BulletinRepository bulletinRepository, final ProcessGroupStatus 
processGroupStatus) {
-
         final ProcessGroupStatusDTO processGroupStatusDto = new 
ProcessGroupStatusDTO();
         processGroupStatusDto.setId(processGroupStatus.getId());
         processGroupStatusDto.setName(processGroupStatus.getName());
-        processGroupStatusDto.setStatsLastRefreshed(new 
Date(processGroupStatus.getCreationTimestamp()));
-        processGroupStatusDto.setBytesRead(processGroupStatus.getBytesRead());
-        
processGroupStatusDto.setBytesWritten(processGroupStatus.getBytesWritten());
-        
processGroupStatusDto.setFlowFilesIn(processGroupStatus.getInputCount());
-        
processGroupStatusDto.setBytesIn(processGroupStatus.getInputContentSize());
-        
processGroupStatusDto.setFlowFilesOut(processGroupStatus.getOutputCount());
-        
processGroupStatusDto.setBytesOut(processGroupStatus.getOutputContentSize());
-        
processGroupStatusDto.setFlowFilesTransferred(processGroupStatus.getFlowFilesTransferred());
-        
processGroupStatusDto.setBytesTransferred(processGroupStatus.getBytesTransferred());
-        
processGroupStatusDto.setFlowFilesSent(processGroupStatus.getFlowFilesSent());
-        processGroupStatusDto.setBytesSent(processGroupStatus.getBytesSent());
-        
processGroupStatusDto.setFlowFilesReceived(processGroupStatus.getFlowFilesReceived());
-        
processGroupStatusDto.setBytesReceived(processGroupStatus.getBytesReceived());
-        
processGroupStatusDto.setActiveThreadCount(processGroupStatus.getActiveThreadCount());
-        StatusMerger.updatePrettyPrintedFields(processGroupStatusDto);
-
-        final Map<String, StatusDTO> componentStatusDtoMap = new HashMap<>();
+
+        final ProcessGroupStatusSnapshotDTO snapshot = new 
ProcessGroupStatusSnapshotDTO();
+        processGroupStatusDto.setAggregateStatus(snapshot);
+
+        snapshot.setStatsLastRefreshed(new 
Date(processGroupStatus.getCreationTimestamp()));
+        snapshot.setBytesRead(processGroupStatus.getBytesRead());
+        snapshot.setBytesWritten(processGroupStatus.getBytesWritten());
+        snapshot.setFlowFilesIn(processGroupStatus.getInputCount());
+        snapshot.setBytesIn(processGroupStatus.getInputContentSize());
+        snapshot.setFlowFilesOut(processGroupStatus.getOutputCount());
+        snapshot.setBytesOut(processGroupStatus.getOutputContentSize());
+        
snapshot.setFlowFilesTransferred(processGroupStatus.getFlowFilesTransferred());
+        snapshot.setBytesTransferred(processGroupStatus.getBytesTransferred());
+        snapshot.setFlowFilesSent(processGroupStatus.getFlowFilesSent());
+        snapshot.setBytesSent(processGroupStatus.getBytesSent());
+        
snapshot.setFlowFilesReceived(processGroupStatus.getFlowFilesReceived());
+        snapshot.setBytesReceived(processGroupStatus.getBytesReceived());
+        
snapshot.setActiveThreadCount(processGroupStatus.getActiveThreadCount());
+        StatusMerger.updatePrettyPrintedFields(snapshot);
 
         // processor status
-        final Collection<ProcessorStatusDTO> processorStatDtoCollection = new 
ArrayList<>();
-        processGroupStatusDto.setProcessorStatus(processorStatDtoCollection);
+        final Collection<ProcessorStatusSnapshotDTO> 
processorStatDtoCollection = new ArrayList<>();
+        snapshot.setProcessorStatusSnapshots(processorStatDtoCollection);
         final Collection<ProcessorStatus> processorStatusCollection = 
processGroupStatus.getProcessorStatus();
         if (processorStatusCollection != null) {
             for (final ProcessorStatus processorStatus : 
processorStatusCollection) {
                 final ProcessorStatusDTO processorStatusDto = 
createProcessorStatusDto(processorStatus);
-                processorStatDtoCollection.add(processorStatusDto);
-                componentStatusDtoMap.put(processorStatusDto.getId(), 
processorStatusDto);
+                
processorStatDtoCollection.add(processorStatusDto.getAggregateStatus());
             }
         }
 
         // connection status
-        final Collection<ConnectionStatusDTO> connectionStatusDtoCollection = 
new ArrayList<>();
-        
processGroupStatusDto.setConnectionStatus(connectionStatusDtoCollection);
+        final Collection<ConnectionStatusSnapshotDTO> 
connectionStatusDtoCollection = new ArrayList<>();
+        snapshot.setConnectionStatusSnapshots(connectionStatusDtoCollection);
         final Collection<ConnectionStatus> connectionStatusCollection = 
processGroupStatus.getConnectionStatus();
         if (connectionStatusCollection != null) {
             for (final ConnectionStatus connectionStatus : 
connectionStatusCollection) {
                 final ConnectionStatusDTO connectionStatusDto = 
createConnectionStatusDto(connectionStatus);
-                connectionStatusDtoCollection.add(connectionStatusDto);
+                
connectionStatusDtoCollection.add(connectionStatusDto.getAggregateSnapshot());
             }
         }
 
         // local child process groups
-        final Collection<ProcessGroupStatusDTO> 
childProcessGroupStatusDtoCollection = new ArrayList<>();
-        
processGroupStatusDto.setProcessGroupStatus(childProcessGroupStatusDtoCollection);
+        final Collection<ProcessGroupStatusSnapshotDTO> 
childProcessGroupStatusDtoCollection = new ArrayList<>();
+        
snapshot.setProcessGroupStatusSnapshots(childProcessGroupStatusDtoCollection);
         final Collection<ProcessGroupStatus> childProcessGroupStatusCollection 
= processGroupStatus.getProcessGroupStatus();
         if (childProcessGroupStatusCollection != null) {
             for (final ProcessGroupStatus childProcessGroupStatus : 
childProcessGroupStatusCollection) {
                 final ProcessGroupStatusDTO childProcessGroupStatusDto = 
createProcessGroupStatusDto(bulletinRepository, childProcessGroupStatus);
-                
childProcessGroupStatusDtoCollection.add(childProcessGroupStatusDto);
+                
childProcessGroupStatusDtoCollection.add(childProcessGroupStatusDto.getAggregateStatus());
             }
         }
 
         // remote child process groups
-        final Collection<RemoteProcessGroupStatusDTO> 
childRemoteProcessGroupStatusDtoCollection = new ArrayList<>();
-        
processGroupStatusDto.setRemoteProcessGroupStatus(childRemoteProcessGroupStatusDtoCollection);
+        final Collection<RemoteProcessGroupStatusSnapshotDTO> 
childRemoteProcessGroupStatusDtoCollection = new ArrayList<>();
+        
snapshot.setRemoteProcessGroupStatusSnapshots(childRemoteProcessGroupStatusDtoCollection);
         final Collection<RemoteProcessGroupStatus> 
childRemoteProcessGroupStatusCollection = 
processGroupStatus.getRemoteProcessGroupStatus();
         if (childRemoteProcessGroupStatusCollection != null) {
             for (final RemoteProcessGroupStatus childRemoteProcessGroupStatus 
: childRemoteProcessGroupStatusCollection) {
                 final RemoteProcessGroupStatusDTO 
childRemoteProcessGroupStatusDto = 
createRemoteProcessGroupStatusDto(childRemoteProcessGroupStatus);
-                
childRemoteProcessGroupStatusDtoCollection.add(childRemoteProcessGroupStatusDto);
-                
componentStatusDtoMap.put(childRemoteProcessGroupStatusDto.getId(), 
childRemoteProcessGroupStatusDto);
+                
childRemoteProcessGroupStatusDtoCollection.add(childRemoteProcessGroupStatusDto.getAggregateStatus());
             }
         }
 
         // input ports
-        final Collection<PortStatusDTO> inputPortStatusDtoCollection = new 
ArrayList<>();
-        processGroupStatusDto.setInputPortStatus(inputPortStatusDtoCollection);
+        final Collection<PortStatusSnapshotDTO> inputPortStatusDtoCollection = 
new ArrayList<>();
+        snapshot.setInputPortStatusSnapshots(inputPortStatusDtoCollection);
         final Collection<PortStatus> inputPortStatusCollection = 
processGroupStatus.getInputPortStatus();
         if (inputPortStatusCollection != null) {
             for (final PortStatus portStatus : inputPortStatusCollection) {
                 final PortStatusDTO portStatusDto = 
createPortStatusDto(portStatus);
-                inputPortStatusDtoCollection.add(portStatusDto);
-                componentStatusDtoMap.put(portStatusDto.getId(), 
portStatusDto);
+                
inputPortStatusDtoCollection.add(portStatusDto.getAggregateStatus());
             }
         }
 
         // output ports
-        final Collection<PortStatusDTO> outputPortStatusDtoCollection = new 
ArrayList<>();
-        
processGroupStatusDto.setOutputPortStatus(outputPortStatusDtoCollection);
+        final Collection<PortStatusSnapshotDTO> outputPortStatusDtoCollection 
= new ArrayList<>();
+        snapshot.setOutputPortStatusSnapshots(outputPortStatusDtoCollection);
         final Collection<PortStatus> outputPortStatusCollection = 
processGroupStatus.getOutputPortStatus();
         if (outputPortStatusCollection != null) {
             for (final PortStatus portStatus : outputPortStatusCollection) {
                 final PortStatusDTO portStatusDto = 
createPortStatusDto(portStatus);
-                outputPortStatusDtoCollection.add(portStatusDto);
-                componentStatusDtoMap.put(portStatusDto.getId(), 
portStatusDto);
-            }
-        }
-
-        // get the bulletins for this group and associate with the specific 
child component
-        if (bulletinRepository != null) {
-            if (processGroupStatusDto.getBulletins() == null) {
-                processGroupStatusDto.setBulletins(new 
ArrayList<BulletinDTO>());
-            }
-
-            // locate bulletins for this process group
-            final List<Bulletin> results = 
bulletinRepository.findBulletinsForGroupBySource(processGroupStatus.getId(), 
MAX_BULLETINS_PER_COMPONENT);
-            for (final Bulletin bulletin : results) {
-                final StatusDTO status = 
componentStatusDtoMap.get(bulletin.getSourceId());
-
-                // ensure this connectable is still in the flow
-                if (status != null) {
-                    if (status.getBulletins() == null) {
-                        status.setBulletins(new ArrayList<BulletinDTO>());
-                    }
-
-                    // convert the result into a dto
-                    final BulletinDTO bulletinDto = 
createBulletinDto(bulletin);
-                    status.getBulletins().add(bulletinDto);
-
-                    // create a copy for the parent group
-                    final BulletinDTO copy = copy(bulletinDto);
-                    copy.setGroupId(StringUtils.EMPTY);
-                    copy.setSourceId(processGroupStatus.getId());
-                    copy.setSourceName(processGroupStatus.getName());
-                    processGroupStatusDto.getBulletins().add(copy);
-                }
-            }
-
-            // copy over descendant bulletins
-            for (final ProcessGroupStatusDTO childProcessGroupStatusDto : 
processGroupStatusDto.getProcessGroupStatus()) {
-                if (childProcessGroupStatusDto.getBulletins() != null) {
-                    for (final BulletinDTO descendantBulletinDto : 
childProcessGroupStatusDto.getBulletins()) {
-                        // create a copy for the parent group
-                        final BulletinDTO copy = copy(descendantBulletinDto);
-                        copy.setGroupId(StringUtils.EMPTY);
-                        copy.setSourceId(processGroupStatus.getId());
-                        copy.setSourceName(processGroupStatus.getName());
-                        processGroupStatusDto.getBulletins().add(copy);
-                    }
-                }
-            }
-
-            // sort the bulletins
-            Collections.sort(processGroupStatusDto.getBulletins(), new 
Comparator<BulletinDTO>() {
-                @Override
-                public int compare(BulletinDTO o1, BulletinDTO o2) {
-                    if (o1 == null && o2 == null) {
-                        return 0;
-                    }
-                    if (o1 == null) {
-                        return 1;
-                    }
-                    if (o2 == null) {
-                        return -1;
-                    }
-
-                    return -Long.compare(o1.getId(), o2.getId());
-                }
-            });
-
-            // prune the response to only include the max number of bulletins
-            if (processGroupStatusDto.getBulletins().size() > 
MAX_BULLETINS_PER_COMPONENT) {
-                
processGroupStatusDto.setBulletins(processGroupStatusDto.getBulletins().subList(0,
 MAX_BULLETINS_PER_COMPONENT));
+                
outputPortStatusDtoCollection.add(portStatusDto.getAggregateStatus());
             }
         }
 
@@ -902,15 +839,18 @@ public final class DtoFactory {
         
connectionStatusDto.setDestinationId(connectionStatus.getDestinationId());
         
connectionStatusDto.setDestinationName(connectionStatus.getDestinationName());
 
-        
connectionStatusDto.setFlowFilesQueued(connectionStatus.getQueuedCount());
-        connectionStatusDto.setBytesQueued(connectionStatus.getQueuedBytes());
+        final ConnectionStatusSnapshotDTO snapshot = new 
ConnectionStatusSnapshotDTO();
+        connectionStatusDto.setAggregateSnapshot(snapshot);
+
+        snapshot.setFlowFilesQueued(connectionStatus.getQueuedCount());
+        snapshot.setBytesQueued(connectionStatus.getQueuedBytes());
 
-        connectionStatusDto.setFlowFilesIn(connectionStatus.getInputCount());
-        connectionStatusDto.setBytesIn(connectionStatus.getInputBytes());
+        snapshot.setFlowFilesIn(connectionStatus.getInputCount());
+        snapshot.setBytesIn(connectionStatus.getInputBytes());
 
-        connectionStatusDto.setFlowFilesOut(connectionStatus.getOutputCount());
-        connectionStatusDto.setBytesOut(connectionStatus.getOutputBytes());
-        StatusMerger.updatePrettyPrintedFields(connectionStatusDto);
+        snapshot.setFlowFilesOut(connectionStatus.getOutputCount());
+        snapshot.setBytesOut(connectionStatus.getOutputBytes());
+        StatusMerger.updatePrettyPrintedFields(snapshot);
 
         return connectionStatusDto;
     }
@@ -919,27 +859,30 @@ public final class DtoFactory {
         final ProcessorStatusDTO dto = new ProcessorStatusDTO();
         dto.setId(procStatus.getId());
         dto.setGroupId(procStatus.getGroupId());
-        dto.setName(procStatus.getName());
+        dto.setProcessorName(procStatus.getName());
 
-        dto.setFlowFilesOut(procStatus.getOutputCount());
-        dto.setBytesOut(procStatus.getOutputBytes());
+        final ProcessorStatusSnapshotDTO snapshot = new 
ProcessorStatusSnapshotDTO();
+        dto.setAggregateStatus(snapshot);
 
-        dto.setFlowFilesIn(procStatus.getInputCount());
-        dto.setBytesIn(procStatus.getInputBytes());
+        snapshot.setFlowFilesOut(procStatus.getOutputCount());
+        snapshot.setBytesOut(procStatus.getOutputBytes());
 
-        dto.setBytesRead(procStatus.getBytesRead());
-        dto.setBytesWritten(procStatus.getBytesWritten());
+        snapshot.setFlowFilesIn(procStatus.getInputCount());
+        snapshot.setBytesIn(procStatus.getInputBytes());
 
-        dto.setTaskCount(procStatus.getInvocations());
-        dto.setTaskDuration(procStatus.getProcessingNanos());
+        snapshot.setBytesRead(procStatus.getBytesRead());
+        snapshot.setBytesWritten(procStatus.getBytesWritten());
+
+        snapshot.setTaskCount(procStatus.getInvocations());
+        snapshot.setTaskDuration(procStatus.getProcessingNanos());
 
         // determine the run status
-        dto.setRunStatus(procStatus.getRunStatus().toString());
+        snapshot.setRunStatus(procStatus.getRunStatus().toString());
 
-        dto.setActiveThreadCount(procStatus.getActiveThreadCount());
-        dto.setType(procStatus.getType());
+        snapshot.setActiveThreadCount(procStatus.getActiveThreadCount());
+        snapshot.setType(procStatus.getType());
 
-        StatusMerger.updatePrettyPrintedFields(dto);
+        StatusMerger.updatePrettyPrintedFields(snapshot);
         return dto;
     }
 
@@ -954,16 +897,19 @@ public final class DtoFactory {
         dto.setId(portStatus.getId());
         dto.setGroupId(portStatus.getGroupId());
         dto.setName(portStatus.getName());
-        dto.setActiveThreadCount(portStatus.getActiveThreadCount());
         dto.setRunStatus(portStatus.getRunStatus().toString());
         dto.setTransmitting(portStatus.isTransmitting());
 
-        dto.setFlowFilesOut(portStatus.getOutputCount());
-        dto.setBytesOut(portStatus.getOutputBytes());
+        final PortStatusSnapshotDTO snapshot = new PortStatusSnapshotDTO();
+        dto.setAggregateStatus(snapshot);
+
+        snapshot.setActiveThreadCount(portStatus.getActiveThreadCount());
+        snapshot.setFlowFilesOut(portStatus.getOutputCount());
+        snapshot.setBytesOut(portStatus.getOutputBytes());
 
-        dto.setFlowFilesIn(portStatus.getInputCount());
-        dto.setBytesIn(portStatus.getInputBytes());
-        StatusMerger.updatePrettyPrintedFields(dto);
+        snapshot.setFlowFilesIn(portStatus.getInputCount());
+        snapshot.setBytesIn(portStatus.getInputBytes());
+        StatusMerger.updatePrettyPrintedFields(snapshot);
 
         return dto;
     }

Reply via email to