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 80d6daa3f [#6149] improve(CLI): Refactor column commands in Gavitino 
CLI (#6190)
80d6daa3f is described below

commit 80d6daa3f89464319942052f4bffd9e931095184
Author: TungYuChiang <75083792+tungyuchi...@users.noreply.github.com>
AuthorDate: Mon Jan 13 05:54:16 2025 +0800

    [#6149] improve(CLI): Refactor column commands in Gavitino CLI (#6190)
    
    ### What changes were proposed in this pull request?
    
    Refactor column commands CLI
    
    ### Why are the changes needed?
    
    Fix: #6149
    
    ### Does this PR introduce _any_ user-facing change?
    
    None
    
    ### How was this patch tested?
    
    Tested locally
---
 .../apache/gravitino/cli/ColumnCommandHandler.java | 236 +++++++++++++++++++++
 .../apache/gravitino/cli/GravitinoCommandLine.java | 137 +-----------
 2 files changed, 237 insertions(+), 136 deletions(-)

diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java
new file mode 100644
index 000000000..96f056c1a
--- /dev/null
+++ 
b/clients/cli/src/main/java/org/apache/gravitino/cli/ColumnCommandHandler.java
@@ -0,0 +1,236 @@
+/*
+ * 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 com.google.common.collect.Lists;
+import java.util.List;
+import org.apache.commons.cli.CommandLine;
+import org.apache.gravitino.cli.commands.Command;
+
+/** Handles the command execution for Columns based on command type and the 
command line options. */
+public class ColumnCommandHandler extends CommandHandler {
+  private final GravitinoCommandLine gravitinoCommandLine;
+  private final CommandLine line;
+  private final String command;
+  private final boolean ignore;
+  private final String url;
+  private final FullName name;
+  private final String metalake;
+  private final String catalog;
+  private final String schema;
+  private final String table;
+  private String column;
+
+  /**
+   * Constructs a {@link ColumnCommandHandler} instance.
+   *
+   * @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.
+   */
+  public ColumnCommandHandler(
+      GravitinoCommandLine gravitinoCommandLine, CommandLine line, String 
command, boolean ignore) {
+    this.gravitinoCommandLine = gravitinoCommandLine;
+    this.line = line;
+    this.command = command;
+    this.ignore = ignore;
+
+    this.url = gravitinoCommandLine.getUrl();
+    this.name = new FullName(line);
+    this.metalake = name.getMetalakeName();
+    this.catalog = name.getCatalogName();
+    this.schema = name.getSchemaName();
+    this.table = name.getTableName();
+  }
+
+  /** Handles the command execution logic based on the provided command. */
+  @Override
+  protected void handle() {
+    String userName = line.getOptionValue(GravitinoOptions.LOGIN);
+    Command.setAuthenticationMode(gravitinoCommandLine.getAuth(), userName);
+
+    List<String> missingEntities = Lists.newArrayList();
+    if (catalog == null) missingEntities.add(CommandEntities.CATALOG);
+    if (schema == null) missingEntities.add(CommandEntities.SCHEMA);
+    if (table == null) missingEntities.add(CommandEntities.TABLE);
+
+    if (CommandActions.LIST.equals(command)) {
+      checkEntities(missingEntities);
+      handleListCommand();
+      return;
+    }
+
+    this.column = name.getColumnName();
+    if (column == null) missingEntities.add(CommandEntities.COLUMN);
+    checkEntities(missingEntities);
+
+    if (!executeCommand()) {
+      System.err.println(ErrorMessages.UNSUPPORTED_ACTION);
+      Main.exit(-1);
+    }
+  }
+
+  /**
+   * Executes the specific command based on the command type.
+   *
+   * @return true if the command is supported, false otherwise
+   */
+  private boolean executeCommand() {
+    switch (command) {
+      case CommandActions.DETAILS:
+        handleDetailsCommand();
+        return true;
+
+      case CommandActions.CREATE:
+        handleCreateCommand();
+        return true;
+
+      case CommandActions.DELETE:
+        handleDeleteCommand();
+        return true;
+
+      case CommandActions.UPDATE:
+        handleUpdateCommand();
+        return true;
+
+      default:
+        return false;
+    }
+  }
+
+  /** Handles the "DETAILS" command. */
+  private void handleDetailsCommand() {
+    if (line.hasOption(GravitinoOptions.AUDIT)) {
+      gravitinoCommandLine
+          .newColumnAudit(url, ignore, metalake, catalog, schema, table, 
column)
+          .validate()
+          .handle();
+    } else {
+      System.err.println(ErrorMessages.UNSUPPORTED_ACTION);
+      Main.exit(-1);
+    }
+  }
+
+  /** Handles the "CREATE" command. */
+  private void handleCreateCommand() {
+    String datatype = line.getOptionValue(GravitinoOptions.DATATYPE);
+    String comment = line.getOptionValue(GravitinoOptions.COMMENT);
+    String position = line.getOptionValue(GravitinoOptions.POSITION);
+    boolean nullable =
+        !line.hasOption(GravitinoOptions.NULL)
+            || line.getOptionValue(GravitinoOptions.NULL).equals("true");
+    boolean autoIncrement =
+        line.hasOption(GravitinoOptions.AUTO)
+            && line.getOptionValue(GravitinoOptions.AUTO).equals("true");
+    String defaultValue = line.getOptionValue(GravitinoOptions.DEFAULT);
+
+    gravitinoCommandLine
+        .newAddColumn(
+            url,
+            ignore,
+            metalake,
+            catalog,
+            schema,
+            table,
+            column,
+            datatype,
+            comment,
+            position,
+            nullable,
+            autoIncrement,
+            defaultValue)
+        .validate()
+        .handle();
+  }
+
+  /** Handles the "DELETE" command. */
+  private void handleDeleteCommand() {
+    gravitinoCommandLine
+        .newDeleteColumn(url, ignore, metalake, catalog, schema, table, column)
+        .validate()
+        .handle();
+  }
+
+  /** Handles the "UPDATE" command. */
+  private void handleUpdateCommand() {
+    if (line.hasOption(GravitinoOptions.COMMENT)) {
+      String comment = line.getOptionValue(GravitinoOptions.COMMENT);
+      gravitinoCommandLine
+          .newUpdateColumnComment(url, ignore, metalake, catalog, schema, 
table, column, comment)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.RENAME)) {
+      String newName = line.getOptionValue(GravitinoOptions.RENAME);
+      gravitinoCommandLine
+          .newUpdateColumnName(url, ignore, metalake, catalog, schema, table, 
column, newName)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.DATATYPE) && 
!line.hasOption(GravitinoOptions.DEFAULT)) {
+      String datatype = line.getOptionValue(GravitinoOptions.DATATYPE);
+      gravitinoCommandLine
+          .newUpdateColumnDatatype(url, ignore, metalake, catalog, schema, 
table, column, datatype)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.POSITION)) {
+      String position = line.getOptionValue(GravitinoOptions.POSITION);
+      gravitinoCommandLine
+          .newUpdateColumnPosition(url, ignore, metalake, catalog, schema, 
table, column, position)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.NULL)) {
+      boolean nullable = 
line.getOptionValue(GravitinoOptions.NULL).equals("true");
+      gravitinoCommandLine
+          .newUpdateColumnNullability(
+              url, ignore, metalake, catalog, schema, table, column, nullable)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.AUTO)) {
+      boolean autoIncrement = 
line.getOptionValue(GravitinoOptions.AUTO).equals("true");
+      gravitinoCommandLine
+          .newUpdateColumnAutoIncrement(
+              url, ignore, metalake, catalog, schema, table, column, 
autoIncrement)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.DEFAULT)) {
+      String defaultValue = line.getOptionValue(GravitinoOptions.DEFAULT);
+      String dataType = line.getOptionValue(GravitinoOptions.DATATYPE);
+      gravitinoCommandLine
+          .newUpdateColumnDefault(
+              url, ignore, metalake, catalog, schema, table, column, 
defaultValue, dataType)
+          .validate()
+          .handle();
+    }
+  }
+
+  /** Handles the "LIST" command. */
+  private void handleListCommand() {
+    gravitinoCommandLine
+        .newListColumns(url, ignore, metalake, catalog, schema, table)
+        .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 9c9ce6810..b883502e8 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
@@ -129,7 +129,7 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     } else if (line.hasOption(GravitinoOptions.OWNER)) {
       new OwnerCommandHandler(this, line, command, ignore, entity).handle();
     } else if (entity.equals(CommandEntities.COLUMN)) {
-      handleColumnCommand();
+      new ColumnCommandHandler(this, line, command, ignore).handle();
     } else if (entity.equals(CommandEntities.TABLE)) {
       new TableCommandHandler(this, line, command, ignore).handle();
     } else if (entity.equals(CommandEntities.SCHEMA)) {
@@ -401,141 +401,6 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     return tags[0];
   }
 
-  /**
-   * Handles the command execution for Columns based on command type and the 
command line options.
-   */
-  private void handleColumnCommand() {
-    String url = getUrl();
-    String auth = getAuth();
-    String userName = line.getOptionValue(GravitinoOptions.LOGIN);
-    FullName name = new FullName(line);
-    String metalake = name.getMetalakeName();
-    String catalog = name.getCatalogName();
-    String schema = name.getSchemaName();
-    String table = name.getTableName();
-
-    Command.setAuthenticationMode(auth, userName);
-
-    List<String> missingEntities = Lists.newArrayList();
-    if (catalog == null) missingEntities.add(CommandEntities.CATALOG);
-    if (schema == null) missingEntities.add(CommandEntities.SCHEMA);
-    if (table == null) missingEntities.add(CommandEntities.TABLE);
-
-    if (CommandActions.LIST.equals(command)) {
-      checkEntities(missingEntities);
-      newListColumns(url, ignore, metalake, catalog, schema, 
table).validate().handle();
-      return;
-    }
-
-    String column = name.getColumnName();
-    if (column == null) missingEntities.add(CommandEntities.COLUMN);
-    checkEntities(missingEntities);
-
-    switch (command) {
-      case CommandActions.DETAILS:
-        if (line.hasOption(GravitinoOptions.AUDIT)) {
-          newColumnAudit(url, ignore, metalake, catalog, schema, table, 
column).validate().handle();
-        } else {
-          System.err.println(ErrorMessages.UNSUPPORTED_ACTION);
-          Main.exit(-1);
-        }
-        break;
-
-      case CommandActions.CREATE:
-        {
-          String datatype = line.getOptionValue(GravitinoOptions.DATATYPE);
-          String comment = line.getOptionValue(GravitinoOptions.COMMENT);
-          String position = line.getOptionValue(GravitinoOptions.POSITION);
-          boolean nullable =
-              !line.hasOption(GravitinoOptions.NULL)
-                  || line.getOptionValue(GravitinoOptions.NULL).equals("true");
-          boolean autoIncrement =
-              line.hasOption(GravitinoOptions.AUTO)
-                  && line.getOptionValue(GravitinoOptions.AUTO).equals("true");
-          String defaultValue = line.getOptionValue(GravitinoOptions.DEFAULT);
-
-          newAddColumn(
-                  url,
-                  ignore,
-                  metalake,
-                  catalog,
-                  schema,
-                  table,
-                  column,
-                  datatype,
-                  comment,
-                  position,
-                  nullable,
-                  autoIncrement,
-                  defaultValue)
-              .validate()
-              .handle();
-          break;
-        }
-
-      case CommandActions.DELETE:
-        newDeleteColumn(url, ignore, metalake, catalog, schema, table, 
column).validate().handle();
-        break;
-
-      case CommandActions.UPDATE:
-        {
-          if (line.hasOption(GravitinoOptions.COMMENT)) {
-            String comment = line.getOptionValue(GravitinoOptions.COMMENT);
-            newUpdateColumnComment(url, ignore, metalake, catalog, schema, 
table, column, comment)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.RENAME)) {
-            String newName = line.getOptionValue(GravitinoOptions.RENAME);
-            newUpdateColumnName(url, ignore, metalake, catalog, schema, table, 
column, newName)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.DATATYPE)
-              && !line.hasOption(GravitinoOptions.DEFAULT)) {
-            String datatype = line.getOptionValue(GravitinoOptions.DATATYPE);
-            newUpdateColumnDatatype(url, ignore, metalake, catalog, schema, 
table, column, datatype)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.POSITION)) {
-            String position = line.getOptionValue(GravitinoOptions.POSITION);
-            newUpdateColumnPosition(url, ignore, metalake, catalog, schema, 
table, column, position)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.NULL)) {
-            boolean nullable = 
line.getOptionValue(GravitinoOptions.NULL).equals("true");
-            newUpdateColumnNullability(
-                    url, ignore, metalake, catalog, schema, table, column, 
nullable)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.AUTO)) {
-            boolean autoIncrement = 
line.getOptionValue(GravitinoOptions.AUTO).equals("true");
-            newUpdateColumnAutoIncrement(
-                    url, ignore, metalake, catalog, schema, table, column, 
autoIncrement)
-                .validate()
-                .handle();
-          }
-          if (line.hasOption(GravitinoOptions.DEFAULT)) {
-            String defaultValue = 
line.getOptionValue(GravitinoOptions.DEFAULT);
-            String dataType = line.getOptionValue(GravitinoOptions.DATATYPE);
-            newUpdateColumnDefault(
-                    url, ignore, metalake, catalog, schema, table, column, 
defaultValue, dataType)
-                .validate()
-                .handle();
-          }
-          break;
-        }
-
-      default:
-        System.err.println(ErrorMessages.UNSUPPORTED_ACTION);
-        Main.exit(-1);
-        break;
-    }
-  }
-
   private void handleHelpCommand() {
     String helpFile = entity.toLowerCase() + "_help.txt";
 

Reply via email to