This is an automated email from the ASF dual-hosted git repository.
mattyb149 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 4fe65f1b81 NIFI-10828 Adding new REST API endpoint for exposing
versioned flow details
4fe65f1b81 is described below
commit 4fe65f1b81659140d773a8484c09ab4d20e115d3
Author: Bence Simon <[email protected]>
AuthorDate: Thu Nov 17 15:42:12 2022 +0100
NIFI-10828 Adding new REST API endpoint for exposing versioned flow details
NIFI-10828 Fixing documentation
Signed-off-by: Matthew Burgess <[email protected]>
This closes #6674
---
.../org/apache/nifi/web/NiFiServiceFacade.java | 11 ++++++
.../apache/nifi/web/StandardNiFiServiceFacade.java | 10 ++++--
.../java/org/apache/nifi/web/api/FlowResource.java | 39 ++++++++++++++++++++++
.../org/apache/nifi/web/dao/FlowRegistryDAO.java | 2 ++
.../nifi/web/dao/impl/StandardFlowRegistryDAO.java | 14 ++++++++
5 files changed, 74 insertions(+), 2 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
index 287b7d9205..b60e8a891a 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/NiFiServiceFacade.java
@@ -2473,6 +2473,17 @@ public interface NiFiServiceFacade {
*/
Set<VersionedFlowEntity> getFlowsForUser(String registryClientId, String
bucketId);
+
+ /**
+ * Returns the details of a versioned flow from a given bucket of a given
registry.
+ *
+ * @param registryClientId registry client id
+ * @param bucketId bucket id
+ * @param flowId flow id
+ * @return the flow details
+ */
+ VersionedFlowEntity getFlowForUser(String registryClientId, String
bucketId, String flowId);
+
/**
* Gets the versions of the specified registry, bucket, and flow for the
current user.
*
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
index 30c03dc06e..ea080ebe63 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/StandardNiFiServiceFacade.java
@@ -3211,14 +3211,20 @@ public class StandardNiFiServiceFacade implements
NiFiServiceFacade {
}
@Override
- public Set<VersionedFlowEntity> getFlowsForUser(String registryClientId,
String bucketId) {
+ public Set<VersionedFlowEntity> getFlowsForUser(final String
registryClientId, final String bucketId) {
return
flowRegistryDAO.getFlowsForUser(FlowRegistryClientContextFactory.getContextForUser(NiFiUserUtils.getNiFiUser()),
registryClientId, bucketId).stream()
.map(rf -> createVersionedFlowEntity(registryClientId, rf))
.collect(Collectors.toSet());
}
@Override
- public Set<VersionedFlowSnapshotMetadataEntity>
getFlowVersionsForUser(String registryClientId, String bucketId, String flowId)
{
+ public VersionedFlowEntity getFlowForUser(final String registryClientId,
final String bucketId, final String flowId) {
+ final RegisteredFlow flow =
flowRegistryDAO.getFlowForUser(FlowRegistryClientContextFactory.getContextForUser(NiFiUserUtils.getNiFiUser()),
registryClientId, bucketId, flowId);
+ return createVersionedFlowEntity(registryClientId, flow);
+ }
+
+ @Override
+ public Set<VersionedFlowSnapshotMetadataEntity>
getFlowVersionsForUser(final String registryClientId, final String bucketId,
final String flowId) {
return
flowRegistryDAO.getFlowVersionsForUser(FlowRegistryClientContextFactory.getContextForUser(NiFiUserUtils.getNiFiUser()),
registryClientId, bucketId, flowId).stream()
.map(md ->
createVersionedFlowSnapshotMetadataEntity(registryClientId, md))
.collect(Collectors.toSet());
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
index befaee69a2..b297192d3a 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/FlowResource.java
@@ -1756,6 +1756,45 @@ public class FlowResource extends ApplicationResource {
return flowEntity.getVersionedFlow() == null ? "" :
flowEntity.getVersionedFlow().getFlowName();
}
+ @GET
+ @Consumes(MediaType.WILDCARD)
+ @Produces(MediaType.APPLICATION_JSON)
+
@Path("registries/{registry-id}/buckets/{bucket-id}/flows/{flow-id}/details")
+ @ApiOperation(value = "Gets the details of a flow from the specified
registry and bucket for the specified flow for the current user",
+ response = VersionedFlowEntity.class,
+ authorizations = {
+ @Authorization(value = "Read - /flow")
+ })
+ @ApiResponses(value = {
+ @ApiResponse(code = 400, message = "NiFi was unable to complete
the request because it was invalid. The request should not be retried without
modification."),
+ @ApiResponse(code = 401, message = "Client could not be
authenticated."),
+ @ApiResponse(code = 403, message = "Client is not authorized to
make this request."),
+ @ApiResponse(code = 404, message = "The specified resource could
not be found."),
+ @ApiResponse(code = 409, message = "The request was valid but NiFi
was not in the appropriate state to process it. Retrying the same request later
may be successful.")
+ })
+ public Response getDetails(
+ @ApiParam(
+ value = "The registry client id.",
+ required = true
+ )
+ @PathParam("registry-id") String registryId,
+ @ApiParam(
+ value = "The bucket id.",
+ required = true
+ )
+ @PathParam("bucket-id") String bucketId,
+ @ApiParam(
+ value = "The flow id.",
+ required = true
+ )
+ @PathParam("flow-id") String flowId) {
+
+ authorizeFlow();
+
+ final VersionedFlowEntity flowDetails =
serviceFacade.getFlowForUser(registryId, bucketId, flowId);
+ return generateOkResponse(flowDetails).build();
+ }
+
@GET
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.APPLICATION_JSON)
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/FlowRegistryDAO.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/FlowRegistryDAO.java
index 0e2accd1ca..f6195d4f01 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/FlowRegistryDAO.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/FlowRegistryDAO.java
@@ -42,6 +42,8 @@ public interface FlowRegistryDAO {
Set<RegisteredFlow> getFlowsForUser(FlowRegistryClientUserContext context,
String registryId, String bucketId);
+ RegisteredFlow getFlowForUser(FlowRegistryClientUserContext context,
String registryId, String bucketId, String flowId);
+
Set<RegisteredFlowSnapshotMetadata>
getFlowVersionsForUser(FlowRegistryClientUserContext context, String
registryId, String bucketId, String flowId);
FlowRegistryClientNode removeFlowRegistry(String registryId);
diff --git
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
index 5551c267a8..3e30e31ca0 100644
---
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
+++
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/dao/impl/StandardFlowRegistryDAO.java
@@ -140,6 +140,20 @@ public class StandardFlowRegistryDAO extends ComponentDAO
implements FlowRegistr
}
}
+ @Override
+ public RegisteredFlow getFlowForUser(final FlowRegistryClientUserContext
context, final String registryId, final String bucketId, final String flowId) {
+ try {
+ final FlowRegistryClientNode flowRegistry =
flowController.getFlowManager().getFlowRegistryClient(registryId);
+ if (flowRegistry == null) {
+ throw new IllegalArgumentException("The specified registry id
is unknown to this NiFi.");
+ }
+
+ return flowRegistry.getFlow(context, bucketId, flowId);
+ } catch (final IOException | FlowRegistryException ioe) {
+ throw new NiFiCoreException("Unable to obtain listing of flows for
bucket with ID " + bucketId + ": " + ioe, ioe);
+ }
+ }
+
@Override
public Set<RegisteredFlowSnapshotMetadata> getFlowVersionsForUser(final
FlowRegistryClientUserContext context, final String registryId, final String
bucketId, final String flowId) {
try {