You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/02/28 16:25:00 UTC

[06/20] nifi git commit: NIFI-4839 - Fixing completer unit test - Added pg-get-version, pg-get-all-versions, pg-change-version - Added info the Context to know if we are in interactive mode

NIFI-4839 - Fixing completer unit test
- Added pg-get-version, pg-get-all-versions, pg-change-version
- Added info the Context to know if we are in interactive mode


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/9c3594de
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/9c3594de
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/9c3594de

Branch: refs/heads/master
Commit: 9c3594ded62101cb6e4e81bbc69c3a783e887bbb
Parents: 8b49013
Author: Bryan Bende <bb...@apache.org>
Authored: Mon Feb 5 11:48:33 2018 -0500
Committer: Pierre Villard <pi...@gmail.com>
Committed: Wed Feb 28 17:22:52 2018 +0100

----------------------------------------------------------------------
 .../org/apache/nifi/toolkit/cli/CLIMain.java    |   3 +-
 .../apache/nifi/toolkit/cli/api/Context.java    |   2 +
 .../cli/impl/client/NiFiClientFactory.java      |  16 +++
 .../cli/impl/client/nifi/FlowClient.java        |  16 ++-
 .../cli/impl/client/nifi/NiFiClient.java        |   7 +
 .../cli/impl/client/nifi/VersionsClient.java    |  35 +++++
 .../impl/client/nifi/impl/JerseyFlowClient.java |  28 ++++
 .../impl/client/nifi/impl/JerseyNiFiClient.java |  18 +++
 .../client/nifi/impl/JerseyVersionsClient.java  | 123 +++++++++++++++++
 .../cli/impl/command/nifi/NiFiCommandGroup.java |  10 +-
 .../impl/command/nifi/pg/PGChangeVersion.java   | 131 +++++++++++++++++++
 .../impl/command/nifi/pg/PGGetAllVersions.java  |  75 +++++++++++
 .../cli/impl/command/nifi/pg/PGGetVersion.java  |  56 ++++++++
 .../registry/NiFiRegistryCommandGroup.java      |   4 +-
 .../registry/flow/ImportFlowVersion.java        |   2 +-
 .../cli/impl/context/StandardContext.java       |  13 ++
 .../nifi/toolkit/cli/TestCLICompleter.java      |  11 +-
 17 files changed, 539 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/CLIMain.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/CLIMain.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/CLIMain.java
index 8d412d8..643fe03 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/CLIMain.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/CLIMain.java
@@ -74,7 +74,7 @@ public class CLIMain {
     }
 
     /**
-     * Runs the interactive CLIE.
+     * Runs the interactive CLI.
      *
      * @throws IOException if an error occurs
      */
@@ -191,6 +191,7 @@ public class CLIMain {
                 .session(session)
                 .nifiClientFactory(niFiClientFactory)
                 .nifiRegistryClientFactory(nifiRegClientFactory)
+                .interactive(isInteractive)
                 .build();
     }
 

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/api/Context.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/api/Context.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/api/Context.java
index 1f29ad3..3053f78 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/api/Context.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/api/Context.java
@@ -34,4 +34,6 @@ public interface Context {
 
     PrintStream getOutput();
 
+    boolean isInteractive();
+
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/NiFiClientFactory.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/NiFiClientFactory.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/NiFiClientFactory.java
index a45868c..c94eb9b 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/NiFiClientFactory.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/NiFiClientFactory.java
@@ -25,6 +25,7 @@ import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientConfig;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.VersionsClient;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.impl.JerseyNiFiClient;
 import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
 
@@ -165,6 +166,21 @@ public class NiFiClientFactory implements ClientFactory<NiFiClient> {
         }
 
         @Override
+        public VersionsClient getVersionsClient() {
+            return wrappedClient.getVersionsClientForProxiedEntities(proxiedEntity);
+        }
+
+        @Override
+        public VersionsClient getVersionsClientForProxiedEntities(String... proxiedEntity) {
+            return wrappedClient.getVersionsClientForProxiedEntities(proxiedEntity);
+        }
+
+        @Override
+        public VersionsClient getVersionsClientForToken(String token) {
+            return wrappedClient.getVersionsClientForToken(token);
+        }
+
+        @Override
         public void close() throws IOException {
             wrappedClient.close();
         }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/FlowClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/FlowClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/FlowClient.java
index 79596e7..c8cbbde 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/FlowClient.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/FlowClient.java
@@ -19,6 +19,7 @@ package org.apache.nifi.toolkit.cli.impl.client.nifi;
 import org.apache.nifi.web.api.entity.CurrentUserEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
 import org.apache.nifi.web.api.entity.ScheduleComponentsEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowSnapshotMetadataSetEntity;
 
 import java.io.IOException;
 
@@ -28,6 +29,11 @@ import java.io.IOException;
 public interface FlowClient {
 
     /**
+     * @return the entity representing the current user accessing the NiFi instance
+     */
+    CurrentUserEntity getCurrentUser() throws NiFiClientException, IOException;
+
+    /**
      * @return the id of the root process group
      */
     String getRootGroupId() throws NiFiClientException, IOException;
@@ -53,8 +59,14 @@ public interface FlowClient {
             String processGroupId, ScheduleComponentsEntity scheduleComponentsEntity) throws NiFiClientException, IOException;
 
     /**
-     * @return the entity representing the current user accessing the NiFi instance
+     * Gets the possible versions for the given flow in the given bucket in the given registry.
+     *
+     * @param registryId the id of the registry client
+     * @param bucketId the bucket id
+     * @param flowId the flow id
+     * @return the set of snapshot metadata entities
      */
-    CurrentUserEntity getCurrentUser() throws NiFiClientException, IOException;
+    VersionedFlowSnapshotMetadataSetEntity getVersions(String registryId, String bucketId, String flowId)
+            throws NiFiClientException, IOException;
 
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/NiFiClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/NiFiClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/NiFiClient.java
index b2e65b7..46da300 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/NiFiClient.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/NiFiClient.java
@@ -64,6 +64,13 @@ public interface NiFiClient extends Closeable {
 
     ProcessGroupClient getProcessGroupClientForToken(String token);
 
+    // ----- VersionsClient -----
+
+    VersionsClient getVersionsClient();
+
+    VersionsClient getVersionsClientForProxiedEntities(String ... proxiedEntity);
+
+    VersionsClient getVersionsClientForToken(String token);
 
     /**
      * The builder interface that implementations should provide for obtaining the client.

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/VersionsClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/VersionsClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/VersionsClient.java
new file mode 100644
index 0000000..61e782c
--- /dev/null
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/VersionsClient.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.toolkit.cli.impl.client.nifi;
+
+import org.apache.nifi.web.api.entity.VersionControlInformationEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowUpdateRequestEntity;
+
+import java.io.IOException;
+
+public interface VersionsClient {
+
+    VersionControlInformationEntity getVersionControlInfo(String processGroupId) throws IOException, NiFiClientException;
+
+    VersionedFlowUpdateRequestEntity updateVersionControlInfo(String processGroupId, VersionControlInformationEntity entity)
+            throws IOException, NiFiClientException;
+
+    VersionedFlowUpdateRequestEntity getUpdateRequest(String updateRequestId) throws IOException, NiFiClientException;
+
+    VersionedFlowUpdateRequestEntity deleteUpdateRequest(String updateRequestId) throws IOException, NiFiClientException;
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyFlowClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyFlowClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyFlowClient.java
index 5af34be..bfbad0c 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyFlowClient.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyFlowClient.java
@@ -22,6 +22,7 @@ import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
 import org.apache.nifi.web.api.entity.CurrentUserEntity;
 import org.apache.nifi.web.api.entity.ProcessGroupFlowEntity;
 import org.apache.nifi.web.api.entity.ScheduleComponentsEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowSnapshotMetadataSetEntity;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
@@ -102,4 +103,31 @@ public class JerseyFlowClient extends AbstractJerseyClient implements FlowClient
                     ScheduleComponentsEntity.class);
         });
     }
+
+    @Override
+    public VersionedFlowSnapshotMetadataSetEntity getVersions(final String registryId, final String bucketId, final String flowId)
+            throws NiFiClientException, IOException {
+
+        if (StringUtils.isBlank(registryId)) {
+            throw new IllegalArgumentException("Registry id cannot be null");
+        }
+
+        if (StringUtils.isBlank(bucketId)) {
+            throw new IllegalArgumentException("Bucket id cannot be null");
+        }
+
+        if (StringUtils.isBlank(flowId)) {
+            throw new IllegalArgumentException("Flow id cannot be null");
+        }
+
+        return executeAction("Error retrieving versions", () -> {
+            final WebTarget target = flowTarget
+                    .path("registries/{registry-id}/buckets/{bucket-id}/flows/{flow-id}/versions")
+                    .resolveTemplate("registry-id", registryId)
+                    .resolveTemplate("bucket-id", bucketId)
+                    .resolveTemplate("flow-id", flowId);
+
+            return getRequestBuilder(target).get(VersionedFlowSnapshotMetadataSetEntity.class);
+        });
+    }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyNiFiClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyNiFiClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyNiFiClient.java
index 091f5db..eeb0d14 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyNiFiClient.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyNiFiClient.java
@@ -27,6 +27,7 @@ import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientConfig;
 import org.apache.nifi.toolkit.cli.impl.client.nifi.ProcessGroupClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.VersionsClient;
 import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.client.ClientProperties;
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
@@ -160,6 +161,23 @@ public class JerseyNiFiClient implements NiFiClient {
     }
 
     @Override
+    public VersionsClient getVersionsClient() {
+        return new JerseyVersionsClient(baseTarget);
+    }
+
+    @Override
+    public VersionsClient getVersionsClientForProxiedEntities(String... proxiedEntity) {
+        final Map<String,String> headers = getHeaders(proxiedEntity);
+        return new JerseyVersionsClient(baseTarget, headers);
+    }
+
+    @Override
+    public VersionsClient getVersionsClientForToken(String base64token) {
+        final Map<String,String> headers = getHeadersWithToken(base64token);
+        return new JerseyVersionsClient(baseTarget, headers);
+    }
+
+    @Override
     public void close() throws IOException {
         if (this.client != null) {
             try {

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyVersionsClient.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyVersionsClient.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyVersionsClient.java
new file mode 100644
index 0000000..157a649
--- /dev/null
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/client/nifi/impl/JerseyVersionsClient.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.toolkit.cli.impl.client.nifi.impl;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.VersionsClient;
+import org.apache.nifi.web.api.entity.VersionControlInformationEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowUpdateRequestEntity;
+
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+
+/**
+ * Jersey implementation of VersionsClient.
+ */
+public class JerseyVersionsClient extends AbstractJerseyClient implements VersionsClient {
+
+    private final WebTarget versionsTarget;
+
+    public JerseyVersionsClient(final WebTarget baseTarget) {
+        this(baseTarget, Collections.emptyMap());
+    }
+
+    public JerseyVersionsClient(final WebTarget baseTarget, final Map<String,String> headers) {
+        super(headers);
+        this.versionsTarget = baseTarget.path("/versions");
+    }
+
+    // GET /versions/process-groups/id
+
+    @Override
+    public VersionControlInformationEntity getVersionControlInfo(final String processGroupId) throws IOException, NiFiClientException {
+        if (StringUtils.isBlank(processGroupId)) {
+            throw new IllegalArgumentException("Process group id cannot be null or blank");
+        }
+
+        return executeAction("Error getting version control info", () -> {
+            final WebTarget target = versionsTarget
+                    .path("process-groups/{id}")
+                    .resolveTemplate("id", processGroupId);
+
+            return getRequestBuilder(target).get(VersionControlInformationEntity.class);
+        });
+    }
+
+    // POST /versions/update-requests/process-groups/id
+
+    @Override
+    public VersionedFlowUpdateRequestEntity updateVersionControlInfo(final String processGroupId, final VersionControlInformationEntity entity)
+            throws IOException, NiFiClientException {
+        if (StringUtils.isBlank(processGroupId)) {
+            throw new IllegalArgumentException("Process group id cannot be null or blank");
+        }
+
+        if (entity == null) {
+            throw new IllegalArgumentException("Version control information entity cannot be null");
+        }
+
+        return executeAction("Error updating version control information", () -> {
+            final WebTarget target = versionsTarget
+                    .path("update-requests/process-groups/{id}")
+                    .resolveTemplate("id", processGroupId);
+
+            return getRequestBuilder(target).post(
+                    Entity.entity(entity, MediaType.APPLICATION_JSON_TYPE),
+                    VersionedFlowUpdateRequestEntity.class
+            );
+        });
+    }
+
+    // GET /versions/update-requests/id
+
+    @Override
+    public VersionedFlowUpdateRequestEntity getUpdateRequest(final String updateRequestId) throws IOException, NiFiClientException {
+        if (StringUtils.isBlank(updateRequestId)) {
+            throw new IllegalArgumentException("Update request id cannot be null or blank");
+        }
+
+        return executeAction("Error getting update request", () -> {
+            final WebTarget target = versionsTarget
+                    .path("update-requests/{id}")
+                    .resolveTemplate("id", updateRequestId);
+
+            return getRequestBuilder(target).get(VersionedFlowUpdateRequestEntity.class);
+        });
+    }
+
+    // DELETE /versions/update-requests/id
+
+    @Override
+    public VersionedFlowUpdateRequestEntity deleteUpdateRequest(final String updateRequestId) throws IOException, NiFiClientException {
+        if (StringUtils.isBlank(updateRequestId)) {
+            throw new IllegalArgumentException("Update request id cannot be null or blank");
+        }
+
+        return executeAction("Error deleting update request", () -> {
+            final WebTarget target = versionsTarget
+                    .path("update-requests/{id}")
+                    .resolveTemplate("id", updateRequestId);
+
+            return getRequestBuilder(target).delete(VersionedFlowUpdateRequestEntity.class);
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/NiFiCommandGroup.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/NiFiCommandGroup.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/NiFiCommandGroup.java
index ab9f011..0c6dd8e 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/NiFiCommandGroup.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/NiFiCommandGroup.java
@@ -20,7 +20,10 @@ import org.apache.nifi.toolkit.cli.api.Command;
 import org.apache.nifi.toolkit.cli.impl.command.AbstractCommandGroup;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.flow.CurrentUser;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.flow.GetRootId;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGChangeVersion;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetAllVersions;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetVars;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGGetVersion;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGImport;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGStart;
 import org.apache.nifi.toolkit.cli.impl.command.nifi.pg.PGStop;
@@ -36,8 +39,10 @@ import java.util.List;
  */
 public class NiFiCommandGroup extends AbstractCommandGroup {
 
+    public static final String NIFI_COMMAND_GROUP = "nifi";
+
     public NiFiCommandGroup() {
-        super("nifi");
+        super(NIFI_COMMAND_GROUP);
     }
 
     @Override
@@ -52,6 +57,9 @@ public class NiFiCommandGroup extends AbstractCommandGroup {
         commands.add(new PGStart());
         commands.add(new PGStop());
         commands.add(new PGGetVars());
+        commands.add(new PGGetVersion());
+        commands.add(new PGChangeVersion());
+        commands.add(new PGGetAllVersions());
         return new ArrayList<>(commands);
     }
 }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
new file mode 100644
index 0000000..ddaaa26
--- /dev/null
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGChangeVersion.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.toolkit.cli.impl.command.nifi.pg;
+
+import org.apache.commons.cli.MissingOptionException;
+import org.apache.nifi.toolkit.cli.api.CommandException;
+import org.apache.nifi.toolkit.cli.api.Context;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.VersionsClient;
+import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
+import org.apache.nifi.web.api.dto.VersionControlInformationDTO;
+import org.apache.nifi.web.api.entity.VersionControlInformationEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowSnapshotMetadataEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowSnapshotMetadataSetEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowUpdateRequestEntity;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Command to change the version of a version controlled process group.
+ */
+public class PGChangeVersion extends AbstractNiFiCommand {
+
+    public PGChangeVersion() {
+        super("pg-change-version");
+    }
+
+    @Override
+    protected void doInitialize(final Context context) {
+        addOption(CommandOption.PG_ID.createOption());
+        addOption(CommandOption.FLOW_VERSION.createOption());
+    }
+
+    @Override
+    protected void doExecute(final NiFiClient client, final Properties properties)
+            throws NiFiClientException, IOException, MissingOptionException, CommandException {
+        final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
+
+        final VersionsClient versionsClient = client.getVersionsClient();
+        final VersionControlInformationEntity existingVersionControlInfo = versionsClient.getVersionControlInfo(pgId);
+        final VersionControlInformationDTO existingVersionControlDTO = existingVersionControlInfo.getVersionControlInformation();
+
+        if (existingVersionControlDTO == null) {
+            throw new NiFiClientException("Process group is not under version control");
+        }
+
+        // start with the version specified in the arguments
+        Integer newVersion = getIntArg(properties, CommandOption.FLOW_VERSION);
+
+        // if no version was specified, automatically determine the latest and change to that
+        if (newVersion == null) {
+            newVersion = getLatestVersion(client, existingVersionControlDTO);
+
+            if (newVersion.intValue() == existingVersionControlDTO.getVersion().intValue()) {
+                throw new NiFiClientException("Process group already at latest version");
+            }
+        }
+
+        // update the version in the existing DTO to the new version so we can submit it back
+        existingVersionControlDTO.setVersion(newVersion);
+
+        final VersionedFlowUpdateRequestEntity initialUpdateRequest = versionsClient.updateVersionControlInfo(pgId, existingVersionControlInfo);
+
+        final String updateRequestId = initialUpdateRequest.getRequest().getRequestId();
+        try {
+            boolean completed = false;
+            for (int i = 0; i < 30; i++) {
+                final VersionedFlowUpdateRequestEntity updateRequest = versionsClient.getUpdateRequest(updateRequestId);
+                if (updateRequest != null && updateRequest.getRequest().isComplete()) {
+                    completed = true;
+                    break;
+                } else {
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+            if (!completed) {
+                throw new NiFiClientException("Unable to change version of process group, cancelling request");
+            }
+
+        } finally {
+            versionsClient.deleteUpdateRequest(updateRequestId);
+        }
+
+    }
+
+    private int getLatestVersion(final NiFiClient client, final VersionControlInformationDTO existingVersionControlDTO)
+            throws NiFiClientException, IOException {
+        final FlowClient flowClient = client.getFlowClient();
+
+        final String registryId = existingVersionControlDTO.getRegistryId();
+        final String bucketId = existingVersionControlDTO.getBucketId();
+        final String flowId = existingVersionControlDTO.getFlowId();
+
+        final VersionedFlowSnapshotMetadataSetEntity versions = flowClient.getVersions(registryId, bucketId, flowId);
+        if (versions.getVersionedFlowSnapshotMetadataSet() == null || versions.getVersionedFlowSnapshotMetadataSet().isEmpty()) {
+            throw new NiFiClientException("No versions available");
+        }
+
+        int latestVersion = 1;
+        for (VersionedFlowSnapshotMetadataEntity version : versions.getVersionedFlowSnapshotMetadataSet()) {
+            if (version.getVersionedFlowSnapshotMetadata().getVersion() > latestVersion) {
+                latestVersion = version.getVersionedFlowSnapshotMetadata().getVersion();
+            }
+        }
+        return latestVersion;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetAllVersions.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetAllVersions.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetAllVersions.java
new file mode 100644
index 0000000..c9895f0
--- /dev/null
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetAllVersions.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.toolkit.cli.impl.command.nifi.pg;
+
+import org.apache.commons.cli.MissingOptionException;
+import org.apache.nifi.toolkit.cli.api.CommandException;
+import org.apache.nifi.toolkit.cli.api.Context;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.FlowClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.VersionsClient;
+import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
+import org.apache.nifi.web.api.dto.VersionControlInformationDTO;
+import org.apache.nifi.web.api.entity.VersionControlInformationEntity;
+import org.apache.nifi.web.api.entity.VersionedFlowSnapshotMetadataSetEntity;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Command to get all the available versions for a given process group that is under version control.
+ */
+public class PGGetAllVersions extends AbstractNiFiCommand {
+
+    public PGGetAllVersions() {
+        super("pg-get-all-versions");
+    }
+
+    @Override
+    protected void doInitialize(final Context context) {
+        addOption(CommandOption.PG_ID.createOption());
+    }
+
+    @Override
+    protected void doExecute(final NiFiClient client, final Properties properties)
+            throws NiFiClientException, IOException, MissingOptionException, CommandException {
+        final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
+
+        final VersionsClient versionsClient = client.getVersionsClient();
+        final VersionControlInformationEntity existingVersionControlInfo = versionsClient.getVersionControlInfo(pgId);
+        final VersionControlInformationDTO existingVersionControlDTO = existingVersionControlInfo.getVersionControlInformation();
+
+        if (existingVersionControlDTO == null) {
+            throw new NiFiClientException("Process group is not under version control");
+        }
+
+        final String registryId = existingVersionControlDTO.getRegistryId();
+        final String bucketId = existingVersionControlDTO.getBucketId();
+        final String flowId = existingVersionControlDTO.getFlowId();
+
+        final FlowClient flowClient = client.getFlowClient();
+        final VersionedFlowSnapshotMetadataSetEntity versions = flowClient.getVersions(registryId, bucketId, flowId);
+
+        if (versions.getVersionedFlowSnapshotMetadataSet() == null || versions.getVersionedFlowSnapshotMetadataSet().isEmpty()) {
+            throw new NiFiClientException("No versions available");
+        }
+
+        writeResult(properties, versions);
+    }
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetVersion.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetVersion.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetVersion.java
new file mode 100644
index 0000000..d180d52
--- /dev/null
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/nifi/pg/PGGetVersion.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.nifi.toolkit.cli.impl.command.nifi.pg;
+
+import org.apache.commons.cli.MissingOptionException;
+import org.apache.nifi.toolkit.cli.api.CommandException;
+import org.apache.nifi.toolkit.cli.api.Context;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClient;
+import org.apache.nifi.toolkit.cli.impl.client.nifi.NiFiClientException;
+import org.apache.nifi.toolkit.cli.impl.command.CommandOption;
+import org.apache.nifi.toolkit.cli.impl.command.nifi.AbstractNiFiCommand;
+import org.apache.nifi.web.api.entity.VersionControlInformationEntity;
+
+import java.io.IOException;
+import java.util.Properties;
+
+/**
+ * Command to get the version control info for a given process group.
+ */
+public class PGGetVersion extends AbstractNiFiCommand {
+
+    public PGGetVersion() {
+        super("pg-get-version");
+    }
+
+    @Override
+    protected void doInitialize(final Context context) {
+        addOption(CommandOption.PG_ID.createOption());
+    }
+
+    @Override
+    protected void doExecute(final NiFiClient client, final Properties properties)
+            throws NiFiClientException, IOException, MissingOptionException, CommandException {
+        final String pgId = getRequiredArg(properties, CommandOption.PG_ID);
+        final VersionControlInformationEntity entity = client.getVersionsClient().getVersionControlInfo(pgId);
+        if (entity.getVersionControlInformation() == null) {
+            throw new NiFiClientException("Process group is not under version control");
+        }
+        writeResult(properties, entity);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/NiFiRegistryCommandGroup.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/NiFiRegistryCommandGroup.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/NiFiRegistryCommandGroup.java
index 12d2d92..12a75d8 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/NiFiRegistryCommandGroup.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/NiFiRegistryCommandGroup.java
@@ -35,8 +35,10 @@ import java.util.List;
  */
 public class NiFiRegistryCommandGroup extends AbstractCommandGroup {
 
+    public static String REGISTRY_COMMAND_GROUP = "registry";
+
     public NiFiRegistryCommandGroup() {
-        super("registry");
+        super(REGISTRY_COMMAND_GROUP);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/flow/ImportFlowVersion.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/flow/ImportFlowVersion.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/flow/ImportFlowVersion.java
index 19c961e..3aab6e9 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/flow/ImportFlowVersion.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/command/registry/flow/ImportFlowVersion.java
@@ -64,7 +64,7 @@ public class ImportFlowVersion extends AbstractNiFiRegistryCommand {
 
             // determine the bucket for the provided flow id
             final String bucketId = getBucketId(client, flowId);
-            
+
             // determine the latest existing version in the destination system
             Integer version;
             try {

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/context/StandardContext.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/context/StandardContext.java b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/context/StandardContext.java
index 09f63dd..e2b1364 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/context/StandardContext.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/main/java/org/apache/nifi/toolkit/cli/impl/context/StandardContext.java
@@ -34,12 +34,14 @@ public class StandardContext implements Context {
     private final ClientFactory<NiFiRegistryClient> niFiRegistryClientFactory;
     private final Session session;
     private final PrintStream output;
+    private final boolean isInteractive;
 
     private StandardContext(final Builder builder) {
         this.niFiClientFactory = builder.niFiClientFactory;
         this.niFiRegistryClientFactory = builder.niFiRegistryClientFactory;
         this.session = builder.session;
         this.output = builder.output;
+        this.isInteractive = builder.isInteractive;
 
         Validate.notNull(this.niFiClientFactory);
         Validate.notNull(this.niFiRegistryClientFactory);
@@ -67,11 +69,17 @@ public class StandardContext implements Context {
         return output;
     }
 
+    @Override
+    public boolean isInteractive() {
+        return isInteractive;
+    }
+
     public static class Builder {
         private ClientFactory<NiFiClient> niFiClientFactory;
         private ClientFactory<NiFiRegistryClient> niFiRegistryClientFactory;
         private Session session;
         private PrintStream output;
+        private boolean isInteractive;
 
         public Builder nifiClientFactory(final ClientFactory<NiFiClient> niFiClientFactory) {
             this.niFiClientFactory = niFiClientFactory;
@@ -93,6 +101,11 @@ public class StandardContext implements Context {
             return this;
         }
 
+        public Builder interactive(final boolean isInteractive) {
+            this.isInteractive = isInteractive;
+            return this;
+        }
+
         public StandardContext build() {
             return new StandardContext(this);
         }

http://git-wip-us.apache.org/repos/asf/nifi/blob/9c3594de/nifi-toolkit/nifi-toolkit-cli/src/test/java/org/apache/nifi/toolkit/cli/TestCLICompleter.java
----------------------------------------------------------------------
diff --git a/nifi-toolkit/nifi-toolkit-cli/src/test/java/org/apache/nifi/toolkit/cli/TestCLICompleter.java b/nifi-toolkit/nifi-toolkit-cli/src/test/java/org/apache/nifi/toolkit/cli/TestCLICompleter.java
index 93d668c..e4763f0 100644
--- a/nifi-toolkit/nifi-toolkit-cli/src/test/java/org/apache/nifi/toolkit/cli/TestCLICompleter.java
+++ b/nifi-toolkit/nifi-toolkit-cli/src/test/java/org/apache/nifi/toolkit/cli/TestCLICompleter.java
@@ -21,6 +21,7 @@ import org.apache.nifi.toolkit.cli.api.ClientFactory;
 import org.apache.nifi.toolkit.cli.api.Command;
 import org.apache.nifi.toolkit.cli.api.Context;
 import org.apache.nifi.toolkit.cli.api.Session;
+import org.apache.nifi.toolkit.cli.impl.command.registry.NiFiRegistryCommandGroup;
 import org.apache.nifi.toolkit.cli.impl.context.StandardContext;
 import org.apache.nifi.toolkit.cli.impl.session.InMemorySession;
 import org.apache.nifi.toolkit.cli.impl.session.SessionVariables;
@@ -92,7 +93,7 @@ public class TestCLICompleter {
 
     @Test
     public void testCompletionWithWordIndexOneAndMatching() {
-        final String topCommand = "nifi-reg";
+        final String topCommand = NiFiRegistryCommandGroup.REGISTRY_COMMAND_GROUP;
 
         final DefaultParser.ArgumentList parsedLine = new DefaultParser.ArgumentList(
                 "", Collections.singletonList(topCommand), 1, -1, -1);
@@ -116,7 +117,7 @@ public class TestCLICompleter {
 
     @Test
     public void testCompletionWithWordIndexTwoAndMatching() {
-        final String topCommand = "nifi-reg";
+        final String topCommand = NiFiRegistryCommandGroup.REGISTRY_COMMAND_GROUP;
         final String subCommand = "list-buckets";
 
         final DefaultParser.ArgumentList parsedLine = new DefaultParser.ArgumentList(
@@ -130,7 +131,7 @@ public class TestCLICompleter {
 
     @Test
     public void testCompletionWithWordIndexTwoAndNotMatching() {
-        final String topCommand = "nifi-reg";
+        final String topCommand = NiFiRegistryCommandGroup.REGISTRY_COMMAND_GROUP;
         final String subCommand = "NOT-A-TOP-LEVEL-COMMAND";
 
         final DefaultParser.ArgumentList parsedLine = new DefaultParser.ArgumentList(
@@ -143,7 +144,7 @@ public class TestCLICompleter {
 
     @Test
     public void testCompletionWithMultipleArguments() {
-        final String topCommand = "nifi-reg";
+        final String topCommand = NiFiRegistryCommandGroup.REGISTRY_COMMAND_GROUP;
         final String subCommand = "list-buckets";
 
         final DefaultParser.ArgumentList parsedLine = new DefaultParser.ArgumentList(
@@ -157,7 +158,7 @@ public class TestCLICompleter {
 
     @Test
     public void testCompletionWithFileArguments() {
-        final String topCommand = "nifi-reg";
+        final String topCommand = NiFiRegistryCommandGroup.REGISTRY_COMMAND_GROUP;
         final String subCommand = "list-buckets";
 
         final DefaultParser.ArgumentList parsedLine = new DefaultParser.ArgumentList(