This is an automated email from the ASF dual-hosted git repository.

mcgilman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/master by this push:
     new 4851e00  NIFI-6607: Ensure that when creating 
ParameterContextUpdateRequestDTO that we populate the AffectedComponentEntities 
with the most up-to-date version of the component
4851e00 is described below

commit 4851e00f1da758468984c198b8e9f49a006d5f0c
Author: Mark Payne <[email protected]>
AuthorDate: Tue Sep 3 12:15:12 2019 -0400

    NIFI-6607: Ensure that when creating ParameterContextUpdateRequestDTO that 
we populate the AffectedComponentEntities with the most up-to-date version of 
the component
    
    This closes #3689
---
 .../org/apache/nifi/web/NiFiServiceFacade.java     |  7 ++++
 .../apache/nifi/web/StandardNiFiServiceFacade.java | 40 ++++++++++++++++++++++
 .../nifi/web/api/ParameterContextResource.java     |  5 +--
 3 files changed, 50 insertions(+), 2 deletions(-)

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 f62bec2..a349a39 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
@@ -1574,6 +1574,13 @@ public interface NiFiServiceFacade {
     Set<AffectedComponentEntity> 
getComponentsAffectedByParameterContextUpdate(ParameterContextDTO 
parameterContextDto);
 
     /**
+     * Returns an up-to-date representation of the component that is 
referenced by the given affected component
+     * @param affectedComponent the affected component
+     * @return an up-to-date representation of the affected component
+     */
+    AffectedComponentEntity 
getUpdatedAffectedComponentEntity(AffectedComponentEntity affectedComponent);
+
+    /**
      * Returns a Set representing all Processors that reference any Parameters 
and that belong to the group with the given ID
      *
      * @param groupId the id of the process group
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 03cdc31..cbc5ec2 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
@@ -1195,6 +1195,46 @@ public class StandardNiFiServiceFacade implements 
NiFiServiceFacade {
     }
 
     @Override
+    public AffectedComponentEntity getUpdatedAffectedComponentEntity(final 
AffectedComponentEntity affectedComponent) {
+        final AffectedComponentDTO dto = affectedComponent.getComponent();
+        if (dto == null) {
+            return affectedComponent;
+        }
+
+        final String groupId = affectedComponent.getProcessGroup().getId();
+        final ProcessGroup processGroup = 
processGroupDAO.getProcessGroup(groupId);
+
+        final String componentType = dto.getReferenceType();
+        if 
(AffectedComponentDTO.COMPONENT_TYPE_CONTROLLER_SERVICE.equals(componentType)) {
+            final ControllerServiceNode serviceNode = 
processGroup.getControllerService(dto.getId());
+            return dtoFactory.createAffectedComponentEntity(serviceNode, 
revisionManager);
+        } else if 
(AffectedComponentDTO.COMPONENT_TYPE_PROCESSOR.equals(componentType)) {
+            final ProcessorNode processorNode = 
processGroup.getProcessor(dto.getId());
+            return dtoFactory.createAffectedComponentEntity(processorNode, 
revisionManager);
+        } else if 
(AffectedComponentDTO.COMPONENT_TYPE_INPUT_PORT.equals(componentType)) {
+            final Port inputPort = processGroup.getInputPort(dto.getId());
+            final PortEntity portEntity = createInputPortEntity(inputPort);
+            return dtoFactory.createAffectedComponentEntity(portEntity, 
AffectedComponentDTO.COMPONENT_TYPE_INPUT_PORT);
+        } else if 
(AffectedComponentDTO.COMPONENT_TYPE_OUTPUT_PORT.equals(componentType)) {
+            final Port outputPort = processGroup.getOutputPort(dto.getId());
+            final PortEntity portEntity = createOutputPortEntity(outputPort);
+            return dtoFactory.createAffectedComponentEntity(portEntity, 
AffectedComponentDTO.COMPONENT_TYPE_OUTPUT_PORT);
+        } else if 
(AffectedComponentDTO.COMPONENT_TYPE_REMOTE_INPUT_PORT.equals(componentType)) {
+            final RemoteGroupPort remoteGroupPort = 
processGroup.findRemoteGroupPort(dto.getId());
+            final RemoteProcessGroupEntity rpgEntity = 
createRemoteGroupEntity(remoteGroupPort.getRemoteProcessGroup(), 
NiFiUserUtils.getNiFiUser());
+            final RemoteProcessGroupPortDTO remotePortDto = 
dtoFactory.createRemoteProcessGroupPortDto(remoteGroupPort);
+            return dtoFactory.createAffectedComponentEntity(remotePortDto, 
AffectedComponentDTO.COMPONENT_TYPE_REMOTE_INPUT_PORT, rpgEntity);
+        } else if 
(AffectedComponentDTO.COMPONENT_TYPE_REMOTE_OUTPUT_PORT.equals(componentType)) {
+            final RemoteGroupPort remoteGroupPort = 
processGroup.findRemoteGroupPort(dto.getId());
+            final RemoteProcessGroupEntity rpgEntity = 
createRemoteGroupEntity(remoteGroupPort.getRemoteProcessGroup(), 
NiFiUserUtils.getNiFiUser());
+            final RemoteProcessGroupPortDTO remotePortDto = 
dtoFactory.createRemoteProcessGroupPortDto(remoteGroupPort);
+            return dtoFactory.createAffectedComponentEntity(remotePortDto, 
AffectedComponentDTO.COMPONENT_TYPE_REMOTE_OUTPUT_PORT, rpgEntity);
+        }
+
+        return affectedComponent;
+    }
+
+    @Override
     public Set<AffectedComponentEntity> 
getComponentsAffectedByParameterContextUpdate(final ParameterContextDTO 
parameterContextDto) {
         return 
getComponentsAffectedByParameterContextUpdate(parameterContextDto, true);
     }
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
index 63fcad6..5c8fd6a 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ParameterContextResource.java
@@ -1155,13 +1155,14 @@ public class ParameterContextResource extends 
ApplicationResource {
         updateRequestDto.setUpdateSteps(updateSteps);
 
         final ParameterContextEntity initialRequest = 
asyncRequest.getRequest();
+
+        // The AffectedComponentEntity itself does not evaluate equality based 
on component information. As a result, we want to de-dupe the entities based on 
their identifiers.
         final Map<String, AffectedComponentEntity> affectedComponents = new 
HashMap<>();
         for (final ParameterEntity entity : 
initialRequest.getComponent().getParameters()) {
             for (final AffectedComponentEntity affectedComponentEntity : 
entity.getParameter().getReferencingComponents()) {
-                affectedComponents.put(affectedComponentEntity.getId(), 
affectedComponentEntity);
+                affectedComponents.put(affectedComponentEntity.getId(), 
serviceFacade.getUpdatedAffectedComponentEntity(affectedComponentEntity));
             }
         }
-
         updateRequestDto.setReferencingComponents(new 
HashSet<>(affectedComponents.values()));
 
         // Populate the Affected Components

Reply via email to