diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java index 9436fb8f11..903b872dc8 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java @@ -472,7 +472,7 @@ public class StandardNiFiServiceFacade implements NiFiServiceFacade { // build the snippet dto final SnippetDTO responseSnippetDto = dtoFactory.createSnippetDto(snippet); - responseSnippetDto.setContents(snippetUtils.populateFlowSnippet(snippet, false)); + responseSnippetDto.setContents(snippetUtils.populateFlowSnippet(snippet, false, false)); // save updated controller if applicable if (snippetDto.getParentGroupId() != null && snippet.isLinked()) { @@ -995,7 +995,7 @@ public class StandardNiFiServiceFacade implements NiFiServiceFacade { // add the snippet final Snippet snippet = snippetDAO.createSnippet(snippetDTO); final SnippetDTO responseSnippetDTO = dtoFactory.createSnippetDto(snippet); - responseSnippetDTO.setContents(snippetUtils.populateFlowSnippet(snippet, false)); + responseSnippetDTO.setContents(snippetUtils.populateFlowSnippet(snippet, false, false)); return responseSnippetDTO; } @@ -1092,7 +1092,7 @@ public class StandardNiFiServiceFacade implements NiFiServiceFacade { templateDTO.setName(name); templateDTO.setDescription(description); templateDTO.setTimestamp(new Date()); - templateDTO.setSnippet(snippetUtils.populateFlowSnippet(snippet, true)); + templateDTO.setSnippet(snippetUtils.populateFlowSnippet(snippet, true, true)); // set the id based on the specified seed final ClusterContext clusterContext = ClusterContextThreadLocal.getContext(); @@ -1972,7 +1972,7 @@ public class StandardNiFiServiceFacade implements NiFiServiceFacade { public SnippetDTO getSnippet(String snippetId) { final Snippet snippet = snippetDAO.getSnippet(snippetId); final SnippetDTO snippetDTO = dtoFactory.createSnippetDto(snippet); - snippetDTO.setContents(snippetUtils.populateFlowSnippet(snippet, false)); + snippetDTO.setContents(snippetUtils.populateFlowSnippet(snippet, false, false)); return snippetDTO; } diff --git a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java index 73a15013aa..24e9256c38 100644 --- a/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java +++ b/nifi/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardSnippetDAO.java @@ -76,7 +76,7 @@ public class StandardSnippetDAO implements SnippetDAO { } // generate the snippet contents - FlowSnippetDTO snippetContents = snippetUtils.populateFlowSnippet(existingSnippet, true); + FlowSnippetDTO snippetContents = snippetUtils.populateFlowSnippet(existingSnippet, true, false); // resolve sensitive properties lookupSensitiveProperties(snippetContents); diff --git a/nifi/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/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java index ea36abd8db..55982bd6aa 100644 --- a/nifi/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/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/util/SnippetUtils.java @@ -72,9 +72,10 @@ public final class SnippetUtils { * * @param snippet snippet * @param recurse recurse + * @param includeControllerServices whether or not to include controller services in the flow snippet dto * @return snippet */ - public FlowSnippetDTO populateFlowSnippet(Snippet snippet, boolean recurse) { + public FlowSnippetDTO populateFlowSnippet(Snippet snippet, boolean recurse, boolean includeControllerServices) { final FlowSnippetDTO snippetDto = new FlowSnippetDTO(); final String groupId = snippet.getParentGroupId(); final ProcessGroup processGroup = flowController.getGroup(groupId); @@ -188,7 +189,9 @@ public final class SnippetUtils { snippetDto.setRemoteProcessGroups(remoteProcessGroups); } - addControllerServicesToSnippet(snippetDto); + if (includeControllerServices) { + addControllerServicesToSnippet(snippetDto); + } return snippetDto; } @@ -570,8 +573,12 @@ public final class SnippetUtils { continue; } - final String newServiceId = serviceIdMap.get(currentServiceId); - properties.put(descriptor.getName(), newServiceId); + // if this is a copy/paste action, we can continue to reference the same service, in this case + // the serviceIdMap will be empty + if (serviceIdMap.containsKey(currentServiceId)) { + final String newServiceId = serviceIdMap.get(currentServiceId); + properties.put(descriptor.getName(), newServiceId); + } } } }