Repository: nifi Updated Branches: refs/heads/master 82d32230e -> 1ddd73655
NIFI-854: Ensure that controller services are included in template if any processor (or other service) in the template references it, regardless of how many levels deep the component's ProcessGroup is Project: http://git-wip-us.apache.org/repos/asf/nifi/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/1ddd7365 Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/1ddd7365 Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/1ddd7365 Branch: refs/heads/master Commit: 1ddd73655878a146cd99d2fd2746504fe33acee5 Parents: 82d3223 Author: Mark Payne <[email protected]> Authored: Thu Aug 20 11:25:17 2015 -0400 Committer: Mark Payne <[email protected]> Committed: Fri Aug 21 14:46:20 2015 -0400 ---------------------------------------------------------------------- .../nifi/web/api/dto/ControllerServiceDTO.java | 27 ++++++++++++++++++ .../org/apache/nifi/web/util/SnippetUtils.java | 29 ++++++++++---------- 2 files changed, 42 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi/blob/1ddd7365/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java index 3abd7f2..659be91 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ControllerServiceDTO.java @@ -201,4 +201,31 @@ public class ControllerServiceDTO extends NiFiComponentDTO { public void setValidationErrors(Collection<String> validationErrors) { this.validationErrors = validationErrors; } + + @Override + public int hashCode() { + final String id = getId(); + return 37 + 3 * ((id == null) ? 0 : id.hashCode()); + } + + @Override + public boolean equals(final Object obj) { + if (obj == null) { + return false; + } + if (obj == this) { + return true; + } + + if (obj.getClass() != ControllerServiceDTO.class) { + return false; + } + + final ControllerServiceDTO other = (ControllerServiceDTO) obj; + if (getId() == null || other.getId() == null) { + return false; + } + + return getId().equals(other.getId()); + } } http://git-wip-us.apache.org/repos/asf/nifi/blob/1ddd7365/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java ---------------------------------------------------------------------- diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java index 55982bd..5f74a0e 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java @@ -190,17 +190,23 @@ public final class SnippetUtils { } if (includeControllerServices) { - addControllerServicesToSnippet(snippetDto); + Set<ControllerServiceDTO> controllerServices = snippetDto.getControllerServices(); + if (controllerServices == null) { + controllerServices = new HashSet<>(); + snippetDto.setControllerServices(controllerServices); + } + + addControllerServicesToSnippet(snippetDto, controllerServices); } return snippetDto; } - private void addControllerServicesToSnippet(final FlowSnippetDTO snippetDto) { + private void addControllerServicesToSnippet(final FlowSnippetDTO snippetDto, final Set<ControllerServiceDTO> destinationSet) { final Set<ProcessorDTO> processors = snippetDto.getProcessors(); if (processors != null) { for (final ProcessorDTO processorDto : processors) { - addControllerServicesToSnippet(snippetDto, processorDto); + addControllerServicesToSnippet(snippetDto, processorDto, destinationSet); } } @@ -209,13 +215,13 @@ public final class SnippetUtils { for (final ProcessGroupDTO processGroupDto : childGroups) { final FlowSnippetDTO childGroupDto = processGroupDto.getContents(); if (childGroupDto != null) { - addControllerServicesToSnippet(childGroupDto); + addControllerServicesToSnippet(childGroupDto, destinationSet); } } } } - private void addControllerServicesToSnippet(final FlowSnippetDTO snippet, final ProcessorDTO processorDto) { + private void addControllerServicesToSnippet(final FlowSnippetDTO snippet, final ProcessorDTO processorDto, final Set<ControllerServiceDTO> destinationSet) { final ProcessorConfigDTO configDto = processorDto.getConfig(); if (configDto == null) { return; @@ -236,25 +242,20 @@ public final class SnippetUtils { if (propertyDescriptorDto != null && propertyDescriptorDto.getIdentifiesControllerService() != null) { final ControllerServiceNode serviceNode = flowController.getControllerServiceNode(propValue); if (serviceNode != null) { - addControllerServicesToSnippet(snippet, serviceNode); + addControllerServicesToSnippet(snippet, serviceNode, destinationSet); } } } } } - private void addControllerServicesToSnippet(final FlowSnippetDTO snippet, final ControllerServiceNode serviceNode) { + private void addControllerServicesToSnippet(final FlowSnippetDTO snippet, final ControllerServiceNode serviceNode, final Set<ControllerServiceDTO> destinationSet) { if (isServicePresent(serviceNode.getIdentifier(), snippet.getControllerServices())) { return; } final ControllerServiceDTO serviceNodeDto = dtoFactory.createControllerServiceDto(serviceNode); - Set<ControllerServiceDTO> existingServiceDtos = snippet.getControllerServices(); - if (existingServiceDtos == null) { - existingServiceDtos = new HashSet<>(); - snippet.setControllerServices(existingServiceDtos); - } - existingServiceDtos.add(serviceNodeDto); + destinationSet.add(serviceNodeDto); for (final Map.Entry<PropertyDescriptor, String> entry : serviceNode.getProperties().entrySet()) { final PropertyDescriptor descriptor = entry.getKey(); @@ -270,7 +271,7 @@ public final class SnippetUtils { final boolean alreadyPresent = isServicePresent(referencedNodeId, snippet.getControllerServices()); if (!alreadyPresent) { - addControllerServicesToSnippet(snippet, referencedNode); + addControllerServicesToSnippet(snippet, referencedNode, destinationSet); } } }
