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 ea790d7e03 [#6152] refactor: Refactor tag commands in Gravitino CLI 
(#6192)
ea790d7e03 is described below

commit ea790d7e03aa9505734dd337f6e340c04a1d638a
Author: TengYao Chi <[email protected]>
AuthorDate: Tue Jan 14 10:35:03 2025 +0800

    [#6152] refactor: Refactor tag commands in Gravitino CLI (#6192)
    
    ### What changes were proposed in this pull request?
    
    Reduce complexity in `GravitinoCommandLine`
    
    ### Why are the changes needed?
    For readability and maintainability.
    
    Fix: #6152
    
    ### Does this PR introduce _any_ user-facing change?
    
    (Please list the user-facing changes introduced by your change,
    including
    None.
    
    ### How was this patch tested?
    Tested locally.
    
    ---------
    
    Co-authored-by: Justin Mclean <[email protected]>
---
 .../apache/gravitino/cli/GravitinoCommandLine.java | 104 +----------
 .../apache/gravitino/cli/TagCommandHandler.java    | 207 +++++++++++++++++++++
 2 files changed, 208 insertions(+), 103 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 dd98ebf50d..1173720606 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
@@ -25,12 +25,10 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Options;
-import org.apache.gravitino.cli.commands.Command;
 
 /* Gravitino Command line */
 public class GravitinoCommandLine extends TestableCommandLine {
@@ -145,7 +143,7 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     } else if (entity.equals(CommandEntities.GROUP)) {
       new GroupCommandHandler(this, line, command, ignore).handle();
     } else if (entity.equals(CommandEntities.TAG)) {
-      handleTagCommand();
+      new TagCommandHandler(this, line, command, ignore).handle();
     } else if (entity.equals(CommandEntities.ROLE)) {
       new RoleCommandHandler(this, line, command, ignore).handle();
     } else if (entity.equals(CommandEntities.MODEL)) {
@@ -153,106 +151,6 @@ public class GravitinoCommandLine extends 
TestableCommandLine {
     }
   }
 
-  /** Handles the command execution for Tags based on command type and the 
command line options. */
-  protected void handleTagCommand() {
-    String url = getUrl();
-    String auth = getAuth();
-    String userName = line.getOptionValue(GravitinoOptions.LOGIN);
-    FullName name = new FullName(line);
-    String metalake = name.getMetalakeName();
-
-    Command.setAuthenticationMode(auth, userName);
-
-    String[] tags = line.getOptionValues(GravitinoOptions.TAG);
-
-    if (tags != null) {
-      tags = Arrays.stream(tags).distinct().toArray(String[]::new);
-    }
-
-    switch (command) {
-      case CommandActions.DETAILS:
-        newTagDetails(url, ignore, metalake, 
getOneTag(tags)).validate().handle();
-        break;
-
-      case CommandActions.LIST:
-        if (!name.hasCatalogName()) {
-          newListTags(url, ignore, metalake).validate().handle();
-        } else {
-          newListEntityTags(url, ignore, metalake, name).validate().handle();
-        }
-        break;
-
-      case CommandActions.CREATE:
-        String comment = line.getOptionValue(GravitinoOptions.COMMENT);
-        newCreateTags(url, ignore, metalake, tags, 
comment).validate().handle();
-        break;
-
-      case CommandActions.DELETE:
-        boolean forceDelete = line.hasOption(GravitinoOptions.FORCE);
-        newDeleteTag(url, ignore, forceDelete, metalake, 
tags).validate().handle();
-        break;
-
-      case CommandActions.SET:
-        String propertySet = line.getOptionValue(GravitinoOptions.PROPERTY);
-        String valueSet = line.getOptionValue(GravitinoOptions.VALUE);
-        if (propertySet == null && valueSet == null) {
-          newTagEntity(url, ignore, metalake, name, tags).validate().handle();
-        } else {
-          newSetTagProperty(url, ignore, metalake, getOneTag(tags), 
propertySet, valueSet)
-              .validate()
-              .handle();
-        }
-        break;
-
-      case CommandActions.REMOVE:
-        boolean isTag = line.hasOption(GravitinoOptions.TAG);
-        if (!isTag) {
-          boolean forceRemove = line.hasOption(GravitinoOptions.FORCE);
-          newRemoveAllTags(url, ignore, metalake, name, 
forceRemove).validate().handle();
-        } else {
-          String propertyRemove = 
line.getOptionValue(GravitinoOptions.PROPERTY);
-          if (propertyRemove != null) {
-            newRemoveTagProperty(url, ignore, metalake, getOneTag(tags), 
propertyRemove)
-                .validate()
-                .handle();
-          } else {
-            newUntagEntity(url, ignore, metalake, name, 
tags).validate().handle();
-          }
-        }
-        break;
-
-      case CommandActions.PROPERTIES:
-        newListTagProperties(url, ignore, metalake, 
getOneTag(tags)).validate().handle();
-        break;
-
-      case CommandActions.UPDATE:
-        if (line.hasOption(GravitinoOptions.COMMENT)) {
-          String updateComment = line.getOptionValue(GravitinoOptions.COMMENT);
-          newUpdateTagComment(url, ignore, metalake, getOneTag(tags), 
updateComment)
-              .validate()
-              .handle();
-        }
-        if (line.hasOption(GravitinoOptions.RENAME)) {
-          String newName = line.getOptionValue(GravitinoOptions.RENAME);
-          newUpdateTagName(url, ignore, metalake, getOneTag(tags), 
newName).validate().handle();
-        }
-        break;
-
-      default:
-        System.err.println(ErrorMessages.UNSUPPORTED_ACTION);
-        Main.exit(-1);
-        break;
-    }
-  }
-
-  private String getOneTag(String[] tags) {
-    if (tags == null || tags.length > 1) {
-      System.err.println(ErrorMessages.MULTIPLE_TAG_COMMAND_ERROR);
-      Main.exit(-1);
-    }
-    return tags[0];
-  }
-
   private void handleHelpCommand() {
     String helpFile = entity.toLowerCase() + "_help.txt";
 
diff --git 
a/clients/cli/src/main/java/org/apache/gravitino/cli/TagCommandHandler.java 
b/clients/cli/src/main/java/org/apache/gravitino/cli/TagCommandHandler.java
new file mode 100644
index 0000000000..e274c271f9
--- /dev/null
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/TagCommandHandler.java
@@ -0,0 +1,207 @@
+/*
+ * 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 java.util.Arrays;
+import org.apache.commons.cli.CommandLine;
+import org.apache.gravitino.cli.commands.Command;
+
+public class TagCommandHandler extends CommandHandler {
+  private final GravitinoCommandLine gravitinoCommandLine;
+  private final CommandLine line;
+  private final String command;
+  private final boolean ignore;
+  private final String url;
+  private String[] tags;
+  private String metalake;
+
+  public TagCommandHandler(
+      GravitinoCommandLine gravitinoCommandLine, CommandLine line, String 
command, boolean ignore) {
+    this.gravitinoCommandLine = gravitinoCommandLine;
+    this.line = line;
+    this.command = command;
+    this.ignore = ignore;
+    this.url = getUrl(line);
+    this.tags = line.getOptionValues(GravitinoOptions.TAG);
+
+    if (tags != null) {
+      tags = Arrays.stream(tags).distinct().toArray(String[]::new);
+    }
+  }
+
+  @Override
+  public void handle() {
+    String userName = line.getOptionValue(GravitinoOptions.LOGIN);
+    FullName name = new FullName(line);
+    Command.setAuthenticationMode(getAuth(line), userName);
+
+    metalake = name.getMetalakeName();
+
+    if (!executeCommand()) {
+      System.err.println(ErrorMessages.UNSUPPORTED_COMMAND);
+      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.LIST:
+        handleListCommand();
+        return true;
+
+      case CommandActions.CREATE:
+        handleCreateCommand();
+        return true;
+
+      case CommandActions.DELETE:
+        handleDeleteCommand();
+        return true;
+
+      case CommandActions.SET:
+        handleSetCommand();
+        return true;
+
+      case CommandActions.REMOVE:
+        handleRemoveCommand();
+        return true;
+
+      case CommandActions.PROPERTIES:
+        handlePropertiesCommand();
+        return true;
+
+      case CommandActions.UPDATE:
+        handleUpdateCommand();
+        return true;
+
+      default:
+        return false;
+    }
+  }
+
+  /** Handles the "LIST" command. */
+  private void handleListCommand() {
+    FullName name = new FullName(line);
+    if (!name.hasCatalogName()) {
+      gravitinoCommandLine.newListTags(url, ignore, 
metalake).validate().handle();
+    } else {
+      gravitinoCommandLine.newListEntityTags(url, ignore, metalake, 
name).validate().handle();
+    }
+  }
+
+  /** Handles the "DETAILS" command. */
+  private void handleDetailsCommand() {
+    gravitinoCommandLine.newTagDetails(url, ignore, metalake, 
getOneTag(tags)).validate().handle();
+  }
+
+  /** Handles the "CREATE" command. */
+  private void handleCreateCommand() {
+    String comment = line.getOptionValue(GravitinoOptions.COMMENT);
+    gravitinoCommandLine.newCreateTags(url, ignore, metalake, tags, 
comment).validate().handle();
+  }
+
+  /** Handles the "DELETE" command. */
+  private void handleDeleteCommand() {
+    boolean forceDelete = line.hasOption(GravitinoOptions.FORCE);
+    gravitinoCommandLine.newDeleteTag(url, ignore, forceDelete, metalake, 
tags).validate().handle();
+  }
+
+  /** Handles the "SET" command. */
+  private void handleSetCommand() {
+    String property = line.getOptionValue(GravitinoOptions.PROPERTY);
+    String value = line.getOptionValue(GravitinoOptions.VALUE);
+    if (property == null && value == null) {
+      gravitinoCommandLine
+          .newTagEntity(url, ignore, metalake, new FullName(line), tags)
+          .validate()
+          .handle();
+    } else {
+      gravitinoCommandLine
+          .newSetTagProperty(url, ignore, metalake, getOneTag(tags), property, 
value)
+          .validate()
+          .handle();
+    }
+  }
+
+  /** Handles the "REMOVE" command. */
+  private void handleRemoveCommand() {
+    boolean isTag = line.hasOption(GravitinoOptions.TAG);
+    FullName name = new FullName(line);
+    if (!isTag) {
+      boolean forceRemove = line.hasOption(GravitinoOptions.FORCE);
+      gravitinoCommandLine
+          .newRemoveAllTags(url, ignore, metalake, name, forceRemove)
+          .validate()
+          .handle();
+    } else {
+      String propertyRemove = line.getOptionValue(GravitinoOptions.PROPERTY);
+      if (propertyRemove != null) {
+        gravitinoCommandLine
+            .newRemoveTagProperty(url, ignore, metalake, getOneTag(tags), 
propertyRemove)
+            .validate()
+            .handle();
+      } else {
+        gravitinoCommandLine.newUntagEntity(url, ignore, metalake, name, 
tags).validate().handle();
+      }
+    }
+  }
+
+  /** Handles the "PROPERTIES" command. */
+  private void handlePropertiesCommand() {
+    gravitinoCommandLine
+        .newListTagProperties(url, ignore, metalake, getOneTag(tags))
+        .validate()
+        .handle();
+  }
+
+  /** Handles the "UPDATE" command. */
+  private void handleUpdateCommand() {
+
+    if (line.hasOption(GravitinoOptions.COMMENT)) {
+      String updateComment = line.getOptionValue(GravitinoOptions.COMMENT);
+      gravitinoCommandLine
+          .newUpdateTagComment(url, ignore, metalake, getOneTag(tags), 
updateComment)
+          .validate()
+          .handle();
+    }
+    if (line.hasOption(GravitinoOptions.RENAME)) {
+      String newName = line.getOptionValue(GravitinoOptions.RENAME);
+      gravitinoCommandLine
+          .newUpdateTagName(url, ignore, metalake, getOneTag(tags), newName)
+          .validate()
+          .handle();
+    }
+  }
+
+  private String getOneTag(String[] tags) {
+    if (tags == null || tags.length > 1) {
+      System.err.println(ErrorMessages.MULTIPLE_TAG_COMMAND_ERROR);
+      Main.exit(-1);
+    }
+    return tags[0];
+  }
+}

Reply via email to