This is an automated email from the ASF dual-hosted git repository.
mcgilman pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new eefa952eddd NIFI-16404 Added connector-scoped Process Group GET.
(#11731)
eefa952eddd is described below
commit eefa952edddc320c511fa975fe8744c7d452b8fe
Author: Rob Fellows <[email protected]>
AuthorDate: Tue Sep 29 10:09:04 2026 -0400
NIFI-16404 Added connector-scoped Process Group GET. (#11731)
---
.../org/apache/nifi/web/NiFiServiceFacade.java | 10 ++++
.../apache/nifi/web/StandardNiFiServiceFacade.java | 17 ++++++
.../org/apache/nifi/web/api/ConnectorResource.java | 62 ++++++++++++++++++++++
.../nifi/web/StandardNiFiServiceFacadeTest.java | 20 +++++++
.../apache/nifi/web/api/TestConnectorResource.java | 42 +++++++++++++++
.../tests/system/connectors/ConnectorCrudIT.java | 14 +++++
.../connectors/ConnectorTroubleshootingIT.java | 5 ++
.../nifi/toolkit/client/ConnectorClient.java | 13 +++++
.../toolkit/client/impl/JerseyConnectorClient.java | 20 +++++++
9 files changed, 203 insertions(+)
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
index 2f9b8538d25..e2c9aed520b 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
@@ -2361,6 +2361,16 @@ public interface NiFiServiceFacade {
*/
ControllerServiceEntity getConnectorControllerService(String connectorId,
String controllerServiceId, boolean includeReferencingComponents);
+ /**
+ * Gets a process group within a connector's managed process group.
Available regardless of whether
+ * the Connector is in Troubleshooting mode.
+ *
+ * @param connectorId the connector id
+ * @param processGroupId the process group id
+ * @return the process group entity
+ */
+ ProcessGroupEntity getConnectorProcessGroup(String connectorId, String
processGroupId);
+
/**
* Gets the state for a controller service within a connector's managed
process group.
*
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
index ad76675bf18..8d8c9766afe 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
@@ -2255,6 +2255,12 @@ public class StandardNiFiServiceFacade implements
NiFiServiceFacade {
return createControllerServiceEntity(controllerService,
includeReferencingComponents);
}
+ @Override
+ public ProcessGroupEntity getConnectorProcessGroup(final String
connectorId, final String processGroupId) {
+ final ProcessGroup processGroup =
locateConnectorProcessGroup(connectorId, processGroupId);
+ return createProcessGroupEntity(processGroup);
+ }
+
@Override
public ComponentStateDTO getConnectorControllerServiceState(final String
connectorId, final String controllerServiceId) {
final ControllerServiceNode controllerService =
locateConnectorControllerService(connectorId, controllerServiceId);
@@ -2286,6 +2292,17 @@ public class StandardNiFiServiceFacade implements
NiFiServiceFacade {
return processor;
}
+ private ProcessGroup locateConnectorProcessGroup(final String connectorId,
final String processGroupId) {
+ final ConnectorNode connectorNode =
connectorDAO.getConnector(connectorId, ConnectorSyncMode.LOCAL_ONLY);
+ final ProcessGroup managedGroup =
connectorNode.getActiveFlowContext().getManagedProcessGroup();
+ final ProcessGroup processGroup =
managedGroup.findProcessGroup(processGroupId);
+ if (processGroup == null) {
+ throw new ResourceNotFoundException("Unable to find process group
with id '%s' within connector '%s'.".formatted(processGroupId, connectorId));
+ }
+
+ return processGroup;
+ }
+
private ControllerServiceNode locateConnectorControllerService(final
String connectorId, final String controllerServiceId) {
final ConnectorNode connectorNode =
connectorDAO.getConnector(connectorId, ConnectorSyncMode.LOCAL_ONLY);
final ProcessGroup managedGroup =
connectorNode.getActiveFlowContext().getManagedProcessGroup();
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectorResource.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectorResource.java
index 1da36de45f4..5aa2d966fb7 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectorResource.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/ConnectorResource.java
@@ -111,6 +111,7 @@ import org.apache.nifi.web.api.entity.DropRequestEntity;
import org.apache.nifi.web.api.entity.MigrationPayloadEntity;
import org.apache.nifi.web.api.entity.MigrationRequestEntity;
import org.apache.nifi.web.api.entity.ParameterContextEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupEntity;
import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
import org.apache.nifi.web.api.entity.SearchResultsEntity;
@@ -172,6 +173,7 @@ public class ConnectorResource extends ApplicationResource {
private Authorizer authorizer;
private FlowResource flowResource;
private ControllerServiceResource controllerServiceResource;
+ private ProcessGroupResource processGroupResource;
private UploadRequestReplicator uploadRequestReplicator;
private final RequestManager<VerifyConnectorConfigStepRequestEntity,
List<ConfigVerificationResultDTO>> configVerificationRequestManager =
@@ -2323,6 +2325,61 @@ public class ConnectorResource extends
ApplicationResource {
return generateOkResponse(entity).build();
}
+ /**
+ * Gets a process group within a connector. Available regardless of
whether the Connector is in Troubleshooting mode.
+ *
+ * @param connectorId the connector id
+ * @param processGroupId the process group id within the connector's
managed flow
+ * @return a ProcessGroupEntity
+ */
+ @GET
+ @Consumes(MediaType.WILDCARD)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("{id}/process-groups/{processGroupId}")
+ @Operation(
+ summary = "Gets a process group within a connector",
+ responses = {
+ @ApiResponse(responseCode = "200", content =
@Content(schema = @Schema(implementation = ProcessGroupEntity.class))),
+ @ApiResponse(responseCode = "400", description = "NiFi was
unable to complete the request because it was invalid. The request should not
be retried without modification."),
+ @ApiResponse(responseCode = "401", description = "Client
could not be authenticated."),
+ @ApiResponse(responseCode = "403", description = "Client
is not authorized to make this request."),
+ @ApiResponse(responseCode = "404", description = "The
specified resource could not be found."),
+ @ApiResponse(responseCode = "409", description = "The
request was valid but NiFi was not in the appropriate state to process it.")
+ },
+ security = {
+ @SecurityRequirement(name = "Read - /connectors/{uuid}")
+ },
+ description = "Returns the Process Group entity for the specified
group within the connector's managed flow. " +
+ "The processGroupId can be obtained from the
managedProcessGroupId field of the ConnectorDTO for the root " +
+ "process group, or from child process groups within the
flow. Available regardless of whether the Connector " +
+ "is in Troubleshooting mode."
+ )
+ public Response getConnectorProcessGroup(
+ @Parameter(description = "The connector id.", required = true)
+ @PathParam("id") final String connectorId,
+ @Parameter(description = "The process group id.", required = true)
+ @PathParam("processGroupId") final String processGroupId) {
+
+ if (isReplicateRequest()) {
+ return replicate(HttpMethod.GET);
+ }
+
+ serviceFacade.authorizeAccess(lookup -> {
+ final Authorizable connector = lookup.getConnector(connectorId);
+ connector.authorize(authorizer, RequestAction.READ,
NiFiUserUtils.getNiFiUser());
+ });
+
+ // Resolve the process group from the managed Process Group tree so
the Troubleshooting access gate does not apply.
+ final ProcessGroupEntity entity =
serviceFacade.getConnectorProcessGroup(connectorId, processGroupId);
+
processGroupResource.populateRemainingProcessGroupEntityContent(entity);
+
+ if (entity.getComponent() != null) {
+ entity.getComponent().setContents(null);
+ }
+
+ return generateOkResponse(entity).build();
+ }
+
/**
* Gets the status history for a Process Group inside the Connector's
managed flow. The status history is available
* regardless of whether the Connector is in Troubleshooting mode.
@@ -3548,6 +3605,11 @@ public class ConnectorResource extends
ApplicationResource {
this.controllerServiceResource = controllerServiceResource;
}
+ @Autowired
+ public void setProcessGroupResource(final ProcessGroupResource
processGroupResource) {
+ this.processGroupResource = processGroupResource;
+ }
+
@Autowired(required = false)
public void setUploadRequestReplicator(final UploadRequestReplicator
uploadRequestReplicator) {
this.uploadRequestReplicator = uploadRequestReplicator;
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/StandardNiFiServiceFacadeTest.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/StandardNiFiServiceFacadeTest.java
index 47f729e1763..5d7d0f0e531 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/StandardNiFiServiceFacadeTest.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/StandardNiFiServiceFacadeTest.java
@@ -2252,6 +2252,26 @@ public class StandardNiFiServiceFacadeTest {
assertThrows(ResourceNotFoundException.class, () ->
serviceFacade.getConnectorControllerService(connectorId, controllerServiceId,
false));
}
+ @Test
+ public void testGetConnectorProcessGroupNotFound() {
+ final String connectorId = "connector-id";
+ final String processGroupId = "non-existent-process-group-id";
+
+ final ConnectorDAO connectorDAO = mock(ConnectorDAO.class);
+ serviceFacade.setConnectorDAO(connectorDAO);
+
+ final ConnectorNode connectorNode = mock(ConnectorNode.class);
+ final FrameworkFlowContext flowContext =
mock(FrameworkFlowContext.class);
+ final ProcessGroup managedProcessGroup = mock(ProcessGroup.class);
+
+ when(connectorDAO.getConnector(connectorId,
ConnectorSyncMode.LOCAL_ONLY)).thenReturn(connectorNode);
+ when(connectorNode.getActiveFlowContext()).thenReturn(flowContext);
+
when(flowContext.getManagedProcessGroup()).thenReturn(managedProcessGroup);
+
when(managedProcessGroup.findProcessGroup(processGroupId)).thenReturn(null);
+
+ assertThrows(ResourceNotFoundException.class, () ->
serviceFacade.getConnectorProcessGroup(connectorId, processGroupId));
+ }
+
@Test
public void testGetConnectorControllerServiceState() {
final String connectorId = "connector-id";
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/api/TestConnectorResource.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/api/TestConnectorResource.java
index 13eca09c528..c5aeb7fcd90 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/api/TestConnectorResource.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/test/java/org/apache/nifi/web/api/TestConnectorResource.java
@@ -43,10 +43,12 @@ import org.apache.nifi.web.api.dto.ComponentStateDTO;
import org.apache.nifi.web.api.dto.ConfigurationStepConfigurationDTO;
import org.apache.nifi.web.api.dto.ConnectorDTO;
import org.apache.nifi.web.api.dto.ConnectorValueReferenceDTO;
+import org.apache.nifi.web.api.dto.FlowSnippetDTO;
import org.apache.nifi.web.api.dto.MigrationRequestDTO;
import org.apache.nifi.web.api.dto.MigrationRequestLocalSourceDTO;
import org.apache.nifi.web.api.dto.ParameterContextDTO;
import org.apache.nifi.web.api.dto.ParameterDTO;
+import org.apache.nifi.web.api.dto.ProcessGroupDTO;
import org.apache.nifi.web.api.dto.PropertyGroupConfigurationDTO;
import org.apache.nifi.web.api.dto.RevisionDTO;
import org.apache.nifi.web.api.dto.VerifyConnectorConfigStepRequestDTO;
@@ -65,6 +67,7 @@ import org.apache.nifi.web.api.entity.MigrationPayloadEntity;
import org.apache.nifi.web.api.entity.MigrationRequestEntity;
import org.apache.nifi.web.api.entity.ParameterContextEntity;
import org.apache.nifi.web.api.entity.ParameterEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupEntity;
import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
import org.apache.nifi.web.api.entity.SecretsEntity;
import org.apache.nifi.web.api.entity.VerifyConnectorConfigStepRequestEntity;
@@ -99,6 +102,7 @@ import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
@@ -148,6 +152,9 @@ public class TestConnectorResource {
@Mock
private ControllerServiceResource controllerServiceResource;
+ @Mock
+ private ProcessGroupResource processGroupResource;
+
private static final String CONNECTOR_ID = "test-connector-id";
private static final String CONNECTOR_NAME = "Test Connector";
private static final String CONNECTOR_TYPE = "TestConnectorType";
@@ -177,6 +184,7 @@ public class TestConnectorResource {
connectorResource.setServiceFacade(serviceFacade);
connectorResource.setFlowResource(flowResource);
connectorResource.setControllerServiceResource(controllerServiceResource);
+ connectorResource.setProcessGroupResource(processGroupResource);
connectorResource.httpServletRequest = httpServletRequest;
connectorResource.properties = properties;
connectorResource.uriInfo = uriInfo;
@@ -1140,6 +1148,40 @@ public class TestConnectorResource {
verify(serviceFacade,
never()).getConnectorControllerService(anyString(), anyString(), eq(true));
}
+ @Test
+ public void testGetConnectorProcessGroup() {
+ final ProcessGroupDTO processGroupDto = new ProcessGroupDTO();
+ processGroupDto.setId(PROCESS_GROUP_ID);
+ processGroupDto.setContents(new FlowSnippetDTO());
+
+ final ProcessGroupEntity processGroupEntity = new ProcessGroupEntity();
+ processGroupEntity.setId(PROCESS_GROUP_ID);
+ processGroupEntity.setComponent(processGroupDto);
+ when(serviceFacade.getConnectorProcessGroup(CONNECTOR_ID,
PROCESS_GROUP_ID)).thenReturn(processGroupEntity);
+
when(processGroupResource.populateRemainingProcessGroupEntityContent(processGroupEntity)).thenReturn(processGroupEntity);
+
+ try (Response response =
connectorResource.getConnectorProcessGroup(CONNECTOR_ID, PROCESS_GROUP_ID)) {
+ assertEquals(200, response.getStatus());
+ assertEquals(processGroupEntity, response.getEntity());
+ assertNull(processGroupDto.getContents());
+ }
+
+ verify(serviceFacade).authorizeAccess(any(AuthorizeAccess.class));
+ verify(serviceFacade).getConnectorProcessGroup(CONNECTOR_ID,
PROCESS_GROUP_ID);
+
verify(processGroupResource).populateRemainingProcessGroupEntityContent(processGroupEntity);
+ }
+
+ @Test
+ public void testGetConnectorProcessGroupNotAuthorized() {
+
doThrow(AccessDeniedException.class).when(serviceFacade).authorizeAccess(any(AuthorizeAccess.class));
+
+ assertThrows(AccessDeniedException.class, () ->
+ connectorResource.getConnectorProcessGroup(CONNECTOR_ID,
PROCESS_GROUP_ID));
+
+ verify(serviceFacade).authorizeAccess(any(AuthorizeAccess.class));
+ verify(serviceFacade, never()).getConnectorProcessGroup(anyString(),
anyString());
+ }
+
@Test
public void testGetConnectorControllerServiceState() {
final ComponentStateDTO stateDTO = new ComponentStateDTO();
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorCrudIT.java
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorCrudIT.java
index 44ca9511e93..36b05e070be 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorCrudIT.java
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorCrudIT.java
@@ -266,6 +266,13 @@ public class ConnectorCrudIT extends NiFiSystemIT {
assertConnectorManagedAccessRejected(() ->
getNifiClient().getFlowClient().getProcessGroup(managedProcessGroupId),
"Was able to retrieve connector-managed process group via
FlowClient");
+ final ProcessGroupEntity managedProcessGroup =
getNifiClient().getConnectorClient().getProcessGroup(connector.getId(),
managedProcessGroupId);
+ assertNotNull(managedProcessGroup);
+ assertEquals(managedProcessGroupId, managedProcessGroup.getId());
+ assertNotNull(managedProcessGroup.getComponent());
+ assertNotNull(managedProcessGroup.getComponent().getName());
+ assertNull(managedProcessGroup.getComponent().getContents());
+
final Set<ProcessGroupEntity> childGroups =
connectorFlow.getFlow().getProcessGroups();
assertEquals(1, childGroups.size(), "Expected exactly one child
process group");
@@ -279,6 +286,13 @@ public class ConnectorCrudIT extends NiFiSystemIT {
assertConnectorManagedAccessRejected(() ->
getNifiClient().getFlowClient().getProcessGroup(childGroupId),
"Was able to retrieve child process group of connector-managed
flow via FlowClient");
+
+ final ProcessGroupEntity connectorChildGroup =
getNifiClient().getConnectorClient().getProcessGroup(connector.getId(),
childGroupId);
+ assertNotNull(connectorChildGroup);
+ assertEquals(childGroupId, connectorChildGroup.getId());
+ assertNotNull(connectorChildGroup.getComponent());
+ assertNotNull(connectorChildGroup.getComponent().getName());
+ assertNull(connectorChildGroup.getComponent().getContents());
}
private void assertConnectorManagedAccessRejected(final Callable<?> call,
final String failureMessage) throws IOException {
diff --git
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorTroubleshootingIT.java
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorTroubleshootingIT.java
index 0bc80db4391..5d60a51feb2 100644
---
a/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorTroubleshootingIT.java
+++
b/nifi-system-tests/nifi-system-test-suite/src/test/java/org/apache/nifi/tests/system/connectors/ConnectorTroubleshootingIT.java
@@ -486,6 +486,11 @@ public class ConnectorTroubleshootingIT extends
NiFiSystemIT {
getClientUtil().endTroubleshooting(connectorId);
assertConnectorState(connectorId, ConnectorState.STOPPED);
+ final ProcessGroupEntity connectorScopedChild =
getNifiClient().getConnectorClient().getProcessGroup(connectorId, childGroupId);
+ assertEquals(childGroupId, connectorScopedChild.getId());
+ assertNotNull(connectorScopedChild.getComponent());
+ assertNotNull(connectorScopedChild.getComponent().getName());
+
assertConflictExpected("GET processor", () ->
getNifiClient().getProcessorClient().getProcessor(processorId));
assertConflictExpected("GET connection", () ->
getNifiClient().getConnectionClient().getConnection(connectionId));
assertConflictExpected("GET input port", () ->
getNifiClient().getInputPortClient().getInputPort(inputPortId));
diff --git
a/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/ConnectorClient.java
b/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/ConnectorClient.java
index e1327ca484c..bcf3019d4ee 100644
---
a/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/ConnectorClient.java
+++
b/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/ConnectorClient.java
@@ -28,6 +28,7 @@ import org.apache.nifi.web.api.entity.ControllerServiceEntity;
import org.apache.nifi.web.api.entity.DropRequestEntity;
import org.apache.nifi.web.api.entity.MigrationPayloadEntity;
import org.apache.nifi.web.api.entity.MigrationRequestEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupEntity;
import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
import org.apache.nifi.web.api.entity.StatusHistoryEntity;
@@ -328,6 +329,18 @@ public interface ConnectorClient {
*/
ProcessGroupFlowEntity getFlow(String connectorId, String processGroupId)
throws NiFiClientException, IOException;
+ /**
+ * Gets a process group within a connector's managed flow. Available
regardless of whether
+ * the Connector is in Troubleshooting mode.
+ *
+ * @param connectorId the connector ID
+ * @param processGroupId the process group ID within the connector's
managed flow
+ * @return the process group entity
+ * @throws NiFiClientException if an error occurs during the request
+ * @throws IOException if an I/O error occurs
+ */
+ ProcessGroupEntity getProcessGroup(String connectorId, String
processGroupId) throws NiFiClientException, IOException;
+
/**
* Gets the status for the process group managed by a connector.
*
diff --git
a/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/impl/JerseyConnectorClient.java
b/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/impl/JerseyConnectorClient.java
index 036aa1096d3..db57054154e 100644
---
a/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/impl/JerseyConnectorClient.java
+++
b/nifi-toolkit/nifi-toolkit-client/src/main/java/org/apache/nifi/toolkit/client/impl/JerseyConnectorClient.java
@@ -38,6 +38,7 @@ import org.apache.nifi.web.api.entity.ControllerServiceEntity;
import org.apache.nifi.web.api.entity.DropRequestEntity;
import org.apache.nifi.web.api.entity.MigrationPayloadEntity;
import org.apache.nifi.web.api.entity.MigrationRequestEntity;
+import org.apache.nifi.web.api.entity.ProcessGroupEntity;
import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
import org.apache.nifi.web.api.entity.ProcessGroupStatusEntity;
import org.apache.nifi.web.api.entity.StatusHistoryEntity;
@@ -588,6 +589,25 @@ public class JerseyConnectorClient extends
AbstractJerseyClient implements Conne
});
}
+ @Override
+ public ProcessGroupEntity getProcessGroup(final String connectorId, final
String processGroupId) throws NiFiClientException, IOException {
+ if (StringUtils.isBlank(connectorId)) {
+ throw new IllegalArgumentException("Connector id cannot be null or
blank");
+ }
+ if (StringUtils.isBlank(processGroupId)) {
+ throw new IllegalArgumentException("Process group id cannot be
null or blank");
+ }
+
+ return executeAction("Error retrieving process group for Connector " +
connectorId, () -> {
+ final WebTarget target = connectorTarget
+ .path("/process-groups/{processGroupId}")
+ .resolveTemplate("id", connectorId)
+ .resolveTemplate("processGroupId", processGroupId);
+
+ return getRequestBuilder(target).get(ProcessGroupEntity.class);
+ });
+ }
+
@Override
public ProcessGroupStatusEntity getStatus(final String connectorId, final
boolean recursive) throws NiFiClientException, IOException {
Objects.requireNonNull(connectorId, "Connector ID required");