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 1e85c3d333 [#6414] improve(CLI): Add catalog command context CLI 
(#6425)
1e85c3d333 is described below

commit 1e85c3d3334f52646ee8b71512fb148743bed52f
Author: Lord of Abyss <103809695+abyss-l...@users.noreply.github.com>
AuthorDate: Tue Feb 11 12:40:57 2025 +0800

    [#6414] improve(CLI): Add catalog command context CLI (#6425)
    
    ### What changes were proposed in this pull request?
    
    Add catalog command context CLI
    
    ### Why are the changes needed?
    
    Fix: #6414
    
    ### Does this PR introduce _any_ user-facing change?
    
    No
    
    ### How was this patch tested?
    
    local test.
---
 .../gravitino/cli/CatalogCommandHandler.java       |  50 ++++----
 .../apache/gravitino/cli/GravitinoCommandLine.java |   2 +-
 .../apache/gravitino/cli/TestableCommandLine.java  |  51 ++++-----
 .../gravitino/cli/commands/CatalogAudit.java       |   8 +-
 .../gravitino/cli/commands/CatalogDetails.java     |  11 +-
 .../gravitino/cli/commands/CatalogDisable.java     |  10 +-
 .../gravitino/cli/commands/CatalogEnable.java      |  10 +-
 .../gravitino/cli/commands/CreateCatalog.java      |  11 +-
 .../gravitino/cli/commands/DeleteCatalog.java      |  16 ++-
 .../cli/commands/ListCatalogProperties.java        |   9 +-
 .../gravitino/cli/commands/ListCatalogs.java       |   9 +-
 .../cli/commands/RemoveCatalogProperty.java        |  10 +-
 .../gravitino/cli/commands/SetCatalogProperty.java |  15 +--
 .../cli/commands/UpdateCatalogComment.java         |  10 +-
 .../gravitino/cli/commands/UpdateCatalogName.java  |  11 +-
 .../apache/gravitino/cli/TestCatalogCommands.java  | 126 ++++++++-------------
 .../apache/gravitino/cli/TestCommandContext.java   |  46 ++++++++
 17 files changed, 199 insertions(+), 206 deletions(-)

diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/CatalogCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/CatalogCommandHandler.java
index 8e23840685..a702856f65 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/CatalogCommandHandler.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/CatalogCommandHandler.java
@@ -33,12 +33,10 @@ public class CatalogCommandHandler 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 String catalog;
-  private final String outputFormat;
 
   /**
    * Constructs a {@link CatalogCommandHandler} instance.
@@ -46,19 +44,21 @@ public class CatalogCommandHandler 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 CatalogCommandHandler(
-      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.outputFormat = line.getOptionValue(GravitinoOptions.OUTPUT);
   }
 
   /** Handles the command execution logic based on the provided command. */
@@ -126,12 +126,9 @@ public class CatalogCommandHandler extends CommandHandler {
   /** Handles the "DETAILS" command. */
   private void handleDetailsCommand() {
     if (line.hasOption(GravitinoOptions.AUDIT)) {
-      gravitinoCommandLine.newCatalogAudit(url, ignore, metalake, 
catalog).validate().handle();
+      gravitinoCommandLine.newCatalogAudit(context, metalake, 
catalog).validate().handle();
     } else {
-      gravitinoCommandLine
-          .newCatalogDetails(url, ignore, outputFormat, metalake, catalog)
-          .validate()
-          .handle();
+      gravitinoCommandLine.newCatalogDetails(context, metalake, 
catalog).validate().handle();
     }
   }
 
@@ -143,18 +140,14 @@ public class CatalogCommandHandler extends CommandHandler 
{
 
     Map<String, String> propertyMap = new Properties().parse(properties);
     gravitinoCommandLine
-        .newCreateCatalog(url, ignore, metalake, catalog, provider, comment, 
propertyMap)
+        .newCreateCatalog(context, metalake, catalog, provider, comment, 
propertyMap)
         .validate()
         .handle();
   }
 
   /** Handles the "DELETE" command. */
   private void handleDeleteCommand() {
-    boolean force = line.hasOption(GravitinoOptions.FORCE);
-    gravitinoCommandLine
-        .newDeleteCatalog(url, ignore, force, metalake, catalog)
-        .validate()
-        .handle();
+    gravitinoCommandLine.newDeleteCatalog(context, metalake, 
catalog).validate().handle();
   }
 
   /** Handles the "SET" command. */
@@ -162,7 +155,7 @@ public class CatalogCommandHandler extends CommandHandler {
     String property = line.getOptionValue(GravitinoOptions.PROPERTY);
     String value = line.getOptionValue(GravitinoOptions.VALUE);
     gravitinoCommandLine
-        .newSetCatalogProperty(url, ignore, metalake, catalog, property, value)
+        .newSetCatalogProperty(context, metalake, catalog, property, value)
         .validate()
         .handle();
   }
@@ -171,17 +164,14 @@ public class CatalogCommandHandler extends CommandHandler 
{
   private void handleRemoveCommand() {
     String property = line.getOptionValue(GravitinoOptions.PROPERTY);
     gravitinoCommandLine
-        .newRemoveCatalogProperty(url, ignore, metalake, catalog, property)
+        .newRemoveCatalogProperty(context, metalake, catalog, property)
         .validate()
         .handle();
   }
 
   /** Handles the "PROPERTIES" command. */
   private void handlePropertiesCommand() {
-    gravitinoCommandLine
-        .newListCatalogProperties(url, ignore, metalake, catalog)
-        .validate()
-        .handle();
+    gravitinoCommandLine.newListCatalogProperties(context, metalake, 
catalog).validate().handle();
   }
 
   /** Handles the "UPDATE" command. */
@@ -193,25 +183,25 @@ public class CatalogCommandHandler extends CommandHandler 
{
     if (line.hasOption(GravitinoOptions.ENABLE)) {
       boolean enableMetalake = line.hasOption(GravitinoOptions.ALL);
       gravitinoCommandLine
-          .newCatalogEnable(url, ignore, metalake, catalog, enableMetalake)
+          .newCatalogEnable(context, metalake, catalog, enableMetalake)
           .validate()
           .handle();
     }
     if (line.hasOption(GravitinoOptions.DISABLE)) {
-      gravitinoCommandLine.newCatalogDisable(url, ignore, metalake, 
catalog).validate().handle();
+      gravitinoCommandLine.newCatalogDisable(context, metalake, 
catalog).validate().handle();
     }
 
     if (line.hasOption(GravitinoOptions.COMMENT)) {
       String updateComment = line.getOptionValue(GravitinoOptions.COMMENT);
       gravitinoCommandLine
-          .newUpdateCatalogComment(url, ignore, metalake, catalog, 
updateComment)
+          .newUpdateCatalogComment(context, metalake, catalog, updateComment)
           .validate()
           .handle();
     }
     if (line.hasOption(GravitinoOptions.RENAME)) {
       String newName = line.getOptionValue(GravitinoOptions.RENAME);
       gravitinoCommandLine
-          .newUpdateCatalogName(url, ignore, metalake, catalog, newName)
+          .newUpdateCatalogName(context, metalake, catalog, newName)
           .validate()
           .handle();
     }
@@ -219,6 +209,6 @@ public class CatalogCommandHandler extends CommandHandler {
 
   /** Handles the "LIST" command. */
   private void handleListCommand() {
-    gravitinoCommandLine.newListCatalogs(url, ignore, outputFormat, 
metalake).validate().handle();
+    gravitinoCommandLine.newListCatalogs(context, 
metalake).validate().handle();
   }
 }
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 5ab3ed5c93..97fca069a9 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
@@ -122,7 +122,7 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     } else if (entity.equals(CommandEntities.SCHEMA)) {
       new SchemaCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.CATALOG)) {
-      new CatalogCommandHandler(this, line, command, ignore).handle();
+      new CatalogCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.METALAKE)) {
       new MetalakeCommandHandler(this, line, command, context).handle();
     } else if (entity.equals(CommandEntities.TOPIC)) {
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 de2583f698..d1c757345a 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
@@ -203,60 +203,57 @@ public class TestableCommandLine {
     return new UpdateMetalakeName(context, metalake, newName);
   }
 
-  protected CatalogAudit newCatalogAudit(
-      String url, boolean ignore, String metalake, String catalog) {
-    return new CatalogAudit(url, ignore, metalake, catalog);
+  protected CatalogAudit newCatalogAudit(CommandContext context, String 
metalake, String catalog) {
+    return new CatalogAudit(context, metalake, catalog);
   }
 
   protected CatalogDetails newCatalogDetails(
-      String url, boolean ignore, String outputFormat, String metalake, String 
catalog) {
-    return new CatalogDetails(url, ignore, outputFormat, metalake, catalog);
+      CommandContext context, String metalake, String catalog) {
+    return new CatalogDetails(context, metalake, catalog);
   }
 
-  protected ListCatalogs newListCatalogs(
-      String url, boolean ignore, String outputFormat, String metalake) {
-    return new ListCatalogs(url, ignore, outputFormat, metalake);
+  protected ListCatalogs newListCatalogs(CommandContext context, String 
metalake) {
+    return new ListCatalogs(context, metalake);
   }
 
   protected CreateCatalog newCreateCatalog(
-      String url,
-      boolean ignore,
+      CommandContext context,
       String metalake,
       String catalog,
       String provider,
       String comment,
       Map<String, String> properties) {
-    return new CreateCatalog(url, ignore, metalake, catalog, provider, 
comment, properties);
+    return new CreateCatalog(context, metalake, catalog, provider, comment, 
properties);
   }
 
   protected DeleteCatalog newDeleteCatalog(
-      String url, boolean ignore, boolean force, String metalake, String 
catalog) {
-    return new DeleteCatalog(url, ignore, force, metalake, catalog);
+      CommandContext context, String metalake, String catalog) {
+    return new DeleteCatalog(context, metalake, catalog);
   }
 
   protected SetCatalogProperty newSetCatalogProperty(
-      String url, boolean ignore, String metalake, String catalog, String 
property, String value) {
-    return new SetCatalogProperty(url, ignore, metalake, catalog, property, 
value);
+      CommandContext context, String metalake, String catalog, String 
property, String value) {
+    return new SetCatalogProperty(context, metalake, catalog, property, value);
   }
 
   protected RemoveCatalogProperty newRemoveCatalogProperty(
-      String url, boolean ignore, String metalake, String catalog, String 
property) {
-    return new RemoveCatalogProperty(url, ignore, metalake, catalog, property);
+      CommandContext context, String metalake, String catalog, String 
property) {
+    return new RemoveCatalogProperty(context, metalake, catalog, property);
   }
 
   protected ListCatalogProperties newListCatalogProperties(
-      String url, boolean ignore, String metalake, String catalog) {
-    return new ListCatalogProperties(url, ignore, metalake, catalog);
+      CommandContext context, String metalake, String catalog) {
+    return new ListCatalogProperties(context, metalake, catalog);
   }
 
   protected UpdateCatalogComment newUpdateCatalogComment(
-      String url, boolean ignore, String metalake, String catalog, String 
comment) {
-    return new UpdateCatalogComment(url, ignore, metalake, catalog, comment);
+      CommandContext context, String metalake, String catalog, String comment) 
{
+    return new UpdateCatalogComment(context, metalake, catalog, comment);
   }
 
   protected UpdateCatalogName newUpdateCatalogName(
-      String url, boolean ignore, String metalake, String catalog, String 
newName) {
-    return new UpdateCatalogName(url, ignore, metalake, catalog, newName);
+      CommandContext context, String metalake, String catalog, String newName) 
{
+    return new UpdateCatalogName(context, metalake, catalog, newName);
   }
 
   protected SchemaAudit newSchemaAudit(
@@ -892,13 +889,13 @@ public class TestableCommandLine {
   }
 
   protected CatalogEnable newCatalogEnable(
-      String url, boolean ignore, String metalake, String catalog, boolean 
enableMetalake) {
-    return new CatalogEnable(url, ignore, metalake, catalog, enableMetalake);
+      CommandContext context, String metalake, String catalog, boolean 
enableMetalake) {
+    return new CatalogEnable(context, metalake, catalog, enableMetalake);
   }
 
   protected CatalogDisable newCatalogDisable(
-      String url, boolean ignore, String metalake, String catalog) {
-    return new CatalogDisable(url, ignore, metalake, catalog);
+      CommandContext context, String metalake, String catalog) {
+    return new CatalogDisable(context, metalake, catalog);
   }
 
   protected ListModel newListModel(
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogAudit.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogAudit.java
index f1ea8ac7b5..6600e1d429 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogAudit.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogAudit.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.Catalog;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -33,13 +34,12 @@ public class CatalogAudit extends AuditCommand {
   /**
    * Displays the audit information of a catalog.
    *
-   * @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.
    */
-  public CatalogAudit(String url, boolean ignoreVersions, String metalake, 
String catalog) {
-    super(url, ignoreVersions);
+  public CatalogAudit(CommandContext context, String metalake, String catalog) 
{
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
   }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDetails.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDetails.java
index a204f560d0..fac504a008 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDetails.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDetails.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.Catalog;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -33,16 +34,12 @@ public class CatalogDetails extends Command {
   /**
    * Displays the name and comment of a catalog.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
-   * @param outputFormat The output format.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    * @param catalog The name of the catalog.
    */
-  public CatalogDetails(
-      String url, boolean ignoreVersions, String outputFormat, String 
metalake, String catalog) {
-
-    super(url, ignoreVersions, outputFormat);
+  public CatalogDetails(CommandContext context, String metalake, String 
catalog) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
   }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDisable.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDisable.java
index 620a4291ee..7a9954b1ee 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDisable.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogDisable.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.cli.commands;
 
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -32,13 +33,12 @@ public class CatalogDisable extends Command {
   /**
    * Disable catalog
    *
-   * @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.
    */
-  public CatalogDisable(String url, boolean ignoreVersions, String metalake, 
String catalog) {
-    super(url, ignoreVersions);
+  public CatalogDisable(CommandContext context, String metalake, String 
catalog) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
   }
@@ -57,6 +57,6 @@ public class CatalogDisable extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(metalake + "." + catalog + " has been disabled.");
+    printInformation(metalake + "." + catalog + " has been disabled.");
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogEnable.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogEnable.java
index 8646baee29..8c5ca51354 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogEnable.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CatalogEnable.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.cli.commands;
 
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoAdminClient;
 import org.apache.gravitino.client.GravitinoClient;
@@ -34,15 +35,14 @@ public class CatalogEnable extends Command {
   /**
    * Enable catalog
    *
-   * @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 enableMetalake Whether to enable it's metalake
    */
   public CatalogEnable(
-      String url, boolean ignoreVersions, String metalake, String catalog, 
boolean enableMetalake) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, boolean 
enableMetalake) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.enableMetalake = enableMetalake;
@@ -69,6 +69,6 @@ public class CatalogEnable extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(metalake + "." + catalog + " has been enabled.");
+    printInformation(metalake + "." + catalog + " has been enabled.");
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateCatalog.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateCatalog.java
index 2870dd7103..af90cda73b 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateCatalog.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/CreateCatalog.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import java.util.Map;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.cli.Providers;
 import org.apache.gravitino.client.GravitinoClient;
@@ -36,8 +37,7 @@ public class CreateCatalog extends Command {
   /**
    * Create a new catalog.
    *
-   * @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 provider The provider/type of catalog.
@@ -45,14 +45,13 @@ public class CreateCatalog extends Command {
    * @param properties The catalog's properties.
    */
   public CreateCatalog(
-      String url,
-      boolean ignoreVersions,
+      CommandContext context,
       String metalake,
       String catalog,
       String provider,
       String comment,
       Map<String, String> properties) {
-    super(url, ignoreVersions);
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.provider = provider;
@@ -79,7 +78,7 @@ public class CreateCatalog extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(catalog + " catalog created");
+    printInformation(catalog + " catalog created");
   }
 
   @Override
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java
index 7cb9bf7d9c..60d49772ca 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 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.CatalogInUseException;
@@ -35,16 +36,13 @@ public class DeleteCatalog extends Command {
   /**
    * Delete a catalog.
    *
-   * @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.
    */
-  public DeleteCatalog(
-      String url, boolean ignoreVersions, boolean force, String metalake, 
String catalog) {
-    super(url, ignoreVersions);
-    this.force = force;
+  public DeleteCatalog(CommandContext context, String metalake, String 
catalog) {
+    super(context);
+    this.force = context.force();
     this.metalake = metalake;
     this.catalog = catalog;
   }
@@ -72,9 +70,9 @@ public class DeleteCatalog extends Command {
     }
 
     if (deleted) {
-      System.out.println(catalog + " deleted.");
+      printInformation(catalog + " deleted.");
     } else {
-      System.out.println(catalog + " not deleted.");
+      printInformation(catalog + " not deleted.");
     }
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogProperties.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogProperties.java
index f94213eef4..54312b8e43 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogProperties.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogProperties.java
@@ -21,6 +21,7 @@ package org.apache.gravitino.cli.commands;
 
 import java.util.Map;
 import org.apache.gravitino.Catalog;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -35,14 +36,12 @@ public class ListCatalogProperties extends ListProperties {
   /**
    * List the properties of a catalog.
    *
-   * @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.
    */
-  public ListCatalogProperties(
-      String url, boolean ignoreVersions, String metalake, String catalog) {
-    super(url, ignoreVersions);
+  public ListCatalogProperties(CommandContext context, String metalake, String 
catalog) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
   }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java
index e6aaf811ec..ad8d171fec 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListCatalogs.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.Catalog;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchMetalakeException;
@@ -32,13 +33,11 @@ public class ListCatalogs extends Command {
   /**
    * Lists all catalogs in a metalake.
    *
-   * @param url The URL of the Gravitino server.
-   * @param ignoreVersions If true don't check the client/server versions 
match.
-   * @param outputFormat The output format.
+   * @param context The command context.
    * @param metalake The name of the metalake.
    */
-  public ListCatalogs(String url, boolean ignoreVersions, String outputFormat, 
String metalake) {
-    super(url, ignoreVersions, outputFormat);
+  public ListCatalogs(CommandContext context, String metalake) {
+    super(context);
     this.metalake = metalake;
   }
 
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveCatalogProperty.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveCatalogProperty.java
index dc1a76765b..dd22b583e2 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveCatalogProperty.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/RemoveCatalogProperty.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.CatalogChange;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -35,15 +36,14 @@ public class RemoveCatalogProperty extends Command {
   /**
    * Remove a property of a catalog.
    *
-   * @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 property The name of the property.
    */
   public RemoveCatalogProperty(
-      String url, boolean ignoreVersions, String metalake, String catalog, 
String property) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, String 
property) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.property = property;
@@ -64,7 +64,7 @@ public class RemoveCatalogProperty 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/SetCatalogProperty.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetCatalogProperty.java
index 034b1b8e2a..a255835f43 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetCatalogProperty.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SetCatalogProperty.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.CatalogChange;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -36,21 +37,15 @@ public class SetCatalogProperty extends Command {
   /**
    * Set a property of a catalog.
    *
-   * @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 property The name of the property.
    * @param value The value of the property.
    */
   public SetCatalogProperty(
-      String url,
-      boolean ignoreVersions,
-      String metalake,
-      String catalog,
-      String property,
-      String value) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, String 
property, String value) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.property = property;
@@ -72,7 +67,7 @@ public class SetCatalogProperty extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(catalog + " property set.");
+    printInformation(catalog + " property set.");
   }
 
   @Override
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogComment.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogComment.java
index ed12dbc7ca..b058bf32f5 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogComment.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogComment.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.CatalogChange;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -35,15 +36,14 @@ public class UpdateCatalogComment extends Command {
   /**
    * Update the comment of a catalog.
    *
-   * @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 comment New metalake comment.
    */
   public UpdateCatalogComment(
-      String url, boolean ignoreVersions, String metalake, String catalog, 
String comment) {
-    super(url, ignoreVersions);
+      CommandContext context, String metalake, String catalog, String comment) 
{
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.comment = comment;
@@ -64,6 +64,6 @@ public class UpdateCatalogComment extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(catalog + " comment changed.");
+    printInformation(catalog + " comment changed.");
   }
 }
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogName.java
 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogName.java
index 8d4fcb60b9..ab7a1db4e5 100644
--- 
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogName.java
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateCatalogName.java
@@ -20,6 +20,7 @@
 package org.apache.gravitino.cli.commands;
 
 import org.apache.gravitino.CatalogChange;
+import org.apache.gravitino.cli.CommandContext;
 import org.apache.gravitino.cli.ErrorMessages;
 import org.apache.gravitino.client.GravitinoClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
@@ -35,15 +36,13 @@ public class UpdateCatalogName extends Command {
   /**
    * Update the name of a catalog.
    *
-   * @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 name The new catalog name.
    */
-  public UpdateCatalogName(
-      String url, boolean ignoreVersions, String metalake, String catalog, 
String name) {
-    super(url, ignoreVersions);
+  public UpdateCatalogName(CommandContext context, String metalake, String 
catalog, String name) {
+    super(context);
     this.metalake = metalake;
     this.catalog = catalog;
     this.name = name;
@@ -64,6 +63,6 @@ public class UpdateCatalogName extends Command {
       exitWithError(exp.getMessage());
     }
 
-    System.out.println(catalog + " name changed.");
+    printInformation(catalog + " name changed.");
   }
 }
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestCatalogCommands.java 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestCatalogCommands.java
index afa19b94c5..26639368a6 100644
--- 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestCatalogCommands.java
+++ 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestCatalogCommands.java
@@ -22,6 +22,10 @@ package org.apache.gravitino.cli;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.argThat;
+import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -39,7 +43,6 @@ import org.apache.gravitino.cli.commands.CatalogAudit;
 import org.apache.gravitino.cli.commands.CatalogDetails;
 import org.apache.gravitino.cli.commands.CatalogDisable;
 import org.apache.gravitino.cli.commands.CatalogEnable;
-import org.apache.gravitino.cli.commands.Command;
 import org.apache.gravitino.cli.commands.CreateCatalog;
 import org.apache.gravitino.cli.commands.DeleteCatalog;
 import org.apache.gravitino.cli.commands.ListCatalogProperties;
@@ -69,11 +72,6 @@ class TestCatalogCommands {
     System.setErr(new PrintStream(errContent));
   }
 
-  @AfterEach
-  void restoreExitFlg() {
-    Main.useExit = true;
-  }
-
   @AfterEach
   public void restoreStreams() {
     System.setOut(originalOut);
@@ -91,7 +89,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.LIST));
     doReturn(mockList)
         .when(commandLine)
-        .newListCatalogs(GravitinoCommandLine.DEFAULT_URL, false, null, 
"metalake_demo");
+        .newListCatalogs(any(CommandContext.class), eq("metalake_demo"));
     doReturn(mockList).when(mockList).validate();
     commandLine.handleCommandLine();
     verify(mockList).handle();
@@ -111,8 +109,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.DETAILS));
     doReturn(mockDetails)
         .when(commandLine)
-        .newCatalogDetails(
-            GravitinoCommandLine.DEFAULT_URL, false, null, "metalake_demo", 
"catalog");
+        .newCatalogDetails(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     doReturn(mockDetails).when(mockDetails).validate();
     commandLine.handleCommandLine();
     verify(mockDetails).handle();
@@ -132,7 +129,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.DETAILS));
     doReturn(mockAudit)
         .when(commandLine)
-        .newCatalogAudit(GravitinoCommandLine.DEFAULT_URL, false, 
"metalake_demo", "catalog");
+        .newCatalogAudit(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     doReturn(mockAudit).when(mockAudit).validate();
     commandLine.handleCommandLine();
     verify(mockAudit).handle();
@@ -163,13 +160,17 @@ class TestCatalogCommands {
     doReturn(mockCreate)
         .when(commandLine)
         .newCreateCatalog(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "postgres",
-            "comment",
-            map);
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("postgres"),
+            eq("comment"),
+            argThat(
+                stringStringMap ->
+                    stringStringMap.containsKey("key1")
+                        && stringStringMap.get("key1").equals(map.get("key1"))
+                        && stringStringMap.containsKey("key2")
+                        && stringStringMap.get("key2").equals("value2")));
     doReturn(mockCreate).when(mockCreate).validate();
     commandLine.handleCommandLine();
     verify(mockCreate).handle();
@@ -178,16 +179,10 @@ class TestCatalogCommands {
   @Test
   void testCreateCatalogCommandWithoutProvider() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn("http://localhost:8080";);
     CreateCatalog mockCreateCatalog =
-        spy(
-            new CreateCatalog(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                null,
-                "comment",
-                null));
+        spy(new CreateCatalog(mockContext, "metalake_demo", "catalog", null, 
"comment", null));
 
     assertThrows(RuntimeException.class, mockCreateCatalog::validate);
     String errOutput = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -207,8 +202,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.DELETE));
     doReturn(mockDelete)
         .when(commandLine)
-        .newDeleteCatalog(
-            GravitinoCommandLine.DEFAULT_URL, false, false, "metalake_demo", 
"catalog");
+        .newDeleteCatalog(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     doReturn(mockDelete).when(mockDelete).validate();
     commandLine.handleCommandLine();
     verify(mockDelete).handle();
@@ -228,8 +222,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.DELETE));
     doReturn(mockDelete)
         .when(commandLine)
-        .newDeleteCatalog(
-            GravitinoCommandLine.DEFAULT_URL, false, true, "metalake_demo", 
"catalog");
+        .newDeleteCatalog(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     doReturn(mockDelete).when(mockDelete).validate();
     commandLine.handleCommandLine();
     verify(mockDelete).handle();
@@ -253,12 +246,11 @@ class TestCatalogCommands {
     doReturn(mockSetProperty)
         .when(commandLine)
         .newSetCatalogProperty(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            "metalake_demo",
-            "catalog",
-            "property",
-            "value");
+            any(CommandContext.class),
+            eq("metalake_demo"),
+            eq("catalog"),
+            eq("property"),
+            eq("value"));
     doReturn(mockSetProperty).when(mockSetProperty).validate();
     commandLine.handleCommandLine();
     verify(mockSetProperty).handle();
@@ -267,10 +259,10 @@ class TestCatalogCommands {
   @Test
   void testSetCatalogPropertyCommandWithoutPropertyAndValue() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn("http://localhost:8080";);
     SetCatalogProperty mockSetProperty =
-        spy(
-            new SetCatalogProperty(
-                GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", null, null));
+        spy(new SetCatalogProperty(mockContext, "metalake_demo", "catalog", 
null, null));
 
     assertThrows(RuntimeException.class, mockSetProperty::validate);
     String errOutput = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -280,15 +272,10 @@ class TestCatalogCommands {
   @Test
   void testSetCatalogPropertyCommandWithoutProperty() {
     Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn("http://localhost:8080";);
     SetCatalogProperty mockSetProperty =
-        spy(
-            new SetCatalogProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                null,
-                "value"));
+        spy(new SetCatalogProperty(mockContext, "metalake_demo", "catalog", 
null, "value"));
 
     assertThrows(RuntimeException.class, mockSetProperty::validate);
     String errOutput = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -297,16 +284,10 @@ class TestCatalogCommands {
 
   @Test
   void testSetCatalogPropertyCommandWithoutValue() {
-    Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn("http://localhost:8080";);
     SetCatalogProperty mockSetProperty =
-        spy(
-            new SetCatalogProperty(
-                GravitinoCommandLine.DEFAULT_URL,
-                false,
-                "metalake_demo",
-                "catalog",
-                "property",
-                null));
+        spy(new SetCatalogProperty(mockContext, "metalake_demo", "catalog", 
"property", null));
 
     assertThrows(RuntimeException.class, mockSetProperty::validate);
     String errOutput = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -329,7 +310,7 @@ class TestCatalogCommands {
     doReturn(mockRemoveProperty)
         .when(commandLine)
         .newRemoveCatalogProperty(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "property");
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
eq("property"));
     doReturn(mockRemoveProperty).when(mockRemoveProperty).validate();
     commandLine.handleCommandLine();
     verify(mockRemoveProperty).handle();
@@ -337,11 +318,10 @@ class TestCatalogCommands {
 
   @Test
   void testRemoveCatalogPropertyCommandWithoutProperty() {
-    Main.useExit = false;
+    CommandContext mockContext = mock(CommandContext.class);
+    when(mockContext.url()).thenReturn("http://localhost:8080";);
     RemoveCatalogProperty mockRemoveProperty =
-        spy(
-            new RemoveCatalogProperty(
-                GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", null));
+        spy(new RemoveCatalogProperty(mockContext, "metalake_demo", "catalog", 
null));
 
     assertThrows(RuntimeException.class, mockRemoveProperty::validate);
     String errOutput = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
@@ -361,8 +341,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.PROPERTIES));
     doReturn(mockListProperties)
         .when(commandLine)
-        .newListCatalogProperties(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog");
+        .newListCatalogProperties(any(CommandContext.class), 
eq("metalake_demo"), eq("catalog"));
     doReturn(mockListProperties).when(mockListProperties).validate();
     commandLine.handleCommandLine();
     verify(mockListProperties).handle();
@@ -384,7 +363,7 @@ class TestCatalogCommands {
     doReturn(mockUpdateComment)
         .when(commandLine)
         .newUpdateCatalogComment(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "new comment");
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
eq("new comment"));
     doReturn(mockUpdateComment).when(mockUpdateComment).validate();
     commandLine.handleCommandLine();
     verify(mockUpdateComment).handle();
@@ -407,7 +386,7 @@ class TestCatalogCommands {
     doReturn(mockUpdateName)
         .when(commandLine)
         .newUpdateCatalogName(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", "new_name");
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
eq("new_name"));
     doReturn(mockUpdateName).when(mockUpdateName).validate();
     commandLine.handleCommandLine();
     verify(mockUpdateName).handle();
@@ -428,12 +407,7 @@ class TestCatalogCommands {
 
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
-        .newCatalogDetails(
-            GravitinoCommandLine.DEFAULT_URL,
-            false,
-            Command.OUTPUT_FORMAT_TABLE,
-            "metalake_demo",
-            "catalog");
+        .newCatalogDetails(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     String output = new String(errContent.toByteArray(), 
StandardCharsets.UTF_8).trim();
     assertEquals(
         output,
@@ -459,7 +433,7 @@ class TestCatalogCommands {
     doReturn(mockEnable)
         .when(commandLine)
         .newCatalogEnable(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", false);
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
anyBoolean());
     doReturn(mockEnable).when(mockEnable).validate();
     commandLine.handleCommandLine();
     verify(mockEnable).handle();
@@ -482,7 +456,7 @@ class TestCatalogCommands {
     doReturn(mockEnable)
         .when(commandLine)
         .newCatalogEnable(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", true);
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
anyBoolean());
     doReturn(mockEnable).when(mockEnable).validate();
     commandLine.handleCommandLine();
     verify(mockEnable).handle();
@@ -503,7 +477,7 @@ class TestCatalogCommands {
                 mockCommandLine, mockOptions, CommandEntities.CATALOG, 
CommandActions.UPDATE));
     doReturn(mockDisable)
         .when(commandLine)
-        .newCatalogDisable(GravitinoCommandLine.DEFAULT_URL, false, 
"metalake_demo", "catalog");
+        .newCatalogDisable(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     doReturn(mockDisable).when(mockDisable).validate();
     commandLine.handleCommandLine();
     verify(mockDisable).handle();
@@ -528,9 +502,9 @@ class TestCatalogCommands {
     assertThrows(RuntimeException.class, commandLine::handleCommandLine);
     verify(commandLine, never())
         .newCatalogEnable(
-            GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", 
"catalog", false);
+            any(CommandContext.class), eq("metalake_demo"), eq("catalog"), 
anyBoolean());
     verify(commandLine, never())
-        .newCatalogDisable(GravitinoCommandLine.DEFAULT_URL, false, 
"melake_demo", "catalog");
+        .newCatalogDisable(any(CommandContext.class), eq("metalake_demo"), 
eq("catalog"));
     
assertTrue(errContent.toString().contains(ErrorMessages.INVALID_ENABLE_DISABLE));
   }
 }
diff --git 
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestCommandContext.java 
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestCommandContext.java
new file mode 100644
index 0000000000..8919446826
--- /dev/null
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestCommandContext.java
@@ -0,0 +1,46 @@
+/*
+ * 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.gravitino.cli;
+
+import org.apache.gravitino.cli.commands.Command;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class TestCommandContext {
+
+  @Test
+  public void testCreateCommandContextWithDefaults() {
+    CommandContext commandContext = new 
CommandContext("http://localhost:8080";, false);
+    Assertions.assertEquals("http://localhost:8080";, commandContext.url());
+    Assertions.assertFalse(commandContext.ignoreVersions());
+    Assertions.assertFalse(commandContext.force());
+    Assertions.assertEquals(Command.OUTPUT_FORMAT_PLAIN, 
commandContext.outputFormat());
+  }
+
+  @Test
+  public void testCreateCommandContextWithCustomValues() {
+    CommandContext commandContext =
+        new CommandContext("http://localhost:8080";, true, true, 
Command.OUTPUT_FORMAT_TABLE);
+    Assertions.assertEquals("http://localhost:8080";, commandContext.url());
+    Assertions.assertTrue(commandContext.ignoreVersions());
+    Assertions.assertTrue(commandContext.force());
+    Assertions.assertEquals(Command.OUTPUT_FORMAT_TABLE, 
commandContext.outputFormat());
+  }
+}

Reply via email to