Repository: nifi
Updated Branches:
  refs/heads/master a9675552d -> 6799bd491


http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
index 08a56e2..ee5487f 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
@@ -63,15 +63,10 @@ import 
org.apache.nifi.web.api.dto.provenance.ProvenanceEventDTO;
 import org.apache.nifi.web.api.dto.provenance.ProvenanceOptionsDTO;
 import org.apache.nifi.web.api.dto.provenance.lineage.LineageDTO;
 import org.apache.nifi.web.api.dto.search.SearchResultsDTO;
-import org.apache.nifi.web.api.dto.status.ConnectionStatusDTO;
 import org.apache.nifi.web.api.dto.status.ControllerStatusDTO;
-import org.apache.nifi.web.api.dto.status.PortStatusDTO;
-import org.apache.nifi.web.api.dto.status.ProcessGroupStatusDTO;
-import org.apache.nifi.web.api.dto.status.ProcessorStatusDTO;
-import org.apache.nifi.web.api.dto.status.RemoteProcessGroupStatusDTO;
-import org.apache.nifi.web.api.dto.status.StatusHistoryDTO;
 import org.apache.nifi.web.api.entity.AccessPolicyEntity;
 import org.apache.nifi.web.api.entity.ConnectionEntity;
+import org.apache.nifi.web.api.entity.ConnectionStatusEntity;
 import org.apache.nifi.web.api.entity.ControllerBulletinsEntity;
 import org.apache.nifi.web.api.entity.ControllerConfigurationEntity;
 import org.apache.nifi.web.api.entity.ControllerServiceEntity;
@@ -82,14 +77,19 @@ import org.apache.nifi.web.api.entity.FlowEntity;
 import org.apache.nifi.web.api.entity.FunnelEntity;
 import org.apache.nifi.web.api.entity.LabelEntity;
 import org.apache.nifi.web.api.entity.PortEntity;
+import org.apache.nifi.web.api.entity.PortStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessorEntity;
+import org.apache.nifi.web.api.entity.ProcessorStatusEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupPortEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupStatusEntity;
 import org.apache.nifi.web.api.entity.ReportingTaskEntity;
 import org.apache.nifi.web.api.entity.ScheduleComponentsEntity;
 import org.apache.nifi.web.api.entity.SnippetEntity;
+import org.apache.nifi.web.api.entity.StatusHistoryEntity;
 import org.apache.nifi.web.api.entity.TemplateEntity;
 import org.apache.nifi.web.api.entity.UserEntity;
 import org.apache.nifi.web.api.entity.UserGroupEntity;
@@ -290,7 +290,7 @@ public interface NiFiServiceFacade {
      * @param groupId group
      * @return The process group status
      */
-    ProcessGroupStatusDTO getProcessGroupStatus(String groupId);
+    ProcessGroupStatusEntity getProcessGroupStatus(String groupId, boolean 
recursive);
 
     /**
      * Gets the process group status history.
@@ -298,7 +298,7 @@ public interface NiFiServiceFacade {
      * @param groupId id
      * @return history
      */
-    StatusHistoryDTO getProcessGroupStatusHistory(String groupId);
+    StatusHistoryEntity getProcessGroupStatusHistory(String groupId);
 
     /**
      * Returns the controller status.
@@ -455,7 +455,7 @@ public interface NiFiServiceFacade {
      * @param id id
      * @return status
      */
-    ProcessorStatusDTO getProcessorStatus(String id);
+    ProcessorStatusEntity getProcessorStatus(String id);
 
     /**
      * Gets the processor status history.
@@ -463,7 +463,7 @@ public interface NiFiServiceFacade {
      * @param id id
      * @return history
      */
-    StatusHistoryDTO getProcessorStatusHistory(String id);
+    StatusHistoryEntity getProcessorStatusHistory(String id);
 
     /**
      * Get the descriptor for the specified property of the specified 
processor.
@@ -540,7 +540,7 @@ public interface NiFiServiceFacade {
      * @param connectionId connection
      * @return status
      */
-    ConnectionStatusDTO getConnectionStatus(String connectionId);
+    ConnectionStatusEntity getConnectionStatus(String connectionId);
 
     /**
      * Gets the status history of the specified connection.
@@ -548,7 +548,7 @@ public interface NiFiServiceFacade {
      * @param connectionId connection
      * @return history
      */
-    StatusHistoryDTO getConnectionStatusHistory(String connectionId);
+    StatusHistoryEntity getConnectionStatusHistory(String connectionId);
 
     /**
      * Creates a new Relationship target.
@@ -708,7 +708,7 @@ public interface NiFiServiceFacade {
      * @param inputPortId input port
      * @return status
      */
-    PortStatusDTO getInputPortStatus(String inputPortId);
+    PortStatusEntity getInputPortStatus(String inputPortId);
 
     /**
      * Determines if the input port could be updated.
@@ -777,7 +777,7 @@ public interface NiFiServiceFacade {
      * @param outputPortId output port
      * @return status
      */
-    PortStatusDTO getOutputPortStatus(String outputPortId);
+    PortStatusEntity getOutputPortStatus(String outputPortId);
 
     /**
      * Determines if the output port could be updated.
@@ -937,7 +937,7 @@ public interface NiFiServiceFacade {
      * @param id remote process group
      * @return status
      */
-    RemoteProcessGroupStatusDTO getRemoteProcessGroupStatus(String id);
+    RemoteProcessGroupStatusEntity getRemoteProcessGroupStatus(String id);
 
     /**
      * Gets the remote process group status history.
@@ -945,7 +945,7 @@ public interface NiFiServiceFacade {
      * @param id The id of the remote process group
      * @return history
      */
-    StatusHistoryDTO getRemoteProcessGroupStatusHistory(String id);
+    StatusHistoryEntity getRemoteProcessGroupStatusHistory(String id);
 
     /**
      * Verifies the specified remote process group can be updated.

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
index 56d6595..f5cb078 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
@@ -1,4 +1,5 @@
 /*
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.
@@ -139,14 +140,17 @@ import 
org.apache.nifi.web.api.dto.provenance.lineage.LineageDTO;
 import org.apache.nifi.web.api.dto.search.SearchResultsDTO;
 import org.apache.nifi.web.api.dto.status.ConnectionStatusDTO;
 import org.apache.nifi.web.api.dto.status.ControllerStatusDTO;
+import org.apache.nifi.web.api.dto.status.NodeProcessGroupStatusSnapshotDTO;
 import org.apache.nifi.web.api.dto.status.PortStatusDTO;
 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.RemoteProcessGroupStatusDTO;
 import org.apache.nifi.web.api.dto.status.StatusHistoryDTO;
 import org.apache.nifi.web.api.entity.AccessPolicyEntity;
 import org.apache.nifi.web.api.entity.AccessPolicySummaryEntity;
 import org.apache.nifi.web.api.entity.ConnectionEntity;
+import org.apache.nifi.web.api.entity.ConnectionStatusEntity;
 import org.apache.nifi.web.api.entity.ControllerBulletinsEntity;
 import org.apache.nifi.web.api.entity.ControllerConfigurationEntity;
 import org.apache.nifi.web.api.entity.ControllerServiceEntity;
@@ -158,14 +162,19 @@ import org.apache.nifi.web.api.entity.FlowEntity;
 import org.apache.nifi.web.api.entity.FunnelEntity;
 import org.apache.nifi.web.api.entity.LabelEntity;
 import org.apache.nifi.web.api.entity.PortEntity;
+import org.apache.nifi.web.api.entity.PortStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
 import org.apache.nifi.web.api.entity.ProcessorEntity;
+import org.apache.nifi.web.api.entity.ProcessorStatusEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupPortEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupStatusEntity;
 import org.apache.nifi.web.api.entity.ReportingTaskEntity;
 import org.apache.nifi.web.api.entity.ScheduleComponentsEntity;
 import org.apache.nifi.web.api.entity.SnippetEntity;
+import org.apache.nifi.web.api.entity.StatusHistoryEntity;
 import org.apache.nifi.web.api.entity.TemplateEntity;
 import org.apache.nifi.web.api.entity.TenantEntity;
 import org.apache.nifi.web.api.entity.UserEntity;
@@ -850,6 +859,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     @Override
     public ConnectionEntity deleteConnection(final Revision revision, final 
String connectionId) {
         final Connection connection = 
connectionDAO.getConnection(connectionId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(connection);
         final ConnectionDTO snapshot = deleteComponent(
                 revision,
                 connection.getResource(),
@@ -857,7 +867,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 false, // no policies to remove
                 dtoFactory.createConnectionDto(connection));
 
-        return entityFactory.createConnectionEntity(snapshot, null, null, 
null);
+        return entityFactory.createConnectionEntity(snapshot, null, 
permissions, null);
     }
 
     @Override
@@ -884,6 +894,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     @Override
     public ProcessorEntity deleteProcessor(final Revision revision, final 
String processorId) {
         final ProcessorNode processor = processorDAO.getProcessor(processorId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processor);
         final ProcessorDTO snapshot = deleteComponent(
                 revision,
                 processor.getResource(),
@@ -891,12 +902,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createProcessorDto(processor));
 
-        return entityFactory.createProcessorEntity(snapshot, null, null, null, 
null);
+        return entityFactory.createProcessorEntity(snapshot, null, 
permissions, null, null);
     }
 
     @Override
     public LabelEntity deleteLabel(final Revision revision, final String 
labelId) {
         final Label label = labelDAO.getLabel(labelId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(label);
         final LabelDTO snapshot = deleteComponent(
                 revision,
                 label.getResource(),
@@ -904,12 +916,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createLabelDto(label));
 
-        return entityFactory.createLabelEntity(snapshot, null, null);
+        return entityFactory.createLabelEntity(snapshot, null, permissions);
     }
 
     @Override
     public UserEntity deleteUser(final Revision revision, final String userId) 
{
         final User user = userDAO.getUser(userId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(authorizableLookup.getTenant());
         final Set<TenantEntity> userGroups = user != null ? 
userGroupDAO.getUserGroupsForUser(userId).stream()
                 .map(g -> 
g.getIdentifier()).map(mapUserGroupIdToTenantEntity()).collect(Collectors.toSet())
 : null;
         final Set<AccessPolicySummaryEntity> policyEntities = user != null ? 
userGroupDAO.getAccessPoliciesForUser(userId).stream()
@@ -933,12 +946,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 false, // no user specific policies to remove
                 dtoFactory.createUserDto(user, userGroups, policyEntities));
 
-        return entityFactory.createUserEntity(snapshot, null, null);
+        return entityFactory.createUserEntity(snapshot, null, permissions);
     }
 
     @Override
     public UserGroupEntity deleteUserGroup(final Revision revision, final 
String userGroupId) {
         final Group userGroup = userGroupDAO.getUserGroup(userGroupId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(authorizableLookup.getTenant());
         final Set<TenantEntity> users = userGroup != null ? 
userGroup.getUsers().stream()
                 .map(mapUserIdToTenantEntity()).collect(Collectors.toSet()) :
                 null;
@@ -961,12 +975,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 false, // no user group specific policies to remove
                 dtoFactory.createUserGroupDto(userGroup, users));
 
-        return entityFactory.createUserGroupEntity(snapshot, null, null);
+        return entityFactory.createUserGroupEntity(snapshot, null, 
permissions);
     }
 
     @Override
     public AccessPolicyEntity deleteAccessPolicy(final Revision revision, 
final String accessPolicyId) {
         final AccessPolicy accessPolicy = 
accessPolicyDAO.getAccessPolicy(accessPolicyId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(authorizableLookup.getAccessPolicyById(accessPolicyId));
         final Set<TenantEntity> userGroups = accessPolicy != null ? 
accessPolicy.getGroups().stream().map(mapUserGroupIdToTenantEntity()).collect(Collectors.toSet())
 : null;
         final Set<TenantEntity> users = accessPolicy != null ? 
accessPolicy.getUsers().stream().map(mapUserIdToTenantEntity()).collect(Collectors.toSet())
 : null;
         final AccessPolicyDTO snapshot = deleteComponent(
@@ -987,12 +1002,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 dtoFactory.createAccessPolicyDto(accessPolicy, userGroups,
                         users));
 
-        return entityFactory.createAccessPolicyEntity(snapshot, null, null);
+        return entityFactory.createAccessPolicyEntity(snapshot, null, 
permissions);
     }
 
     @Override
     public FunnelEntity deleteFunnel(final Revision revision, final String 
funnelId) {
         final Funnel funnel = funnelDAO.getFunnel(funnelId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(funnel);
         final FunnelDTO snapshot = deleteComponent(
                 revision,
                 funnel.getResource(),
@@ -1000,7 +1016,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createFunnelDto(funnel));
 
-        return entityFactory.createFunnelEntity(snapshot, null, null);
+        return entityFactory.createFunnelEntity(snapshot, null, permissions);
     }
 
     /**
@@ -1131,6 +1147,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     @Override
     public PortEntity deleteInputPort(final Revision revision, final String 
inputPortId) {
         final Port port = inputPortDAO.getPort(inputPortId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(port);
         final PortDTO snapshot = deleteComponent(
                 revision,
                 port.getResource(),
@@ -1138,12 +1155,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createPortDto(port));
 
-        return entityFactory.createPortEntity(snapshot, null, null, null, 
null);
+        return entityFactory.createPortEntity(snapshot, null, permissions, 
null, null);
     }
 
     @Override
     public PortEntity deleteOutputPort(final Revision revision, final String 
outputPortId) {
         final Port port = outputPortDAO.getPort(outputPortId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(port);
         final PortDTO snapshot = deleteComponent(
                 revision,
                 port.getResource(),
@@ -1151,12 +1169,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createPortDto(port));
 
-        return entityFactory.createPortEntity(snapshot, null, null, null, 
null);
+        return entityFactory.createPortEntity(snapshot, null, permissions, 
null, null);
     }
 
     @Override
     public ProcessGroupEntity deleteProcessGroup(final Revision revision, 
final String groupId) {
         final ProcessGroup processGroup = 
processGroupDAO.getProcessGroup(groupId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processGroup);
 
         // grab the resources in the snippet so we can delete the policies 
afterwards
         final Set<Resource> groupResources = new HashSet<>();
@@ -1180,12 +1199,13 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
         // delete all applicable component policies
         groupResources.forEach(groupResource -> 
cleanUpPolicies(groupResource));
 
-        return entityFactory.createProcessGroupEntity(snapshot, null, null, 
null, null);
+        return entityFactory.createProcessGroupEntity(snapshot, null, 
permissions, null, null);
     }
 
     @Override
     public RemoteProcessGroupEntity deleteRemoteProcessGroup(final Revision 
revision, final String remoteProcessGroupId) {
         final RemoteProcessGroup remoteProcessGroup = 
remoteProcessGroupDAO.getRemoteProcessGroup(remoteProcessGroupId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(remoteProcessGroup);
         final RemoteProcessGroupDTO snapshot = deleteComponent(
                 revision,
                 remoteProcessGroup.getResource(),
@@ -1193,7 +1213,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createRemoteProcessGroupDto(remoteProcessGroup));
 
-        return entityFactory.createRemoteProcessGroupEntity(snapshot, null, 
null, null, null);
+        return entityFactory.createRemoteProcessGroupEntity(snapshot, null, 
permissions, null, null);
     }
 
     @Override
@@ -1846,6 +1866,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     @Override
     public ControllerServiceEntity deleteControllerService(final Revision 
revision, final String controllerServiceId) {
         final ControllerServiceNode controllerService = 
controllerServiceDAO.getControllerService(controllerServiceId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(controllerService);
         final ControllerServiceDTO snapshot = deleteComponent(
                 revision,
                 controllerService.getResource(),
@@ -1853,7 +1874,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createControllerServiceDto(controllerService));
 
-        return entityFactory.createControllerServiceEntity(snapshot, null, 
null, null);
+        return entityFactory.createControllerServiceEntity(snapshot, null, 
permissions, null);
     }
 
 
@@ -1900,6 +1921,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     @Override
     public ReportingTaskEntity deleteReportingTask(final Revision revision, 
final String reportingTaskId) {
         final ReportingTaskNode reportingTask = 
reportingTaskDAO.getReportingTask(reportingTaskId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(reportingTask);
         final ReportingTaskDTO snapshot = deleteComponent(
                 revision,
                 reportingTask.getResource(),
@@ -1907,7 +1929,7 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
                 true,
                 dtoFactory.createReportingTaskDto(reportingTask));
 
-        return entityFactory.createReportingTaskEntity(snapshot, null, null, 
null);
+        return entityFactory.createReportingTaskEntity(snapshot, null, 
permissions, null);
     }
 
     @Override
@@ -2001,8 +2023,33 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public ProcessGroupStatusDTO getProcessGroupStatus(final String groupId) {
-        return 
dtoFactory.createProcessGroupStatusDto(controllerFacade.getProcessGroupStatus(groupId));
+    public ProcessGroupStatusEntity getProcessGroupStatus(final String 
groupId, final boolean recursive) {
+        final ProcessGroup processGroup = 
processGroupDAO.getProcessGroup(groupId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processGroup);
+        final ProcessGroupStatusDTO dto = 
dtoFactory.createProcessGroupStatusDto(controllerFacade.getProcessGroupStatus(groupId));
+
+        // prune the response as necessary
+        if (!recursive) {
+            pruneChildGroups(dto.getAggregateSnapshot());
+            if (dto.getNodeSnapshots() != null) {
+                for (final NodeProcessGroupStatusSnapshotDTO nodeSnapshot : 
dto.getNodeSnapshots()) {
+                    pruneChildGroups(nodeSnapshot.getStatusSnapshot());
+                }
+            }
+        }
+
+        return entityFactory.createProcessGroupStatusEntity(dto, permissions);
+    }
+
+    private void pruneChildGroups(final ProcessGroupStatusSnapshotDTO 
snapshot) {
+        for (final ProcessGroupStatusSnapshotDTO childProcessGroupStatus : 
snapshot.getProcessGroupStatusSnapshots()) {
+            childProcessGroupStatus.setConnectionStatusSnapshots(null);
+            childProcessGroupStatus.setProcessGroupStatusSnapshots(null);
+            childProcessGroupStatus.setInputPortStatusSnapshots(null);
+            childProcessGroupStatus.setOutputPortStatusSnapshots(null);
+            childProcessGroupStatus.setProcessorStatusSnapshots(null);
+            childProcessGroupStatus.setRemoteProcessGroupStatusSnapshots(null);
+        }
     }
 
     @Override
@@ -2103,13 +2150,19 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public ConnectionStatusDTO getConnectionStatus(final String connectionId) {
-        return 
dtoFactory.createConnectionStatusDto(controllerFacade.getConnectionStatus(connectionId));
+    public ConnectionStatusEntity getConnectionStatus(final String 
connectionId) {
+        final Connection connection = 
connectionDAO.getConnection(connectionId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(connection);
+        final ConnectionStatusDTO dto = 
dtoFactory.createConnectionStatusDto(controllerFacade.getConnectionStatus(connectionId));
+        return entityFactory.createConnectionStatusEntity(dto, permissions);
     }
 
     @Override
-    public StatusHistoryDTO getConnectionStatusHistory(final String 
connectionId) {
-        return controllerFacade.getConnectionStatusHistory(connectionId);
+    public StatusHistoryEntity getConnectionStatusHistory(final String 
connectionId) {
+        final Connection connection = 
connectionDAO.getConnection(connectionId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(connection);
+        final StatusHistoryDTO dto = 
controllerFacade.getConnectionStatusHistory(connectionId);
+        return entityFactory.createStatusHistoryEntity(dto, permissions);
     }
 
     private ProcessorEntity createProcessorEntity(final ProcessorNode 
processor) {
@@ -2198,13 +2251,19 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public ProcessorStatusDTO getProcessorStatus(final String id) {
-        return 
dtoFactory.createProcessorStatusDto(controllerFacade.getProcessorStatus(id));
+    public ProcessorStatusEntity getProcessorStatus(final String id) {
+        final ProcessorNode processor = processorDAO.getProcessor(id);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processor);
+        final ProcessorStatusDTO dto = 
dtoFactory.createProcessorStatusDto(controllerFacade.getProcessorStatus(id));
+        return entityFactory.createProcessorStatusEntity(dto, permissions);
     }
 
     @Override
-    public StatusHistoryDTO getProcessorStatusHistory(final String id) {
-        return controllerFacade.getProcessorStatusHistory(id);
+    public StatusHistoryEntity getProcessorStatusHistory(final String id) {
+        final ProcessorNode processor = processorDAO.getProcessor(id);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processor);
+        final StatusHistoryDTO dto = 
controllerFacade.getProcessorStatusHistory(id);
+        return entityFactory.createStatusHistoryEntity(dto, permissions);
     }
 
     private boolean authorizeBulletin(final Bulletin bulletin) {
@@ -2696,8 +2755,11 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public PortStatusDTO getInputPortStatus(final String inputPortId) {
-        return 
dtoFactory.createPortStatusDto(controllerFacade.getInputPortStatus(inputPortId));
+    public PortStatusEntity getInputPortStatus(final String inputPortId) {
+        final Port inputPort = inputPortDAO.getPort(inputPortId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(inputPort);
+        final PortStatusDTO dto = 
dtoFactory.createPortStatusDto(controllerFacade.getInputPortStatus(inputPortId));
+        return entityFactory.createPortStatusEntity(dto, permissions);
     }
 
     @Override
@@ -2707,8 +2769,11 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public PortStatusDTO getOutputPortStatus(final String outputPortId) {
-        return 
dtoFactory.createPortStatusDto(controllerFacade.getOutputPortStatus(outputPortId));
+    public PortStatusEntity getOutputPortStatus(final String outputPortId) {
+        final Port outputPort = outputPortDAO.getPort(outputPortId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(outputPort);
+        final PortStatusDTO dto = 
dtoFactory.createPortStatusDto(controllerFacade.getOutputPortStatus(outputPortId));
+        return entityFactory.createPortStatusEntity(dto, permissions);
     }
 
     @Override
@@ -2718,13 +2783,19 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public RemoteProcessGroupStatusDTO getRemoteProcessGroupStatus(final 
String id) {
-        return 
dtoFactory.createRemoteProcessGroupStatusDto(controllerFacade.getRemoteProcessGroupStatus(id));
+    public RemoteProcessGroupStatusEntity getRemoteProcessGroupStatus(final 
String id) {
+        final RemoteProcessGroup remoteProcessGroup = 
remoteProcessGroupDAO.getRemoteProcessGroup(id);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(remoteProcessGroup);
+        final RemoteProcessGroupStatusDTO dto = 
dtoFactory.createRemoteProcessGroupStatusDto(controllerFacade.getRemoteProcessGroupStatus(id));
+        return entityFactory.createRemoteProcessGroupStatusEntity(dto, 
permissions);
     }
 
     @Override
-    public StatusHistoryDTO getRemoteProcessGroupStatusHistory(final String 
id) {
-        return controllerFacade.getRemoteProcessGroupStatusHistory(id);
+    public StatusHistoryEntity getRemoteProcessGroupStatusHistory(final String 
id) {
+        final RemoteProcessGroup remoteProcessGroup = 
remoteProcessGroupDAO.getRemoteProcessGroup(id);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(remoteProcessGroup);
+        final StatusHistoryDTO dto = 
controllerFacade.getRemoteProcessGroupStatusHistory(id);
+        return entityFactory.createStatusHistoryEntity(dto, permissions);
     }
 
     @Override
@@ -2870,8 +2941,11 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
-    public StatusHistoryDTO getProcessGroupStatusHistory(final String groupId) 
{
-        return controllerFacade.getProcessGroupStatusHistory(groupId);
+    public StatusHistoryEntity getProcessGroupStatusHistory(final String 
groupId) {
+        final ProcessGroup processGroup = 
processGroupDAO.getProcessGroup(groupId);
+        final PermissionsDTO permissions = 
dtoFactory.createPermissionsDto(processGroup);
+        final StatusHistoryDTO dto = 
controllerFacade.getProcessGroupStatusHistory(groupId);
+        return entityFactory.createStatusHistoryEntity(dto, permissions);
     }
 
     private boolean authorizeAction(final Action action) {

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
index 3800161..73d4a0f 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiWebConfigurationContext.java
@@ -47,6 +47,7 @@ import 
org.apache.nifi.controller.reporting.ReportingTaskProvider;
 import org.apache.nifi.registry.VariableRegistry;
 import org.apache.nifi.controller.service.ControllerServiceProvider;
 import org.apache.nifi.util.NiFiProperties;
+import org.apache.nifi.web.api.dto.AllowableValueDTO;
 import org.apache.nifi.web.api.dto.ControllerServiceDTO;
 import org.apache.nifi.web.api.dto.ProcessorConfigDTO;
 import org.apache.nifi.web.api.dto.ProcessorDTO;
@@ -476,11 +477,11 @@ public class StandardNiFiWebConfigurationContext 
implements NiFiWebConfiguration
             for(String key : processorConfig.getDescriptors().keySet()){
 
                 PropertyDescriptorDTO descriptor = 
processorConfig.getDescriptors().get(key);
-                List<PropertyDescriptorDTO.AllowableValueDTO> 
allowableValuesDTO = descriptor.getAllowableValues();
+                List<AllowableValueDTO> allowableValuesDTO = 
descriptor.getAllowableValues();
                 Map<String,String> allowableValues = new HashMap<>();
 
                 if(allowableValuesDTO != null) {
-                    for (PropertyDescriptorDTO.AllowableValueDTO value : 
allowableValuesDTO) {
+                    for (AllowableValueDTO value : allowableValuesDTO) {
                         allowableValues.put(value.getValue(), 
value.getDisplayName());
                     }
                 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.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/ControllerResource.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
index e622b04..4063a72 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ControllerResource.java
@@ -184,7 +184,7 @@ public class ControllerResource extends ApplicationResource 
{
                     required = true
             ) final ControllerConfigurationEntity configEntity) {
 
-        if (configEntity == null || configEntity.getControllerConfiguration() 
== null) {
+        if (configEntity == null || configEntity.getComponent() == null) {
             throw new IllegalArgumentException("Controller configuration must 
be specified");
         }
 
@@ -205,7 +205,7 @@ public class ControllerResource extends ApplicationResource 
{
                 },
                 null,
                 () -> {
-                    final ControllerConfigurationEntity entity = 
serviceFacade.updateControllerConfiguration(revision, 
configEntity.getControllerConfiguration());
+                    final ControllerConfigurationEntity entity = 
serviceFacade.updateControllerConfiguration(revision, 
configEntity.getComponent());
                     return clusterContext(generateOkResponse(entity)).build();
                 }
         );

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.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/FlowResource.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
index 151a9c8..8dcbd73 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
@@ -61,15 +61,7 @@ import org.apache.nifi.web.api.dto.flow.FlowDTO;
 import org.apache.nifi.web.api.dto.flow.ProcessGroupFlowDTO;
 import org.apache.nifi.web.api.dto.search.NodeSearchResultDTO;
 import org.apache.nifi.web.api.dto.search.SearchResultsDTO;
-import org.apache.nifi.web.api.dto.status.ConnectionStatusDTO;
 import org.apache.nifi.web.api.dto.status.ControllerStatusDTO;
-import org.apache.nifi.web.api.dto.status.NodeProcessGroupStatusSnapshotDTO;
-import org.apache.nifi.web.api.dto.status.PortStatusDTO;
-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.RemoteProcessGroupStatusDTO;
-import org.apache.nifi.web.api.dto.status.StatusHistoryDTO;
 import org.apache.nifi.web.api.entity.AboutEntity;
 import org.apache.nifi.web.api.entity.ActionEntity;
 import org.apache.nifi.web.api.entity.BannerEntity;
@@ -465,6 +457,10 @@ public class FlowResource extends ApplicationResource {
 
         authorizeFlow();
 
+        if (isReplicateRequest()) {
+            return replicate(HttpMethod.GET);
+        }
+
         // get all the controller services
         final Set<ControllerServiceEntity> controllerServices = 
serviceFacade.getControllerServices(groupId);
         
controllerServiceResource.populateRemainingControllerServiceEntitiesContent(controllerServices);
@@ -1273,13 +1269,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified processor status
-        final ProcessorStatusDTO processorStatus = 
serviceFacade.getProcessorStatus(id);
-
-        // generate the response entity
-        final ProcessorStatusEntity entity = new ProcessorStatusEntity();
-        entity.setProcessorStatus(processorStatus);
-
-        // generate the response
+        final ProcessorStatusEntity entity = 
serviceFacade.getProcessorStatus(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1352,13 +1342,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified input port status
-        final PortStatusDTO portStatus = serviceFacade.getInputPortStatus(id);
-
-        // generate the response entity
-        final PortStatusEntity entity = new PortStatusEntity();
-        entity.setPortStatus(portStatus);
-
-        // generate the response
+        final PortStatusEntity entity = serviceFacade.getInputPortStatus(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1431,13 +1415,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified output port status
-        final PortStatusDTO portStatus = serviceFacade.getOutputPortStatus(id);
-
-        // generate the response entity
-        final PortStatusEntity entity = new PortStatusEntity();
-        entity.setPortStatus(portStatus);
-
-        // generate the response
+        final PortStatusEntity entity = serviceFacade.getOutputPortStatus(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1510,13 +1488,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified remote process group status
-        final RemoteProcessGroupStatusDTO remoteProcessGroupStatus = 
serviceFacade.getRemoteProcessGroupStatus(id);
-
-        // generate the response entity
-        final RemoteProcessGroupStatusEntity entity = new 
RemoteProcessGroupStatusEntity();
-        entity.setRemoteProcessGroupStatus(remoteProcessGroupStatus);
-
-        // generate the response
+        final RemoteProcessGroupStatusEntity entity = 
serviceFacade.getRemoteProcessGroupStatus(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1597,37 +1569,10 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the status
-        final ProcessGroupStatusDTO statusReport = 
serviceFacade.getProcessGroupStatus(groupId);
-
-        // prune the response as necessary
-        if (!recursive) {
-            pruneChildGroups(statusReport.getAggregateSnapshot());
-            if (statusReport.getNodeSnapshots() != null) {
-                for (final NodeProcessGroupStatusSnapshotDTO nodeSnapshot : 
statusReport.getNodeSnapshots()) {
-                    pruneChildGroups(nodeSnapshot.getStatusSnapshot());
-                }
-            }
-        }
-
-        // create the response entity
-        final ProcessGroupStatusEntity entity = new ProcessGroupStatusEntity();
-        entity.setProcessGroupStatus(statusReport);
-
-        // generate the response
+        final ProcessGroupStatusEntity entity = 
serviceFacade.getProcessGroupStatus(groupId, recursive);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
-    private void pruneChildGroups(final ProcessGroupStatusSnapshotDTO 
snapshot) {
-        for (final ProcessGroupStatusSnapshotDTO childProcessGroupStatus : 
snapshot.getProcessGroupStatusSnapshots()) {
-            childProcessGroupStatus.setConnectionStatusSnapshots(null);
-            childProcessGroupStatus.setProcessGroupStatusSnapshots(null);
-            childProcessGroupStatus.setInputPortStatusSnapshots(null);
-            childProcessGroupStatus.setOutputPortStatusSnapshots(null);
-            childProcessGroupStatus.setProcessorStatusSnapshots(null);
-            childProcessGroupStatus.setRemoteProcessGroupStatusSnapshots(null);
-        }
-    }
-
     /**
      * Retrieves the specified connection status.
      *
@@ -1697,13 +1642,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified connection status
-        final ConnectionStatusDTO connectionStatus = 
serviceFacade.getConnectionStatus(id);
-
-        // generate the response entity
-        final ConnectionStatusEntity entity = new ConnectionStatusEntity();
-        entity.setConnectionStatus(connectionStatus);
-
-        // generate the response
+        final ConnectionStatusEntity entity = 
serviceFacade.getConnectionStatus(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1753,13 +1692,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified processor status history
-        final StatusHistoryDTO processorStatusHistory = 
serviceFacade.getProcessorStatusHistory(id);
-
-        // generate the response entity
-        final StatusHistoryEntity entity = new StatusHistoryEntity();
-        entity.setStatusHistory(processorStatusHistory);
-
-        // generate the response
+        final StatusHistoryEntity entity = 
serviceFacade.getProcessorStatusHistory(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1805,13 +1738,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified processor status history
-        final StatusHistoryDTO processGroupStatusHistory = 
serviceFacade.getProcessGroupStatusHistory(groupId);
-
-        // generate the response entity
-        final StatusHistoryEntity entity = new StatusHistoryEntity();
-        entity.setStatusHistory(processGroupStatusHistory);
-
-        // generate the response
+        final StatusHistoryEntity entity = 
serviceFacade.getProcessGroupStatusHistory(groupId);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1857,13 +1784,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified processor status history
-        final StatusHistoryDTO remoteProcessGroupStatusHistory = 
serviceFacade.getRemoteProcessGroupStatusHistory(id);
-
-        // generate the response entity
-        final StatusHistoryEntity entity = new StatusHistoryEntity();
-        entity.setStatusHistory(remoteProcessGroupStatusHistory);
-
-        // generate the response
+        final StatusHistoryEntity entity = 
serviceFacade.getRemoteProcessGroupStatusHistory(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 
@@ -1909,13 +1830,7 @@ public class FlowResource extends ApplicationResource {
         }
 
         // get the specified processor status history
-        final StatusHistoryDTO connectionStatusHistory = 
serviceFacade.getConnectionStatusHistory(id);
-
-        // generate the response entity
-        final StatusHistoryEntity entity = new StatusHistoryEntity();
-        entity.setStatusHistory(connectionStatusHistory);
-
-        // generate the response
+        final StatusHistoryEntity entity = 
serviceFacade.getConnectionStatusHistory(id);
         return clusterContext(generateOkResponse(entity)).build();
     }
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/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 e847b8b..119e477 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
@@ -110,7 +110,6 @@ import org.apache.nifi.util.FormatUtils;
 import org.apache.nifi.util.StringUtils;
 import org.apache.nifi.web.FlowModification;
 import org.apache.nifi.web.Revision;
-import org.apache.nifi.web.api.dto.PropertyDescriptorDTO.AllowableValueDTO;
 import org.apache.nifi.web.api.dto.action.ActionDTO;
 import org.apache.nifi.web.api.dto.action.HistoryDTO;
 import 
org.apache.nifi.web.api.dto.action.component.details.ComponentDetailsDTO;
@@ -141,7 +140,12 @@ 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.RemoteProcessGroupStatusSnapshotDTO;
 import org.apache.nifi.web.api.entity.AccessPolicySummaryEntity;
+import org.apache.nifi.web.api.entity.ConnectionStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.FlowBreadcrumbEntity;
+import org.apache.nifi.web.api.entity.PortStatusSnapshotEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupStatusSnapshotEntity;
+import org.apache.nifi.web.api.entity.ProcessorStatusSnapshotEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.TenantEntity;
 import org.apache.nifi.web.controller.ControllerFacade;
 import org.apache.nifi.web.revision.RevisionManager;
@@ -900,73 +904,86 @@ public final class DtoFactory {
         return processGroupStatusDto;
     }
 
-    public ProcessGroupStatusDTO createProcessGroupStatusDto(final 
ProcessGroupStatus processGroupStatus) {
+    public ProcessGroupStatusDTO createProcessGroupStatusDto(final 
ProcessGroup processGroup, final ProcessGroupStatus processGroupStatus) {
         final ProcessGroupStatusDTO processGroupStatusDto = 
createConciseProcessGroupStatusDto(processGroupStatus);
         final ProcessGroupStatusSnapshotDTO snapshot = 
processGroupStatusDto.getAggregateSnapshot();
 
         // processor status
-        final Collection<ProcessorStatusSnapshotDTO> 
processorStatDtoCollection = new ArrayList<>();
-        snapshot.setProcessorStatusSnapshots(processorStatDtoCollection);
+        final Collection<ProcessorStatusSnapshotEntity> 
processorStatusSnapshotEntities = new ArrayList<>();
+        snapshot.setProcessorStatusSnapshots(processorStatusSnapshotEntities);
         final Collection<ProcessorStatus> processorStatusCollection = 
processGroupStatus.getProcessorStatus();
         if (processorStatusCollection != null) {
             for (final ProcessorStatus processorStatus : 
processorStatusCollection) {
                 final ProcessorStatusDTO processorStatusDto = 
createProcessorStatusDto(processorStatus);
-                
processorStatDtoCollection.add(processorStatusDto.getAggregateSnapshot());
+                final ProcessorNode processor = 
processGroup.findProcessor(processorStatusDto.getId());
+                final PermissionsDTO processorPermissions = 
createPermissionsDto(processor);
+                
processorStatusSnapshotEntities.add(entityFactory.createProcessorStatusSnapshotEntity(processorStatusDto.getAggregateSnapshot(),
 processorPermissions));
             }
         }
 
         // connection status
-        final Collection<ConnectionStatusSnapshotDTO> 
connectionStatusDtoCollection = new ArrayList<>();
+        final Collection<ConnectionStatusSnapshotEntity> 
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.getAggregateSnapshot());
+                final Connection connection = 
processGroup.findConnection(connectionStatusDto.getId());
+                final PermissionsDTO connectionPermissions = 
createPermissionsDto(connection);
+                
connectionStatusDtoCollection.add(entityFactory.createConnectionStatusSnapshotEntity(connectionStatusDto.getAggregateSnapshot(),
 connectionPermissions));
             }
         }
 
         // local child process groups
-        final Collection<ProcessGroupStatusSnapshotDTO> 
childProcessGroupStatusDtoCollection = new ArrayList<>();
+        final Collection<ProcessGroupStatusSnapshotEntity> 
childProcessGroupStatusDtoCollection = new ArrayList<>();
         
snapshot.setProcessGroupStatusSnapshots(childProcessGroupStatusDtoCollection);
         final Collection<ProcessGroupStatus> childProcessGroupStatusCollection 
= processGroupStatus.getProcessGroupStatus();
         if (childProcessGroupStatusCollection != null) {
             for (final ProcessGroupStatus childProcessGroupStatus : 
childProcessGroupStatusCollection) {
-                final ProcessGroupStatusDTO childProcessGroupStatusDto = 
createProcessGroupStatusDto(childProcessGroupStatus);
-                
childProcessGroupStatusDtoCollection.add(childProcessGroupStatusDto.getAggregateSnapshot());
+                final ProcessGroupStatusDTO childProcessGroupStatusDto = 
createProcessGroupStatusDto(processGroup, childProcessGroupStatus);
+                final ProcessGroup childProcessGroup = 
processGroup.findProcessGroup(childProcessGroupStatusDto.getId());
+                final PermissionsDTO childProcessGroupPermissions = 
createPermissionsDto(childProcessGroup);
+                
childProcessGroupStatusDtoCollection.add(entityFactory.createProcessGroupStatusSnapshotEntity(childProcessGroupStatusDto.getAggregateSnapshot(),
 childProcessGroupPermissions));
             }
         }
 
         // remote child process groups
-        final Collection<RemoteProcessGroupStatusSnapshotDTO> 
childRemoteProcessGroupStatusDtoCollection = new ArrayList<>();
+        final Collection<RemoteProcessGroupStatusSnapshotEntity> 
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.getAggregateSnapshot());
+                final RemoteProcessGroup remoteProcessGroup = 
processGroup.findRemoteProcessGroup(childRemoteProcessGroupStatusDto.getId());
+                final PermissionsDTO remoteProcessGroupPermissions = 
createPermissionsDto(remoteProcessGroup);
+                
childRemoteProcessGroupStatusDtoCollection.add(entityFactory.createRemoteProcessGroupStatusSnapshotEntity(childRemoteProcessGroupStatusDto.getAggregateSnapshot(),
+                        remoteProcessGroupPermissions));
             }
         }
 
         // input ports
-        final Collection<PortStatusSnapshotDTO> inputPortStatusDtoCollection = 
new ArrayList<>();
+        final Collection<PortStatusSnapshotEntity> 
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.getAggregateSnapshot());
+                final Port inputPort = 
processGroup.findInputPort(portStatus.getId());
+                final PermissionsDTO inputPortPermissions = 
createPermissionsDto(inputPort);
+                
inputPortStatusDtoCollection.add(entityFactory.createPortStatusSnapshotEntity(portStatusDto.getAggregateSnapshot(),
 inputPortPermissions));
             }
         }
 
         // output ports
-        final Collection<PortStatusSnapshotDTO> outputPortStatusDtoCollection 
= new ArrayList<>();
+        final Collection<PortStatusSnapshotEntity> 
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.getAggregateSnapshot());
+                final Port outputPort = 
processGroup.findOutputPort(portStatus.getId());
+                final PermissionsDTO outputPortPermissions = 
createPermissionsDto(outputPort);
+                
outputPortStatusDtoCollection.add(entityFactory.createPortStatusSnapshotEntity(portStatusDto.getAggregateSnapshot(),
 outputPortPermissions));
             }
         }
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.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/EntityFactory.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
index e3e30d5..00e239c 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/EntityFactory.java
@@ -19,13 +19,21 @@ package org.apache.nifi.web.api.dto;
 import org.apache.nifi.web.api.dto.flow.FlowBreadcrumbDTO;
 import org.apache.nifi.web.api.dto.flow.ProcessGroupFlowDTO;
 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.RemoteProcessGroupStatusSnapshotDTO;
+import org.apache.nifi.web.api.dto.status.StatusHistoryDTO;
 import org.apache.nifi.web.api.entity.AccessPolicyEntity;
 import org.apache.nifi.web.api.entity.AccessPolicySummaryEntity;
 import org.apache.nifi.web.api.entity.ConnectionEntity;
+import org.apache.nifi.web.api.entity.ConnectionStatusEntity;
+import org.apache.nifi.web.api.entity.ConnectionStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.ControllerConfigurationEntity;
 import org.apache.nifi.web.api.entity.ControllerServiceEntity;
 import 
org.apache.nifi.web.api.entity.ControllerServiceReferencingComponentEntity;
@@ -33,13 +41,22 @@ import org.apache.nifi.web.api.entity.FlowBreadcrumbEntity;
 import org.apache.nifi.web.api.entity.FunnelEntity;
 import org.apache.nifi.web.api.entity.LabelEntity;
 import org.apache.nifi.web.api.entity.PortEntity;
+import org.apache.nifi.web.api.entity.PortStatusEntity;
+import org.apache.nifi.web.api.entity.PortStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.ProcessorEntity;
+import org.apache.nifi.web.api.entity.ProcessorStatusEntity;
+import org.apache.nifi.web.api.entity.ProcessorStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupEntity;
 import org.apache.nifi.web.api.entity.RemoteProcessGroupPortEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupStatusEntity;
+import org.apache.nifi.web.api.entity.RemoteProcessGroupStatusSnapshotEntity;
 import org.apache.nifi.web.api.entity.ReportingTaskEntity;
 import org.apache.nifi.web.api.entity.SnippetEntity;
+import org.apache.nifi.web.api.entity.StatusHistoryEntity;
 import org.apache.nifi.web.api.entity.TenantEntity;
 import org.apache.nifi.web.api.entity.UserEntity;
 import org.apache.nifi.web.api.entity.UserGroupEntity;
@@ -49,20 +66,105 @@ import java.util.List;
 
 public final class EntityFactory {
 
+    private static final String NO_PERMISSIONS_MESSAGE = "No permissions were 
associated with this request";
+
+    public StatusHistoryEntity createStatusHistoryEntity(final 
StatusHistoryDTO statusHistory, final PermissionsDTO permissions) {
+        final StatusHistoryEntity entity = new StatusHistoryEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setStatusHistory(statusHistory); // always set the status, as 
it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
+    public ProcessorStatusEntity createProcessorStatusEntity(final 
ProcessorStatusDTO status, final PermissionsDTO permissions) {
+        final ProcessorStatusEntity entity = new ProcessorStatusEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setProcessorStatus(status); // always set the status, as it's 
always allowed... just need to provide permission context for merging responses
+        return entity;
+    }
+
+    public ProcessorStatusSnapshotEntity 
createProcessorStatusSnapshotEntity(final ProcessorStatusSnapshotDTO status, 
final PermissionsDTO permissions) {
+        final ProcessorStatusSnapshotEntity entity = new 
ProcessorStatusSnapshotEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setProcessorStatusSnapshot(status); // always set the status, 
as it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
+    public ConnectionStatusEntity createConnectionStatusEntity(final 
ConnectionStatusDTO status, final PermissionsDTO permissions) {
+        final ConnectionStatusEntity entity = new ConnectionStatusEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setConnectionStatus(status); // always set the status, as it's 
always allowed... just need to provide permission context for merging responses
+        return entity;
+    }
+
+    public ConnectionStatusSnapshotEntity 
createConnectionStatusSnapshotEntity(final ConnectionStatusSnapshotDTO status, 
final PermissionsDTO permissions) {
+        final ConnectionStatusSnapshotEntity entity = new 
ConnectionStatusSnapshotEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setConnectionStatusSnapshot(status); // always set the status, 
as it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
+    public ProcessGroupStatusEntity createProcessGroupStatusEntity(final 
ProcessGroupStatusDTO status, final PermissionsDTO permissions) {
+        final ProcessGroupStatusEntity entity = new ProcessGroupStatusEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setProcessGroupStatus(status); // always set the status, as 
it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
+    public ProcessGroupStatusSnapshotEntity 
createProcessGroupStatusSnapshotEntity(final ProcessGroupStatusSnapshotDTO 
status, final PermissionsDTO permissions) {
+        final ProcessGroupStatusSnapshotEntity entity = new 
ProcessGroupStatusSnapshotEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setProcessGroupStatusSnapshot(status); // always set the 
status, as it's always allowed... just need to provide permission context for 
merging responses
+        return entity;
+    }
+
+    public RemoteProcessGroupStatusEntity 
createRemoteProcessGroupStatusEntity(final RemoteProcessGroupStatusDTO status, 
final PermissionsDTO permissions) {
+        final RemoteProcessGroupStatusEntity entity = new 
RemoteProcessGroupStatusEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setRemoteProcessGroupStatus(status); // always set the status, 
as it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
+    public RemoteProcessGroupStatusSnapshotEntity 
createRemoteProcessGroupStatusSnapshotEntity(final 
RemoteProcessGroupStatusSnapshotDTO status, final PermissionsDTO permissions) {
+        final RemoteProcessGroupStatusSnapshotEntity entity = new 
RemoteProcessGroupStatusSnapshotEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setRemoteProcessGroupStatusSnapshot(status); // always set the 
status, as it's always allowed... just need to provide permission context for 
merging responses
+        return entity;
+    }
+
+    public PortStatusEntity createPortStatusEntity(final PortStatusDTO status, 
final PermissionsDTO permissions) {
+        final PortStatusEntity entity = new PortStatusEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setPortStatus(status); // always set the status, as it's always 
allowed... just need to provide permission context for merging responses
+        return entity;
+    }
+
+    public PortStatusSnapshotEntity createPortStatusSnapshotEntity(final 
PortStatusSnapshotDTO status, final PermissionsDTO permissions) {
+        final PortStatusSnapshotEntity entity = new PortStatusSnapshotEntity();
+        entity.setCanRead(permissions.getCanRead());
+        entity.setPortStatusSnapshot(status); // always set the status, as 
it's always allowed... just need to provide permission context for merging 
responses
+        return entity;
+    }
+
     public ControllerConfigurationEntity 
createControllerConfigurationEntity(final ControllerConfigurationDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ControllerConfigurationEntity entity = new 
ControllerConfigurationEntity();
         entity.setRevision(revision);
         entity.setCurrentTime(new Date());
         if (dto != null) {
             entity.setPermissions(permissions);
-            if (permissions != null && permissions.getCanRead()) {
-                entity.setControllerConfiguration(dto);
+            if (permissions.getCanRead()) {
+                entity.setComponent(dto);
             }
         }
         return entity;
     }
 
     public ProcessGroupFlowEntity createProcessGroupFlowEntity(final 
ProcessGroupFlowDTO dto, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ProcessGroupFlowEntity entity = new ProcessGroupFlowEntity();
         entity.setProcessGroupFlow(dto);
         entity.setPermissions(permissions);
@@ -72,6 +174,9 @@ public final class EntityFactory {
     public ProcessorEntity createProcessorEntity(final ProcessorDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions,
         final ProcessorStatusDTO status, final List<BulletinDTO> bulletins) {
 
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ProcessorEntity entity = new ProcessorEntity();
         entity.setRevision(revision);
         if (dto != null) {
@@ -80,7 +185,7 @@ public final class EntityFactory {
             entity.setId(dto.getId());
             entity.setInputRequirement(dto.getInputRequirement());
             entity.setPosition(dto.getPosition());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
                 entity.setBulletins(bulletins);
             }
@@ -89,6 +194,9 @@ public final class EntityFactory {
     }
 
     public PortEntity createPortEntity(final PortDTO dto, final RevisionDTO 
revision, final PermissionsDTO permissions, final PortStatusDTO status, final 
List<BulletinDTO> bulletins) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final PortEntity entity = new PortEntity();
         entity.setRevision(revision);
         if (dto != null) {
@@ -97,7 +205,7 @@ public final class EntityFactory {
             entity.setId(dto.getId());
             entity.setPosition(dto.getPosition());
             entity.setPortType(dto.getType());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
                 entity.setBulletins(bulletins);
             }
@@ -108,6 +216,9 @@ public final class EntityFactory {
     public ProcessGroupEntity createProcessGroupEntity(final ProcessGroupDTO 
dto, final RevisionDTO revision, final PermissionsDTO permissions,
                                                        final 
ProcessGroupStatusDTO status, final List<BulletinDTO> bulletins) {
 
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ProcessGroupEntity entity = new ProcessGroupEntity();
         entity.setRevision(revision);
         entity.setCurrentTime(new Date());
@@ -133,6 +244,9 @@ public final class EntityFactory {
     }
 
     public LabelEntity createLabelEntity(final LabelDTO dto, final RevisionDTO 
revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final LabelEntity entity = new LabelEntity();
         entity.setRevision(revision);
         if (dto != null) {
@@ -145,7 +259,7 @@ public final class EntityFactory {
             dimensions.setWidth(dto.getWidth());
             entity.setDimensions(dimensions);
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -153,13 +267,16 @@ public final class EntityFactory {
     }
 
     public UserEntity createUserEntity(final UserDTO dto, final RevisionDTO 
revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final UserEntity entity = new UserEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -167,13 +284,16 @@ public final class EntityFactory {
     }
 
     public TenantEntity createTenantEntity(final TenantDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final TenantEntity entity = new TenantEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -181,13 +301,16 @@ public final class EntityFactory {
     }
 
     public AccessPolicySummaryEntity createAccessPolicySummaryEntity(final 
AccessPolicySummaryDTO dto, final RevisionDTO revision, final PermissionsDTO 
permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final AccessPolicySummaryEntity entity = new 
AccessPolicySummaryEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -195,13 +318,16 @@ public final class EntityFactory {
     }
 
     public UserGroupEntity createUserGroupEntity(final UserGroupDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final UserGroupEntity entity = new UserGroupEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -209,6 +335,9 @@ public final class EntityFactory {
     }
 
     public AccessPolicyEntity createAccessPolicyEntity(final AccessPolicyDTO 
dto, final RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final AccessPolicyEntity entity = new AccessPolicyEntity();
         entity.setRevision(revision);
         entity.setGenerated(new Date());
@@ -216,7 +345,7 @@ public final class EntityFactory {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
 
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -224,13 +353,16 @@ public final class EntityFactory {
     }
 
     public FunnelEntity createFunnelEntity(final FunnelDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final FunnelEntity entity = new FunnelEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
             entity.setPosition(dto.getPosition());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -238,6 +370,9 @@ public final class EntityFactory {
     }
 
     public ConnectionEntity createConnectionEntity(final ConnectionDTO dto, 
final RevisionDTO revision, final PermissionsDTO permissions, final 
ConnectionStatusDTO status) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ConnectionEntity entity = new ConnectionEntity();
         entity.setRevision(revision);
         if (dto != null) {
@@ -254,7 +389,7 @@ public final class EntityFactory {
             entity.setDestinationId(dto.getDestination().getId());
             entity.setDestinationGroupId(dto.getDestination().getGroupId());
             entity.setDestinationType(dto.getDestination().getType());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -264,6 +399,9 @@ public final class EntityFactory {
     public RemoteProcessGroupEntity createRemoteProcessGroupEntity(final 
RemoteProcessGroupDTO dto, final RevisionDTO revision, final PermissionsDTO 
permissions,
                                                                    final 
RemoteProcessGroupStatusDTO status, final List<BulletinDTO> bulletins) {
 
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final RemoteProcessGroupEntity entity = new RemoteProcessGroupEntity();
         entity.setRevision(revision);
         if (dto != null) {
@@ -273,7 +411,7 @@ public final class EntityFactory {
             entity.setPosition(dto.getPosition());
             entity.setInputPortCount(dto.getInputPortCount());
             entity.setOutputPortCount(dto.getOutputPortCount());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
                 entity.setBulletins(bulletins);
             }
@@ -282,12 +420,15 @@ public final class EntityFactory {
     }
 
     public RemoteProcessGroupPortEntity 
createRemoteProcessGroupPortEntity(final RemoteProcessGroupPortDTO dto, final 
RevisionDTO revision, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final RemoteProcessGroupPortEntity entity = new 
RemoteProcessGroupPortEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setRemoteProcessGroupPort(dto);
             }
         }
@@ -302,12 +443,15 @@ public final class EntityFactory {
     }
 
     public ReportingTaskEntity createReportingTaskEntity(final 
ReportingTaskDTO dto, final RevisionDTO revision, final PermissionsDTO 
permissions, final List<BulletinDTO> bulletins) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ReportingTaskEntity entity = new ReportingTaskEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
                 entity.setBulletins(bulletins);
             }
@@ -317,13 +461,16 @@ public final class EntityFactory {
     }
 
     public ControllerServiceEntity createControllerServiceEntity(final 
ControllerServiceDTO dto, final RevisionDTO revision, final PermissionsDTO 
permissions, final List<BulletinDTO> bulletins) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ControllerServiceEntity entity = new ControllerServiceEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
             entity.setPosition(dto.getPosition());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
                 entity.setBulletins(bulletins);
             }
@@ -334,12 +481,15 @@ public final class EntityFactory {
     public ControllerServiceReferencingComponentEntity 
createControllerServiceReferencingComponentEntity(
         final ControllerServiceReferencingComponentDTO dto, final RevisionDTO 
revision, final PermissionsDTO permissions) {
 
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final ControllerServiceReferencingComponentEntity entity = new 
ControllerServiceReferencingComponentEntity();
         entity.setRevision(revision);
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setComponent(dto);
             }
         }
@@ -348,11 +498,14 @@ public final class EntityFactory {
     }
 
     public FlowBreadcrumbEntity createFlowBreadcrumbEntity(final 
FlowBreadcrumbDTO dto, final PermissionsDTO permissions) {
+        if (permissions == null || permissions.getCanRead() == null) {
+            throw new IllegalStateException(NO_PERMISSIONS_MESSAGE);
+        }
         final FlowBreadcrumbEntity entity = new FlowBreadcrumbEntity();
         if (dto != null) {
             entity.setPermissions(permissions);
             entity.setId(dto.getId());
-            if (permissions != null && permissions.getCanRead()) {
+            if (permissions.getCanRead()) {
                 entity.setBreadcrumb(dto);
             }
         }

http://git-wip-us.apache.org/repos/asf/nifi/blob/572dfed7/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 713a2c2..eb0180b 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
@@ -62,7 +62,7 @@ nf.Settings = (function () {
                     'version': version
                 }
             }),
-            'controllerConfiguration': configuration
+            'component': configuration
         };
 
         // save the new configuration details
@@ -860,8 +860,8 @@ nf.Settings = (function () {
 
                 if (response.permissions.canWrite) {
                     // populate the settings
-                    
$('#maximum-timer-driven-thread-count-field').removeClass('unset').val(response.controllerConfiguration.maxTimerDrivenThreadCount);
-                    
$('#maximum-event-driven-thread-count-field').removeClass('unset').val(response.controllerConfiguration.maxEventDrivenThreadCount);
+                    
$('#maximum-timer-driven-thread-count-field').removeClass('unset').val(response.component.maxTimerDrivenThreadCount);
+                    
$('#maximum-event-driven-thread-count-field').removeClass('unset').val(response.component.maxEventDrivenThreadCount);
 
                     setEditable(true);
 
@@ -872,8 +872,8 @@ nf.Settings = (function () {
                 } else {
                     if (response.permissions.canRead) {
                         // populate the settings
-                        
$('#read-only-maximum-timer-driven-thread-count-field').removeClass('unset').text(response.controllerConfiguration.maxTimerDrivenThreadCount);
-                        
$('#read-only-maximum-event-driven-thread-count-field').removeClass('unset').text(response.controllerConfiguration.maxEventDrivenThreadCount);
+                        
$('#read-only-maximum-timer-driven-thread-count-field').removeClass('unset').text(response.component.maxTimerDrivenThreadCount);
+                        
$('#read-only-maximum-event-driven-thread-count-field').removeClass('unset').text(response.component.maxEventDrivenThreadCount);
                     } else {
                         setUnauthorizedText();
                     }

Reply via email to