mtien-apache commented on a change in pull request #319:
URL: https://github.com/apache/nifi-registry/pull/319#discussion_r617188670



##########
File path: 
nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/BucketFlowResource.java
##########
@@ -291,6 +303,129 @@ public Response createFlowVersion(
         return 
Response.status(Response.Status.OK).entity(createdSnapshot).build();
     }
 
+    @POST
+    @Path("{flowId}/versions/import")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Produces(MediaType.APPLICATION_JSON)
+    @ApiOperation(
+            value = "Upload flow version",
+            notes = "Uploads the next version of a flow. The version number of 
the object being created must be the " +
+                    "next available version integer. Flow versions are 
immutable after they are created.",
+            response = VersionedFlowSnapshot.class,
+            extensions = {
+                    @Extension(name = "access-policy", properties = {
+                            @ExtensionProperty(name = "action", value = 
"write"),
+                            @ExtensionProperty(name = "resource", value = 
"/buckets/{bucketId}") })
+            }
+    )
+    @ApiResponses({
+            @ApiResponse(code = 400, message = HttpStatusMessages.MESSAGE_400),
+            @ApiResponse(code = 401, message = HttpStatusMessages.MESSAGE_401),
+            @ApiResponse(code = 403, message = HttpStatusMessages.MESSAGE_403),
+            @ApiResponse(code = 404, message = HttpStatusMessages.MESSAGE_404),
+            @ApiResponse(code = 409, message = HttpStatusMessages.MESSAGE_409) 
})
+    public Response importVersionedFlow(
+            @PathParam("bucketId")
+            @ApiParam("The bucket identifier")
+            final String bucketId,
+            @PathParam("flowId")
+            @ApiParam(value = "The flow identifier")
+            final String flowId,
+            @FormDataParam("file") final InputStream in,
+            @FormDataParam("comments") final String comments) {
+
+        if (StringUtils.isBlank(bucketId)) {
+            throw new IllegalArgumentException("The bucket identifier is 
required.");
+        }
+
+        if (StringUtils.isBlank(flowId)) {
+            throw new IllegalArgumentException("The flow identifier is 
required.");
+        }
+
+        // deserialize InputStream to a VersionedFlowSnapshot
+        VersionedFlowSnapshot versionedFlowSnapshot;
+
+        versionedFlowSnapshot = deserializeVersionedFlowSnapshot(in);
+
+        // clear or set the necessary snapShotMetadata
+        if (versionedFlowSnapshot.getSnapshotMetadata() != null) {
+            
versionedFlowSnapshot.getSnapshotMetadata().setBucketIdentifier(null);
+            
versionedFlowSnapshot.getSnapshotMetadata().setFlowIdentifier(null);
+            versionedFlowSnapshot.getSnapshotMetadata().setLink(null);
+            versionedFlowSnapshot.getSnapshotMetadata().setVersion(-1);
+            versionedFlowSnapshot.getSnapshotMetadata().setVersion(-1);
+            // if there are new comments, then set it
+            // otherwise, keep the original comments
+            if (!StringUtils.isBlank(comments)) {
+                
versionedFlowSnapshot.getSnapshotMetadata().setComments(comments);
+            }
+        }
+
+        return createFlowVersion(bucketId, flowId, versionedFlowSnapshot);
+    }
+
+    @POST
+    @Path("import")
+    @Consumes(MediaType.MULTIPART_FORM_DATA)
+    @Produces(MediaType.APPLICATION_JSON)
+    @ApiOperation(
+            value = "Create flow",
+            notes = "Creates a flow in the given bucket. The flow id is 
created by the server and populated in the returned entity.",
+            response = VersionedFlow.class,
+            extensions = {
+                    @Extension(name = "access-policy", properties = {
+                            @ExtensionProperty(name = "action", value = 
"write"),
+                            @ExtensionProperty(name = "resource", value = 
"/buckets/{bucketId}")})
+            }
+    )
+    @ApiResponses({
+            @ApiResponse(code = 400, message = HttpStatusMessages.MESSAGE_400),
+            @ApiResponse(code = 401, message = HttpStatusMessages.MESSAGE_401),
+            @ApiResponse(code = 403, message = HttpStatusMessages.MESSAGE_403),
+            @ApiResponse(code = 404, message = HttpStatusMessages.MESSAGE_404),
+            @ApiResponse(code = 409, message = 
HttpStatusMessages.MESSAGE_409)})
+    public Response importFlow(
+            @PathParam("bucketId")
+            @ApiParam("The bucket identifier") final String bucketId,
+            @FormDataParam("file") final InputStream in,
+            @FormDataParam("name") final String name,
+            @FormDataParam("description") final String description) {
+
+        if (StringUtils.isBlank(bucketId)) {
+            throw new IllegalArgumentException("The bucket identifier is 
required.");
+        }
+
+        if (StringUtils.isBlank(name)) {
+            throw new IllegalArgumentException("The flow name is required.");
+        }
+
+        // create VersionedFlow
+        final VersionedFlow versionedFlow = new VersionedFlow();
+
+        versionedFlow.setName(name);
+        versionedFlow.setRevision(new RevisionInfo(null, 0L));
+        if (!StringUtils.isBlank(description)) {
+            versionedFlow.setDescription(description);
+        }
+
+        final VersionedFlow createdFlow = 
createAndPublishVersionedFlow(bucketId, versionedFlow);
+
+        // deserialize InputStream and create new VersionedFlowSnapshot
+        final VersionedFlowSnapshot versionedFlowSnapshot = 
deserializeVersionedFlowSnapshot(in);
+
+        setSnaphotMetadataIfMissing(bucketId, createdFlow.getIdentifier(), 
versionedFlowSnapshot);
+
+        // set remaining snapshot metadata
+        final String userIdentity = NiFiUserUtils.getNiFiUserIdentity();
+        versionedFlowSnapshot.getSnapshotMetadata().setAuthor(userIdentity);
+        versionedFlowSnapshot.getSnapshotMetadata().setVersion(-1);

Review comment:
       Changed to use a static variable.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to