NIFI-670:

- Preventing duplicate controller services from being created when copying and pasting processors. A new controller service will be included/created when using templates.
This commit is contained in:
Matt Gilman 2015-06-18 10:20:49 -04:00
parent e50b20c4ce
commit b7b42c7423
3 changed files with 16 additions and 9 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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);
}
}
}
}