You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by bf...@apache.org on 2012/02/25 23:52:29 UTC

svn commit: r1293718 - in /oodt/trunk/cli/src: main/java/org/apache/oodt/cas/cli/ main/java/org/apache/oodt/cas/cli/option/ main/java/org/apache/oodt/cas/cli/util/ test/org/apache/oodt/cas/cli/util/

Author: bfoster
Date: Sat Feb 25 22:52:28 2012
New Revision: 1293718

URL: http://svn.apache.org/viewvc?rev=1293718&view=rev
Log:
- Re-add performAndQuit support to CAS-CLI

----------------
OODT-387

Modified:
    oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/CmdLineUtility.java
    oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/ActionCmdLineOption.java
    oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/AdvancedCmdLineOption.java
    oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/SimpleCmdLineOption.java
    oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/util/CmdLineUtils.java
    oodt/trunk/cli/src/test/org/apache/oodt/cas/cli/util/TestCmdLineUtils.java

Modified: oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/CmdLineUtility.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/CmdLineUtility.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/CmdLineUtility.java (original)
+++ oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/CmdLineUtility.java Sat Feb 25 22:52:28 2012
@@ -22,7 +22,9 @@ import static org.apache.oodt.cas.cli.ut
 import static org.apache.oodt.cas.cli.util.CmdLineUtils.determineRequired;
 import static org.apache.oodt.cas.cli.util.CmdLineUtils.findFirstActionOption;
 import static org.apache.oodt.cas.cli.util.CmdLineUtils.findHelpOption;
+import static org.apache.oodt.cas.cli.util.CmdLineUtils.findPerformAndQuitOptions;
 import static org.apache.oodt.cas.cli.util.CmdLineUtils.findPrintSupportedActionsOption;
+import static org.apache.oodt.cas.cli.util.CmdLineUtils.handlePerformAndQuitOption;
 import static org.apache.oodt.cas.cli.util.CmdLineUtils.isAdvancedOption;
 
 //JDK imports
@@ -153,11 +155,14 @@ public class CmdLineUtility {
    }
 
    public void printValidationErrors(List<CmdLineOptionValidator.Result> results) {
-      presenter.presentErrorMessage(printer.printOptionValidationErrors(results));
+      presenter.presentErrorMessage(printer
+            .printOptionValidationErrors(results));
    }
 
-   public void printMissingRequiredOptionsError(Set<CmdLineOption> missingOptions) {
-      presenter.presentErrorMessage(printer.printRequiredOptionsMissingError(missingOptions));
+   public void printMissingRequiredOptionsError(
+         Set<CmdLineOption> missingOptions) {
+      presenter.presentErrorMessage(printer
+            .printRequiredOptionsMissingError(missingOptions));
    }
 
    public void printErrorMessage(String errorMessage) {
@@ -177,11 +182,14 @@ public class CmdLineUtility {
          CmdLineArgs cmdLineArgs = parse(args);
          if (cmdLineArgs.getSpecifiedOptions().isEmpty()) {
             printOptionHelp(cmdLineArgs);
-         } else if (!handleHelp(cmdLineArgs) && !handlePrintSupportedActions(cmdLineArgs)) {
+         } else if (!handleHelp(cmdLineArgs)
+               && !handlePrintSupportedActions(cmdLineArgs)) {
             execute(cmdLineArgs);
          }
       } catch (Exception e) {
-         if (debugMode) { throw new RuntimeException(e); }
+         if (debugMode) {
+            throw new RuntimeException(e);
+         }
          printErrorMessage(e.getMessage());
       }
    }
@@ -195,9 +203,9 @@ public class CmdLineUtility {
     * @return The parsed command line arguments in {@link CmdLineArgs} form.
     * @throws IOException
     *            On error parsing command line arguments.
-    * @throws CmdLineConstructionException 
+    * @throws CmdLineConstructionException
     *            On error constructing command line arguments.
-    * @throws CmdLineOptionStoreException 
+    * @throws CmdLineOptionStoreException
     */
    public CmdLineArgs parse(String[] args) throws CmdLineParserException,
          CmdLineActionStoreException, CmdLineConstructionException,
@@ -292,6 +300,15 @@ public class CmdLineUtility {
     */
    public void execute(CmdLineArgs cmdLineArgs)
          throws CmdLineActionExecutionException, CmdLineActionException {
+      Set<CmdLineOptionInstance> performAndQuitOptions = findPerformAndQuitOptions(cmdLineArgs
+            .getSpecifiedOptions());
+      if (!performAndQuitOptions.isEmpty()) {
+         for (CmdLineOptionInstance option : performAndQuitOptions) {
+            handlePerformAndQuitOption(option);
+         }
+         return;
+      }
+
       if (cmdLineArgs.getActionOptionInst() == null) {
          throw new CmdLineActionExecutionException(
                "Must specify an action option!");
@@ -326,8 +343,7 @@ public class CmdLineUtility {
     */
    public static Set<CmdLineOption> check(CmdLineArgs cmdLineArgs) {
       Set<CmdLineOption> requiredOptions = determineRequired(
-            cmdLineArgs.getSpecifiedAction(),
-            cmdLineArgs.getSupportedOptions());
+            cmdLineArgs.getSpecifiedAction(), cmdLineArgs.getSupportedOptions());
       HashSet<CmdLineOption> requiredOptionsNotSet = new HashSet<CmdLineOption>(
             requiredOptions);
       for (CmdLineOptionInstance specifiedOption : cmdLineArgs
@@ -343,15 +359,14 @@ public class CmdLineUtility {
     * @param cmdLineArgs
     *           The {@link CmdLineArgs} which will be validated.
     * @return The {@link CmdLineOptionValidator.Result}s generated when running
-    *    {@link CmdLineOptionValidator}s.
+    *         {@link CmdLineOptionValidator}s.
     */
    public static List<CmdLineOptionValidator.Result> validate(
          CmdLineArgs cmdLineArgs) {
       Validate.notNull(cmdLineArgs);
 
       List<CmdLineOptionValidator.Result> results = Lists.newArrayList();
-      for (CmdLineOptionInstance optionInst : cmdLineArgs
-            .getSpecifiedOptions()) {
+      for (CmdLineOptionInstance optionInst : cmdLineArgs.getSpecifiedOptions()) {
          results.addAll(CmdLineUtils.validate(optionInst));
       }
       return results;
@@ -364,8 +379,7 @@ public class CmdLineUtility {
     *           The {@link CmdLineArgs} whose option handlers will be run.
     */
    public static void handle(CmdLineArgs cmdLineArgs) {
-      for (CmdLineOptionInstance option : cmdLineArgs
-            .getSpecifiedOptions()) {
+      for (CmdLineOptionInstance option : cmdLineArgs.getSpecifiedOptions()) {
          CmdLineUtils.handle(cmdLineArgs.getSpecifiedAction(), option);
       }
    }

Modified: oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/ActionCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/ActionCmdLineOption.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/ActionCmdLineOption.java (original)
+++ oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/ActionCmdLineOption.java Sat Feb 25 22:52:28 2012
@@ -32,7 +32,6 @@ public class ActionCmdLineOption extends
       super(shortOption, longOption, description, hasArgs);
       this.setArgsDescription("action-name");
       this.setType(String.class);
-      this.setPerformAndQuit(false);
       this.setRequired(true);
    }
 }

Modified: oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/AdvancedCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/AdvancedCmdLineOption.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/AdvancedCmdLineOption.java (original)
+++ oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/AdvancedCmdLineOption.java Sat Feb 25 22:52:28 2012
@@ -59,7 +59,7 @@ public class AdvancedCmdLineOption exten
    public boolean hasHandler() {
       return handler != null;
    }
-
+   
    public List<CmdLineOptionValidator> getValidators() {
       return this.validators;
    }

Modified: oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/SimpleCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/SimpleCmdLineOption.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/SimpleCmdLineOption.java (original)
+++ oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/option/SimpleCmdLineOption.java Sat Feb 25 22:52:28 2012
@@ -50,8 +50,6 @@ public class SimpleCmdLineOption impleme
 
    private List<String> staticArgs;
 
-   private boolean performAndQuit;
-
    private boolean isSubOption;
 
    private Class<?> type;
@@ -61,7 +59,6 @@ public class SimpleCmdLineOption impleme
       repeating = false;
       required = false;
       hasArgs = false;
-      performAndQuit = false;
       isSubOption = false;
       type = String.class;
       requirementRules = new ArrayList<RequirementRule>();
@@ -160,14 +157,6 @@ public class SimpleCmdLineOption impleme
       this.requirementRules = requirementRules;
    }
 
-   public boolean isPerformAndQuit() {
-      return performAndQuit;
-   }
-
-   public void setPerformAndQuit(boolean performAndQuit) {
-      this.performAndQuit = performAndQuit;
-   }
-
    public void setIsSubOption(boolean isSubOption) {
       this.isSubOption = isSubOption;
    }

Modified: oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/util/CmdLineUtils.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/util/CmdLineUtils.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/util/CmdLineUtils.java (original)
+++ oodt/trunk/cli/src/main/java/org/apache/oodt/cas/cli/util/CmdLineUtils.java Sat Feb 25 22:52:28 2012
@@ -231,7 +231,7 @@ public class CmdLineUtils {
       Validate.notNull(action);
       Validate.notNull(option);
 
-      if (isHelpOption(option) || isPrintSupportedActionsOption(option)) {
+      if (isPerformAndQuitOption(option)) {
          return false;
       }
 
@@ -257,6 +257,10 @@ public class CmdLineUtils {
       Validate.notNull(action);
       Validate.notNull(option);
 
+      if (isPerformAndQuitOption(option)) {
+         return false;
+      }
+
       for (RequirementRule requirementRule : option.getRequirementRules()) {
          if (requirementRule.getRelation(action) == Relation.OPTIONAL) {
             return true;
@@ -496,10 +500,13 @@ public class CmdLineUtils {
    public static boolean isPerformAndQuitOption(CmdLineOption option) {
       Validate.notNull(option);
 
-      if (isSimpleOption(option)) {
-         return asSimpleOption(option).isPerformAndQuit();
+      if (isHelpOption(option) || isPrintSupportedActionsOption(option)) {
+         return true;
+      } else if (isAdvancedOption(option)) {
+         return asAdvancedOption(option).isPerformAndQuit();
+      } else {
+         return false;
       }
-      return false;
    }
 
    /**
@@ -983,6 +990,29 @@ public class CmdLineUtils {
    }
 
    /**
+    * Runs the {@link CmdLineOptionInstance}'s handler if it a perform and
+    * quit option.
+    * 
+    * @param option
+    *           The {@link CmdLineOptionInstance} whose handler will be run
+    */
+   public static void handlePerformAndQuitOption(CmdLineOptionInstance option) {
+      Validate.notNull(option);
+
+      if (option.isHandleable()
+            && ((HandleableCmdLineOption) option.getOption()).getHandler() != null) {
+         ((HandleableCmdLineOption) option.getOption()).getHandler()
+               .handleOption(null, option);
+      }
+
+      if (option.isGroup()) {
+         for (CmdLineOptionInstance subOption : option.getSubOptions()) {
+            handlePerformAndQuitOption(subOption);
+         }
+      }     
+   }
+
+   /**
     * Runs the {@link CmdLineOptionInstance}'s handler against the given
     * {@link CmdLineAction}.
     * 

Modified: oodt/trunk/cli/src/test/org/apache/oodt/cas/cli/util/TestCmdLineUtils.java
URL: http://svn.apache.org/viewvc/oodt/trunk/cli/src/test/org/apache/oodt/cas/cli/util/TestCmdLineUtils.java?rev=1293718&r1=1293717&r2=1293718&view=diff
==============================================================================
--- oodt/trunk/cli/src/test/org/apache/oodt/cas/cli/util/TestCmdLineUtils.java (original)
+++ oodt/trunk/cli/src/test/org/apache/oodt/cas/cli/util/TestCmdLineUtils.java Sat Feb 25 22:52:28 2012
@@ -19,6 +19,7 @@ package org.apache.oodt.cas.cli.util;
 //OODT static imports
 import static org.apache.oodt.cas.cli.test.util.TestUtils.createAction;
 import static org.apache.oodt.cas.cli.test.util.TestUtils.createActionOption;
+import static org.apache.oodt.cas.cli.test.util.TestUtils.createAdvancedOption;
 import static org.apache.oodt.cas.cli.test.util.TestUtils.createGroupOption;
 import static org.apache.oodt.cas.cli.test.util.TestUtils.createOptionInstance;
 import static org.apache.oodt.cas.cli.test.util.TestUtils.createOptionalRequirementRule;
@@ -54,6 +55,7 @@ import org.apache.oodt.cas.cli.option.Si
 import org.apache.oodt.cas.cli.option.handler.CmdLineOptionHandler;
 import org.apache.oodt.cas.cli.option.validator.AllowedArgsCmdLineOptionValidator;
 import org.apache.oodt.cas.cli.option.validator.CmdLineOptionValidator;
+import org.apache.oodt.cas.cli.test.util.TestUtils;
 import org.apache.oodt.cas.cli.util.CmdLineUtils;
 
 //Google imports
@@ -116,6 +118,7 @@ public class TestCmdLineUtils extends Te
 
       Set<CmdLineOption> optionalOptions = CmdLineUtils.determineOptional(
             action, options);
+      assertEquals(2, optionalOptions.size());
       assertEquals(Sets.newHashSet(passOption, userOption), optionalOptions);
 
       options = Sets.newHashSet(createSimpleOption("pass", true),
@@ -270,10 +273,10 @@ public class TestCmdLineUtils extends Te
    }
 
    public void testFindPerformAndQuitOptions() {
-      SimpleCmdLineOption performAndQuitOption = createSimpleOption("help",
-            false);
+      AdvancedCmdLineOption performAndQuitOption = createAdvancedOption("help",
+            null);
       performAndQuitOption.setPerformAndQuit(true);
-      SimpleCmdLineOption otherOption = createSimpleOption("help", false);
+      AdvancedCmdLineOption otherOption = createAdvancedOption("help", null);
       otherOption.setPerformAndQuit(false);
 
       CmdLineOptionInstance performAndQuitOptionInstance = new CmdLineOptionInstance(
@@ -287,10 +290,10 @@ public class TestCmdLineUtils extends Te
    }
 
    public void testIsPerformAndQuitOption() {
-      SimpleCmdLineOption performAndQuitOption = createSimpleOption("help",
-            false);
+      AdvancedCmdLineOption performAndQuitOption = createAdvancedOption("help",
+            null);
       performAndQuitOption.setPerformAndQuit(true);
-      SimpleCmdLineOption otherOption = createSimpleOption("help", false);
+      AdvancedCmdLineOption otherOption = createAdvancedOption("help", null);
       otherOption.setPerformAndQuit(false);
 
       assertTrue(CmdLineUtils.isPerformAndQuitOption(performAndQuitOption));