This is an automated email from the ASF dual-hosted git repository.

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 82087ef6ec [#6418] improve(CLI): Add stream command context CLI (#6434)
82087ef6ec is described below

commit 82087ef6ecdca54bd0bfe13e03028f665d4251ae
Author: Lord of Abyss <103809695+abyss-l...@users.noreply.github.com>
AuthorDate: Tue Feb 11 12:41:12 2025 +0800

    [#6418] improve(CLI): Add stream command context CLI (#6434)
    
    ### What changes were proposed in this pull request?
    
    Add stream command context CLI
    
    ### Why are the changes needed?
    
    Fix: #6418
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    local test.
---
 .../apache/gravitino/cli/GravitinoCommandLine.java |   2 +-
 .../apache/gravitino/cli/TestableCommandLine.java  |  42 +++---
 .../apache/gravitino/cli/TopicCommandHandler.java  |  31 ++---
 .../apache/gravitino/cli/commands/CreateTopic.java |  11 +-
 .../apache/gravitino/cli/commands/DeleteTopic.java |  21 +--
 .../cli/commands/ListTopicProperties.java          |  13 +-
 .../apache/gravitino/cli/commands/ListTopics.java  |  11 +-
 .../cli/commands/RemoveTopicProperty.java          |  11 +-
 .../gravitino/cli/commands/SetTopicProperty.java   |  11 +-
 .../gravitino/cli/commands/TopicDetails.java       |  15 +--
 .../gravitino/cli/commands/UpdateTopicComment.java |  11 +-
 .../apache/gravitino/cli/TestTopicCommands.java    | 149 +++++++++------------
 12 files changed, 140 insertions(+), 188 deletions(-)

diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
index 97fca069a9..b5e5838f1b 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
@@ -126,7 +126,7 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     } else if (entity.equals(CommandEntities.METALAKE)) {
       new MetalakeCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.TOPIC)) {
-      new TopicCommandHandler(this, line, command, ignore).handle();
+      new TopicCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.FILESET)) {
       new FilesetCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.USER)) {
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java
index d1c757345a..8a64c6c551 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java
@@ -570,74 +570,64 @@ public class TestableCommandLine {
   }
 
   protected ListTopics newListTopics(
-      String url, boolean ignore, String metalake, String catalog, String 
schema) {
-    return new ListTopics(url, ignore, metalake, catalog, schema);
+      CommandContext context, String metalake, String catalog, String schema) {
+    return new ListTopics(context, metalake, catalog, schema);
   }
 
   protected TopicDetails newTopicDetails(
-      String url, boolean ignore, String metalake, String catalog, String 
schema, String topic) {
-    return new TopicDetails(url, ignore, metalake, catalog, schema, topic);
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    return new TopicDetails(context, metalake, catalog, schema, topic);
   }
 
   protected CreateTopic newCreateTopic(
-      String url,
-      boolean ignore,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String comment) {
-    return new CreateTopic(url, ignore, metalake, catalog, schema, topic, 
comment);
+    return new CreateTopic(context, metalake, catalog, schema, topic, comment);
   }
 
   protected DeleteTopic newDeleteTopic(
-      String url,
-      boolean ignore,
-      boolean force,
-      String metalake,
-      String catalog,
-      String schema,
-      String topic) {
-    return new DeleteTopic(url, ignore, force, metalake, catalog, schema, 
topic);
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    return new DeleteTopic(context, metalake, catalog, schema, topic);
   }
 
   protected UpdateTopicComment newUpdateTopicComment(
-      String url,
-      boolean ignore,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String comment) {
-    return new UpdateTopicComment(url, ignore, metalake, catalog, schema, 
topic, comment);
+    return new UpdateTopicComment(context, metalake, catalog, schema, topic, 
comment);
   }
 
   protected SetTopicProperty newSetTopicProperty(
-      String url,
-      boolean ignore,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String property,
       String value) {
-    return new SetTopicProperty(url, ignore, metalake, catalog, schema, topic, 
property, value);
+    return new SetTopicProperty(context, metalake, catalog, schema, topic, 
property, value);
   }
 
   protected RemoveTopicProperty newRemoveTopicProperty(
-      String url,
-      boolean ignore,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String property) {
-    return new RemoveTopicProperty(url, ignore, metalake, catalog, schema, 
topic, property);
+    return new RemoveTopicProperty(context, metalake, catalog, schema, topic, 
property);
   }
 
   protected ListTopicProperties newListTopicProperties(
-      String url, boolean ignore, String metalake, String catalog, String 
schema, String topic) {
-    return new ListTopicProperties(url, ignore, metalake, catalog, schema, 
topic);
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    return new ListTopicProperties(context, metalake, catalog, schema, topic);
   }
 
   protected FilesetDetails newFilesetDetails(
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/TopicCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/TopicCommandHandler.java
index 7c2a75db91..f67d003b28 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/TopicCommandHandler.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/TopicCommandHandler.java
@@ -29,8 +29,7 @@ public class TopicCommandHandler extends CommandHandler {
   private final GravitinoCommandLine gravitinoCommandLine;
   private final CommandLine line;
   private final String command;
-  private final boolean ignore;
-  private final String url;
+  private final CommandContext context;
   private final FullName name;
   private final String metalake;
   private final String catalog;
@@ -43,16 +42,19 @@ public class TopicCommandHandler extends CommandHandler {
    * @param gravitinoCommandLine The Gravitino command line instance.
    * @param line The command line arguments.
    * @param command The command to execute.
-   * @param ignore Ignore server version mismatch.
+   * @param context The command context.
    */
   public TopicCommandHandler(
-      GravitinoCommandLine gravitinoCommandLine, CommandLine line, String 
command, boolean ignore) {
+      GravitinoCommandLine gravitinoCommandLine,
+      CommandLine line,
+      String command,
+      CommandContext context) {
     this.gravitinoCommandLine = gravitinoCommandLine;
     this.line = line;
     this.command = command;
-    this.ignore = ignore;
+    this.context = context;
 
-    this.url = getUrl(line);
+    this.context.setUrl(getUrl(line));
     this.name = new FullName(line);
     this.metalake = name.getMetalakeName();
     this.catalog = name.getCatalogName();
@@ -128,7 +130,7 @@ public class TopicCommandHandler extends CommandHandler {
   /** Handles the "DETAILS" command. */
   private void handleDetailsCommand() {
     gravitinoCommandLine
-        .newTopicDetails(url, ignore, metalake, catalog, schema, topic)
+        .newTopicDetails(context, metalake, catalog, schema, topic)
         .validate()
         .handle();
   }
@@ -137,16 +139,15 @@ public class TopicCommandHandler extends CommandHandler {
   private void handleCreateCommand() {
     String comment = line.getOptionValue(GravitinoOptions.COMMENT);
     gravitinoCommandLine
-        .newCreateTopic(url, ignore, metalake, catalog, schema, topic, comment)
+        .newCreateTopic(context, metalake, catalog, schema, topic, comment)
         .validate()
         .handle();
   }
 
   /** Handles the "DELETE" command. */
   private void handleDeleteCommand() {
-    boolean force = line.hasOption(GravitinoOptions.FORCE);
     gravitinoCommandLine
-        .newDeleteTopic(url, ignore, force, metalake, catalog, schema, topic)
+        .newDeleteTopic(context, metalake, catalog, schema, topic)
         .validate()
         .handle();
   }
@@ -156,7 +157,7 @@ public class TopicCommandHandler extends CommandHandler {
     if (line.hasOption(GravitinoOptions.COMMENT)) {
       String comment = line.getOptionValue(GravitinoOptions.COMMENT);
       gravitinoCommandLine
-          .newUpdateTopicComment(url, ignore, metalake, catalog, schema, 
topic, comment)
+          .newUpdateTopicComment(context, metalake, catalog, schema, topic, 
comment)
           .validate()
           .handle();
     }
@@ -167,7 +168,7 @@ public class TopicCommandHandler extends CommandHandler {
     String property = line.getOptionValue(GravitinoOptions.PROPERTY);
     String value = line.getOptionValue(GravitinoOptions.VALUE);
     gravitinoCommandLine
-        .newSetTopicProperty(url, ignore, metalake, catalog, schema, topic, 
property, value)
+        .newSetTopicProperty(context, metalake, catalog, schema, topic, 
property, value)
         .validate()
         .handle();
   }
@@ -176,7 +177,7 @@ public class TopicCommandHandler extends CommandHandler {
   private void handleRemoveCommand() {
     String property = line.getOptionValue(GravitinoOptions.PROPERTY);
     gravitinoCommandLine
-        .newRemoveTopicProperty(url, ignore, metalake, catalog, schema, topic, 
property)
+        .newRemoveTopicProperty(context, metalake, catalog, schema, topic, 
property)
         .validate()
         .handle();
   }
@@ -184,13 +185,13 @@ public class TopicCommandHandler extends CommandHandler {
   /** Handles the "PROPERTIES" command. */
   private void handlePropertiesCommand() {
     gravitinoCommandLine
-        .newListTopicProperties(url, ignore, metalake, catalog, schema, topic)
+        .newListTopicProperties(context, metalake, catalog, schema, topic)
         .validate()
         .handle();
   }
 
   /** Handles the "LIST" command. */
   private void handleListCommand() {
-    gravitinoCommandLine.newListTopics(url, ignore, metalake, catalog, 
schema).validate().handle();
+    gravitinoCommandLine.newListTopics(context, metalake, catalog, 
schema).validate().handle();
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateTopic.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateTopic.java
index 61d3db4472..c1fd5c4118 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateTopic.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateTopic.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchMetalakeException;
@@ -38,8 +39,7 @@ public class CreateTopic extends Command {
   /**
    * Add a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
@@ -47,14 +47,13 @@ public class CreateTopic extends Command {
    * @param comment The comment for the topic.
    */
   public CreateTopic(
-      String url,
-      boolean ignoreVersions,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String comment) {
-    super(url, ignoreVersions);
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -80,6 +79,6 @@ public class CreateTopic extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(topic + " topic created.");
+    printInformation(topic + " topic created.");
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTopic.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTopic.java
index 5d6f440dba..462c38a005 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTopic.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTopic.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.cli.AreYouSure;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchMetalakeException;
@@ -39,24 +40,16 @@ public class DeleteTopic extends Command {
   /**
    * Delete a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
-   * @param force Force operation.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
    * @param topic The name of the topic.
    */
   public DeleteTopic(
-      String url,
-      boolean ignoreVersions,
-      boolean force,
-      String metalake,
-      String catalog,
-      String schema,
-      String topic) {
-    super(url, ignoreVersions);
-    this.force = force;
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    super(context);
+    this.force = context.force();
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -87,9 +80,9 @@ public class DeleteTopic extends Command {
     }
 
     if (deleted) {
-      System.out.println(topic + " deleted.");
+      printInformation(topic + " deleted.");
     } else {
-      System.out.println(topic + " not deleted.");
+      printInformation(topic + " not deleted.");
     }
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopicProperties.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopicProperties.java
index e308b1c6a1..038c29b3cb 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopicProperties.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopicProperties.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.cli.commands;
 
 import java.util.Map;
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -40,21 +41,15 @@ public class ListTopicProperties extends ListProperties {
   /**
    * List the properties of a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
    * @param topic The name of the topic.
    */
   public ListTopicProperties(
-      String url,
-      boolean ignoreVersions,
-      String metalake,
-      String catalog,
-      String schema,
-      String topic) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopics.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopics.java
index a2da6a69ad..9612ec0900 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopics.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListTopics.java
@@ -23,6 +23,7 @@ import com.google.common.base.Joiner;
 import java.util.Arrays;
 import org.apache.gravitino.NameIdentifier;
 import org.apache.gravitino.Namespace;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchMetalakeException;
@@ -37,15 +38,13 @@ public class ListTopics extends Command {
   /**
    * List the names of all topics in a schema.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
    */
-  public ListTopics(
-      String url, boolean ignoreVersions, String metalake, String catalog, 
String schema) {
-    super(url, ignoreVersions);
+  public ListTopics(CommandContext context, String metalake, String catalog, 
String schema) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -70,6 +69,6 @@ public class ListTopics extends Command {
         topics.length == 0
             ? "No topics exist."
             : Joiner.on(",").join(Arrays.stream(topics).map(topic -> 
topic.name()).iterator());
-    System.out.println(all);
+    printResults(all);
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveTopicProperty.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveTopicProperty.java
index 51be0a139d..497088c1be 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveTopicProperty.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveTopicProperty.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -40,8 +41,7 @@ public class RemoveTopicProperty extends Command {
   /**
    * Remove a property of a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
@@ -49,14 +49,13 @@ public class RemoveTopicProperty extends Command {
    * @param property The name of the property.
    */
   public RemoveTopicProperty(
-      String url,
-      boolean ignoreVersions,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String property) {
-    super(url, ignoreVersions);
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -85,7 +84,7 @@ public class RemoveTopicProperty extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(property + " property removed.");
+    printInformation(property + " property removed.");
   }
 
   @Override
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetTopicProperty.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetTopicProperty.java
index 2641259cdd..67bedc88d7 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetTopicProperty.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetTopicProperty.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -41,8 +42,7 @@ public class SetTopicProperty extends Command {
   /**
    * Set a property of a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
@@ -51,15 +51,14 @@ public class SetTopicProperty extends Command {
    * @param value The value of the property.
    */
   public SetTopicProperty(
-      String url,
-      boolean ignoreVersions,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String property,
       String value) {
-    super(url, ignoreVersions);
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -90,7 +89,7 @@ public class SetTopicProperty extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(property + " property set.");
+    printInformation(property + " property set.");
   }
 
   @Override
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TopicDetails.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TopicDetails.java
index 0ab31bd8b3..d72002419d 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TopicDetails.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TopicDetails.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -39,21 +40,15 @@ public class TopicDetails extends Command {
   /**
    * Displays the details of a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schenma.
    * @param topic The name of the topic.
    */
   public TopicDetails(
-      String url,
-      boolean ignoreVersions,
-      String metalake,
-      String catalog,
-      String schema,
-      String topic) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, String schema, 
String topic) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -81,6 +76,6 @@ public class TopicDetails extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(gTopic.name() + "," + gTopic.comment());
+    printResults(gTopic.name() + "," + gTopic.comment());
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateTopicComment.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateTopicComment.java
index 1f81ad7fab..37121db4ac 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateTopicComment.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateTopicComment.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.NameIdentifier;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -40,8 +41,7 @@ public class UpdateTopicComment extends Command {
   /**
    * Update the comment of a topic.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    * @param schema The name of the schema.
@@ -49,14 +49,13 @@ public class UpdateTopicComment extends Command {
    * @param comment New metalake comment.
    */
   public UpdateTopicComment(
-      String url,
-      boolean ignoreVersions,
+      CommandContext context,
       String metalake,
       String catalog,
       String schema,
       String topic,
       String comment) {
-    super(url, ignoreVersions);
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.schema = schema;
@@ -85,6 +84,6 @@ public class UpdateTopicComment extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(topic + " comment changed.");
+    printInformation(topic + " comment changed.");
   }
 }
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestTopicCommands.java 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestTopicCommands.java
index 31904b8856..695edb9dd4 100644
--- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestTopicCommands.java
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestTopicCommands.java
@@ -21,6 +21,9 @@ package org.apache.gravitino.cli;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThrows;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -87,8 +90,7 @@ class TestTopicCommands {
                 mockCommandLine, mockOptions, CommandEntities.TOPIC, 
CommandActions.LIST));
     doReturn(mockList)
         .when(commandLine)
-        .newListTopics(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "schema");
+        .newListTopics(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"), eq("schema"));
     doReturn(mockList).when(mockList).validate();
     commandLine.handleCommandLine();
     verify(mockList).handle();
@@ -108,7 +110,11 @@ class TestTopicCommands {
     doReturn(mockDetails)
         .when(commandLine)
         .newTopicDetails(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "schema", "topic");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"));
     doReturn(mockDetails).when(mockDetails).validate();
     commandLine.handleCommandLine();
     verify(mockDetails).handle();
@@ -131,13 +137,12 @@ class TestTopicCommands {
     doReturn(mockCreate)
         .when(commandLine)
         .newCreateTopic(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic",
-            "comment");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"),
+            eq("comment"));
     doReturn(mockCreate).when(mockCreate).validate();
     commandLine.handleCommandLine();
     verify(mockCreate).handle();
@@ -157,13 +162,11 @@ class TestTopicCommands {
     doReturn(mockDelete)
         .when(commandLine)
         .newDeleteTopic(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            false,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"));
     doReturn(mockDelete).when(mockDelete).validate();
     commandLine.handleCommandLine();
     verify(mockDelete).handle();
@@ -184,13 +187,11 @@ class TestTopicCommands {
     doReturn(mockDelete)
         .when(commandLine)
         .newDeleteTopic(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            true,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"));
     doReturn(mockDelete).when(mockDelete).validate();
     commandLine.handleCommandLine();
     verify(mockDelete).handle();
@@ -213,13 +214,12 @@ class TestTopicCommands {
     doReturn(mockUpdate)
         .when(commandLine)
         .newUpdateTopicComment(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic",
-            "new comment");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"),
+            eq("new comment"));
     doReturn(mockUpdate).when(mockUpdate).validate();
     commandLine.handleCommandLine();
     verify(mockUpdate).handle();
@@ -240,7 +240,11 @@ class TestTopicCommands {
     doReturn(mockListProperties)
         .when(commandLine)
         .newListTopicProperties(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "schema", "topic");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"));
     doReturn(mockListProperties).when(mockListProperties).validate();
     commandLine.handleCommandLine();
     verify(mockListProperties).handle();
@@ -265,14 +269,13 @@ class TestTopicCommands {
     doReturn(mockSetProperties)
         .when(commandLine)
         .newSetTopicProperty(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic",
-            "property",
-            "value");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"),
+            eq("property"),
+            eq("value"));
     doReturn(mockSetProperties).when(mockSetProperties).validate();
     commandLine.handleCommandLine();
     verify(mockSetProperties).handle();
@@ -281,17 +284,12 @@ class TestTopicCommands {
   @Test
   void testSetTopicPropertyCommandWithoutPropertyAndValue() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn(GravitinoCommandLine.DEFAULT_URL);
     SetTopicProperty spySetProperty =
         spy(
             new SetTopicProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                "schema",
-                "topic",
-                null,
-                null));
+                mockContext, "metalake_demo", "catalog", "schema", "topic", 
null, null));
     assertThrows(RuntimeException.class, spySetProperty::validate);
     verify(spySetProperty, never()).handle();
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -301,17 +299,12 @@ class TestTopicCommands {
   @Test
   void testSetTopicPropertyCommandWithoutProperty() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn(GravitinoCommandLine.DEFAULT_URL);
     SetTopicProperty spySetProperty =
         spy(
             new SetTopicProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                "schema",
-                "topic",
-                null,
-                "value"));
+                mockContext, "metalake_demo", "catalog", "schema", "topic", 
null, "value"));
     assertThrows(RuntimeException.class, spySetProperty::validate);
     verify(spySetProperty, never()).handle();
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -321,17 +314,12 @@ class TestTopicCommands {
   @Test
   void testSetTopicPropertyCommandWithoutValue() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn(GravitinoCommandLine.DEFAULT_URL);
     SetTopicProperty spySetProperty =
         spy(
             new SetTopicProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                "schema",
-                "topic",
-                "property",
-                null));
+                mockContext, "metalake_demo", "catalog", "schema", "topic", 
"property", null));
     assertThrows(RuntimeException.class, spySetProperty::validate);
     verify(spySetProperty, never()).handle();
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -355,13 +343,12 @@ class TestTopicCommands {
     doReturn(mockSetProperties)
         .when(commandLine)
         .newRemoveTopicProperty(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "schema",
-            "topic",
-            "property");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("schema"),
+            eq("topic"),
+            eq("property"));
     doReturn(mockSetProperties).when(mockSetProperties).validate();
     commandLine.handleCommandLine();
     verify(mockSetProperties).handle();
@@ -370,16 +357,12 @@ class TestTopicCommands {
   @Test
   void testRemoveTopicPropertyCommandWithoutProperty() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn(GravitinoCommandLine.DEFAULT_URL);
     RemoveTopicProperty spyRemoveProperty =
         spy(
             new RemoveTopicProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                "schema",
-                "topic",
-                null));
+                mockContext, "metalake_demo", "catalog", "schema", "topic", 
null));
 
     assertThrows(RuntimeException.class, spyRemoveProperty::validate);
     verify(spyRemoveProperty, never()).handle();
@@ -400,7 +383,7 @@ class TestTopicCommands {
 
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
-        .newListTopics(GravitinoCommandLine.DEFAULT_URL, false, 
"metalake_demo", null, null);
+        .newListTopics(any(CommandContext.class), eq("metalake_demo"), 
isNull(), isNull());
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,
@@ -425,7 +408,7 @@ class TestTopicCommands {
 
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
-        .newListTopics(GravitinoCommandLine.DEFAULT_URL, false, 
"metalake_demo", "catalog", null);
+        .newListTopics(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"), isNull());
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,
@@ -450,7 +433,7 @@ class TestTopicCommands {
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
         .newTopicDetails(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", null, 
null, null);
+            any(CommandContext.class), eq("metalake_demo"), isNull(), 
isNull(), isNull());
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,
@@ -479,7 +462,7 @@ class TestTopicCommands {
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
         .newTopicDetails(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", null, null);
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
isNull(), isNull());
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,
@@ -505,7 +488,7 @@ class TestTopicCommands {
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
         .newTopicDetails(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"schema", null, null);
+            any(CommandContext.class), eq("metalake_demo"), eq("schema"), 
isNull(), isNull());
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,


Reply via email to