diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorConfigDTO.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorConfigDTO.java index ec5df96d36..a9006c9bf6 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorConfigDTO.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/ProcessorConfigDTO.java @@ -237,7 +237,9 @@ public class ProcessorConfigDTO { * @return the names of all processor relationships that cause a flow file to be terminated if the relationship is not connected to anything */ @ApiModelProperty( - value = "The names of all relationships that cause a flow file to be terminated if the relationship is not connected elsewhere." + value = "The names of all relationships that cause a flow file to be terminated if the relationship is not connected elsewhere. This property differs " + + "from the 'isAutoTerminate' property of the RelationshipDTO in that the RelationshipDTO is meant to depict the current configuration, whereas this " + + "property can be set in a DTO when updating a Processor in order to change which Relationships should be auto-terminated." ) public Set getAutoTerminatedRelationships() { return autoTerminatedRelationships; diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/Template.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/Template.java index e50fe391a1..b330581a6f 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/Template.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/Template.java @@ -130,7 +130,7 @@ public class Template implements Authorizable { for (final ProcessGroupDTO groupDto : snippet.getProcessGroups()) { final ProcessGroup group = processGroup.getProcessGroup(groupDto.getId()); if (group != null) { - authComponents.addAll(getAuthorizableComponents(processGroup)); + authComponents.addAll(getAuthorizableComponents(group)); } } diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java index b7a55ad44b..a5c4679637 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/TemplateUtils.java @@ -42,6 +42,7 @@ import org.apache.nifi.web.api.dto.ProcessGroupDTO; import org.apache.nifi.web.api.dto.ProcessorConfigDTO; import org.apache.nifi.web.api.dto.ProcessorDTO; import org.apache.nifi.web.api.dto.PropertyDescriptorDTO; +import org.apache.nifi.web.api.dto.RelationshipDTO; import org.apache.nifi.web.api.dto.RemoteProcessGroupContentsDTO; import org.apache.nifi.web.api.dto.RemoteProcessGroupDTO; import org.apache.nifi.web.api.dto.RemoteProcessGroupPortDTO; @@ -147,6 +148,15 @@ public class TemplateUtils { private static void scrubProcessGroups(final Set processGroups) { // go through each process group for (final ProcessGroupDTO processGroupDTO : processGroups) { + processGroupDTO.setActiveRemotePortCount(null); + processGroupDTO.setDisabledCount(null); + processGroupDTO.setInactiveRemotePortCount(null); + processGroupDTO.setInputPortCount(null); + processGroupDTO.setInvalidCount(null); + processGroupDTO.setOutputPortCount(null); + processGroupDTO.setRunningCount(null); + processGroupDTO.setStoppedCount(null); + scrubSnippet(processGroupDTO.getContents()); } } @@ -179,11 +189,25 @@ public class TemplateUtils { } processorConfig.setCustomUiUrl(null); + processorConfig.setDefaultConcurrentTasks(null); + processorConfig.setDefaultSchedulingPeriod(null); + processorConfig.setDescriptors(null); + processorConfig.setAutoTerminatedRelationships(null); + } + + for (final RelationshipDTO relationship : processorDTO.getRelationships()) { + relationship.setDescription(null); } - // remove validation errors processorDTO.setValidationErrors(null); processorDTO.setInputRequirement(null); + processorDTO.setDescription(null); + processorDTO.setInputRequirement(null); + processorDTO.setPersistsState(null); + processorDTO.setState(null); + processorDTO.setSupportsBatching(null); + processorDTO.setSupportsEventDriven(null); + processorDTO.setSupportsParallelProcessing(null); } } @@ -200,6 +224,7 @@ public class TemplateUtils { } } + serviceDTO.setDescriptors(null); serviceDTO.setCustomUiUrl(null); serviceDTO.setValidationErrors(null); } @@ -248,6 +273,15 @@ public class TemplateUtils { remoteProcessGroupDTO.setOutputPortCount(null); remoteProcessGroupDTO.setTransmitting(null); remoteProcessGroupDTO.setProxyPassword(null); + remoteProcessGroupDTO.setActiveRemoteInputPortCount(null); + remoteProcessGroupDTO.setInactiveRemoteInputPortCount(null); + remoteProcessGroupDTO.setActiveRemoteOutputPortCount(null); + remoteProcessGroupDTO.setInactiveRemoteOutputPortCount(null); + remoteProcessGroupDTO.setAuthorizationIssues(null); + remoteProcessGroupDTO.setFlowRefreshed(null); + remoteProcessGroupDTO.setName(null); + remoteProcessGroupDTO.setTargetSecure(null); + remoteProcessGroupDTO.setTransmitting(null); // if this remote process group has contents if (remoteProcessGroupDTO.getContents() != null) { @@ -283,6 +317,10 @@ public class TemplateUtils { remotePortDTO.setExists(null); remotePortDTO.setTargetRunning(null); + remotePortDTO.setConnected(null); + remotePortDTO.setExists(null); + remotePortDTO.setTargetRunning(null); + remotePortDTO.setTransmitting(null); } } } 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 368968085e..10a28c7eda 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 @@ -1617,81 +1617,113 @@ public final class DtoFactory { final FlowDTO flow = new FlowDTO(); - for (final ConnectionDTO connection : snippet.getConnections()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(connection.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getConnection(connection.getId())); + for (final ConnectionDTO snippetConnection : snippet.getConnections()) { + final Connection connection = group.getConnection(snippetConnection.getId()); + + // marshal the actual connection as the snippet is pruned + final ConnectionDTO dto = createConnectionDto(connection); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(connection.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(connection); final ConnectionStatusDTO status = getComponentStatus( - () -> groupStatus.getConnectionStatus().stream().filter(connectionStatus -> connection.getId().equals(connectionStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getConnectionStatus().stream().filter(connectionStatus -> connection.getIdentifier().equals(connectionStatus.getId())).findFirst().orElse(null), connectionStatus -> createConnectionStatusDto(connectionStatus) ); - flow.getConnections().add(entityFactory.createConnectionEntity(connection, revision, accessPolicy, status)); + flow.getConnections().add(entityFactory.createConnectionEntity(dto, revision, accessPolicy, status)); } - for (final FunnelDTO funnel : snippet.getFunnels()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(funnel.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getFunnel(funnel.getId())); - flow.getFunnels().add(entityFactory.createFunnelEntity(funnel, revision, accessPolicy)); + for (final FunnelDTO snippetFunnel : snippet.getFunnels()) { + final Funnel funnel = group.getFunnel(snippetFunnel.getId()); + + // marshal the actual funnel as the snippet is pruned + final FunnelDTO dto = createFunnelDto(funnel); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(funnel.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(funnel); + flow.getFunnels().add(entityFactory.createFunnelEntity(dto, revision, accessPolicy)); } - for (final PortDTO inputPort : snippet.getInputPorts()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(inputPort.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getInputPort(inputPort.getId())); + for (final PortDTO snippetInputPort : snippet.getInputPorts()) { + final Port inputPort = group.getInputPort(snippetInputPort.getId()); + + // marshal the actual port as the snippet is pruned + final PortDTO dto = createPortDto(inputPort); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(inputPort.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(inputPort); final PortStatusDTO status = getComponentStatus( - () -> groupStatus.getInputPortStatus().stream().filter(inputPortStatus -> inputPort.getId().equals(inputPortStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getInputPortStatus().stream().filter(inputPortStatus -> inputPort.getIdentifier().equals(inputPortStatus.getId())).findFirst().orElse(null), inputPortStatus -> createPortStatusDto(inputPortStatus) ); - final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(inputPort.getId())); - flow.getInputPorts().add(entityFactory.createPortEntity(inputPort, revision, accessPolicy, status, bulletins)); + final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(inputPort.getIdentifier())); + flow.getInputPorts().add(entityFactory.createPortEntity(dto, revision, accessPolicy, status, bulletins)); } - for (final PortDTO outputPort : snippet.getOutputPorts()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(outputPort.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getOutputPort(outputPort.getId())); + for (final PortDTO snippetOutputPort : snippet.getOutputPorts()) { + final Port outputPort = group.getOutputPort(snippetOutputPort.getId()); + + // marshal the actual port as the snippet is pruned + final PortDTO dto = createPortDto(outputPort); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(outputPort.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(outputPort); final PortStatusDTO status = getComponentStatus( - () -> groupStatus.getOutputPortStatus().stream().filter(outputPortStatus -> outputPort.getId().equals(outputPortStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getOutputPortStatus().stream().filter(outputPortStatus -> outputPort.getIdentifier().equals(outputPortStatus.getId())).findFirst().orElse(null), outputPortStatus -> createPortStatusDto(outputPortStatus) ); - final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(outputPort.getId())); - flow.getOutputPorts().add(entityFactory.createPortEntity(outputPort, revision, accessPolicy, status, bulletins)); + final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(outputPort.getIdentifier())); + flow.getOutputPorts().add(entityFactory.createPortEntity(dto, revision, accessPolicy, status, bulletins)); } - for (final LabelDTO label : snippet.getLabels()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(label.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getLabel(label.getId())); - flow.getLabels().add(entityFactory.createLabelEntity(label, revision, accessPolicy)); + for (final LabelDTO snippetLabel : snippet.getLabels()) { + final Label label = group.getLabel(snippetLabel.getId()); + + // marshal the actual label as the snippet is pruned + final LabelDTO dto = createLabelDto(label); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(label.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(label); + flow.getLabels().add(entityFactory.createLabelEntity(dto, revision, accessPolicy)); } - for (final ProcessGroupDTO processGroup : snippet.getProcessGroups()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(processGroup.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getProcessGroup(processGroup.getId())); + for (final ProcessGroupDTO snippetProcessGroup : snippet.getProcessGroups()) { + final ProcessGroup processGroup = group.getProcessGroup(snippetProcessGroup.getId()); + + // marshal the actual group as the snippet is pruned + final ProcessGroupDTO dto = createProcessGroupDto(processGroup); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(processGroup.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(processGroup); final ProcessGroupStatusDTO status = getComponentStatus( - () -> groupStatus.getProcessGroupStatus().stream().filter(processGroupStatus -> processGroup.getId().equals(processGroupStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getProcessGroupStatus().stream().filter(processGroupStatus -> processGroup.getIdentifier().equals(processGroupStatus.getId())).findFirst().orElse(null), processGroupStatus -> createConciseProcessGroupStatusDto(processGroupStatus) ); - final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(processGroup.getId())); - flow.getProcessGroups().add(entityFactory.createProcessGroupEntity(processGroup, revision, accessPolicy, status, bulletins)); + final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(processGroup.getIdentifier())); + flow.getProcessGroups().add(entityFactory.createProcessGroupEntity(dto, revision, accessPolicy, status, bulletins)); } - for (final ProcessorDTO processor : snippet.getProcessors()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(processor.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getProcessor(processor.getId())); + for (final ProcessorDTO snippetProcessor : snippet.getProcessors()) { + final ProcessorNode processor = group.getProcessor(snippetProcessor.getId()); + + // marshal the actual processor as the snippet is pruned + final ProcessorDTO dto = createProcessorDto(processor); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(processor.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(processor); final ProcessorStatusDTO status = getComponentStatus( - () -> groupStatus.getProcessorStatus().stream().filter(processorStatus -> processor.getId().equals(processorStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getProcessorStatus().stream().filter(processorStatus -> processor.getIdentifier().equals(processorStatus.getId())).findFirst().orElse(null), processorStatus -> createProcessorStatusDto(processorStatus) ); - final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(processor.getId())); - flow.getProcessors().add(entityFactory.createProcessorEntity(processor, revision, accessPolicy, status, bulletins)); + final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(processor.getIdentifier())); + flow.getProcessors().add(entityFactory.createProcessorEntity(dto, revision, accessPolicy, status, bulletins)); } - for (final RemoteProcessGroupDTO remoteProcessGroup : snippet.getRemoteProcessGroups()) { - final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(remoteProcessGroup.getId())); - final AccessPolicyDTO accessPolicy = createAccessPolicyDto(group.getRemoteProcessGroup(remoteProcessGroup.getId())); + for (final RemoteProcessGroupDTO snippetRemoteProcessGroup : snippet.getRemoteProcessGroups()) { + final RemoteProcessGroup remoteProcessGroup = group.getRemoteProcessGroup(snippetRemoteProcessGroup.getId()); + + // marshal the actual rpm as the snippet is pruned + final RemoteProcessGroupDTO dto = createRemoteProcessGroupDto(remoteProcessGroup); + final RevisionDTO revision = createRevisionDTO(revisionManager.getRevision(remoteProcessGroup.getIdentifier())); + final AccessPolicyDTO accessPolicy = createAccessPolicyDto(remoteProcessGroup); final RemoteProcessGroupStatusDTO status = getComponentStatus( - () -> groupStatus.getRemoteProcessGroupStatus().stream().filter(rpgStatus -> remoteProcessGroup.getId().equals(rpgStatus.getId())).findFirst().orElse(null), + () -> groupStatus.getRemoteProcessGroupStatus().stream().filter(rpgStatus -> remoteProcessGroup.getIdentifier().equals(rpgStatus.getId())).findFirst().orElse(null), remoteProcessGroupStatus -> createRemoteProcessGroupStatusDto(remoteProcessGroupStatus) ); - final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(remoteProcessGroup.getId())); - flow.getRemoteProcessGroups().add(entityFactory.createRemoteProcessGroupEntity(remoteProcessGroup, revision, accessPolicy, status, bulletins)); + final List bulletins = createBulletinDtos(bulletinRepository.findBulletinsForSource(remoteProcessGroup.getIdentifier())); + flow.getRemoteProcessGroups().add(entityFactory.createRemoteProcessGroupEntity(dto, revision, accessPolicy, status, bulletins)); } return flow;