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 {

Reply via email to