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 2011/10/13 03:19:10 UTC

svn commit: r1182632 [1/2] - in /oodt/branches/cas-cl/src: main/java/org/apache/oodt/cas/cl/ main/java/org/apache/oodt/cas/cl/action/ main/java/org/apache/oodt/cas/cl/help/formatter/ main/java/org/apache/oodt/cas/cl/help/printer/ main/java/org/apache/o...

Author: bfoster
Date: Thu Oct 13 01:19:08 2011
New Revision: 1182632

URL: http://svn.apache.org/viewvc?rev=1182632&view=rev
Log:
- ditched generics
- cleaned up CmdLineOptionHandler interface
- introduced RequirementRule interface
- CmdLineOption is now an interface
- started to add in CmdLineAction support

Added:
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java   (contents, props changed)
      - copied, changed from r1180819, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineAction.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java   (contents, props changed)
      - copied, changed from r1182153, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java   (with props)
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java   (contents, props changed)
      - copied, changed from r1180819, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/RequirementRule.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java   (with props)
    oodt/branches/cas-cl/src/test/
    oodt/branches/cas-cl/src/test/org/
    oodt/branches/cas-cl/src/test/org/apache/
    oodt/branches/cas-cl/src/test/org/apache/oodt/
    oodt/branches/cas-cl/src/test/org/apache/oodt/cas/
    oodt/branches/cas-cl/src/test/org/apache/oodt/cas/cl/
    oodt/branches/cas-cl/src/test/org/apache/oodt/cas/cl/option/
    oodt/branches/cas-cl/src/test/org/apache/oodt/cas/cl/option/util/
    oodt/branches/cas-cl/src/test/org/apache/oodt/cas/cl/option/util/TestCmdLineOptionUtils.java   (with props)
Removed:
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineAction.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineSubOption.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/RequirementRule.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/StdCmdLineOptionHandler.java
Modified:
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/CmdLineUtility.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/CmdLineOptionHelpFormatter.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/StdCmdLineOptionHelpFormatter.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionHelpPrinter.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionSpecificHelpPrinter.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOptionInstance.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionBeanHandler.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionHandler.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/CmdLineOptionStore.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/spring/SpringCmdLineOptionStore.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/CmdLineOptionUtils.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/AllowedArgsCmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ArgRegExpCmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ClassExistsCmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/CmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/FileExistCmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/NoRestrictionsCmdLineOptionValidator.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/CmdLineOptionParser.java
    oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/StdCmdLineOptionParser.java

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/CmdLineUtility.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/CmdLineUtility.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/CmdLineUtility.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/CmdLineUtility.java Thu Oct 13 01:19:08 2011
@@ -1,5 +1,10 @@
 package org.apache.oodt.cas.cl;
 
+import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.findSpecifiedHelpOption;
+import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.isHelpOption;
+import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.validateAndHandleInstances;
+
+import java.io.IOException;
 import java.util.Set;
 
 import org.apache.commons.lang.Validate;
@@ -11,10 +16,14 @@ import org.apache.oodt.cas.cl.help.print
 import org.apache.oodt.cas.cl.help.printer.CmdLineOptionSpecificHelpPrinter;
 import org.apache.oodt.cas.cl.help.printer.StdCmdLineOptionHelpPrinter;
 import org.apache.oodt.cas.cl.help.printer.StdCmdLineOptionSpecificHelpPrinter;
+import org.apache.oodt.cas.cl.option.ActionCmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
+import org.apache.oodt.cas.cl.option.GroupCmdLineOption;
+import org.apache.oodt.cas.cl.option.HelpCmdLineOption;
 import org.apache.oodt.cas.cl.option.store.CmdLineOptionStore;
 import org.apache.oodt.cas.cl.option.store.spring.SpringCmdLineOptionStoreFactory;
+import org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils;
 import org.apache.oodt.cas.cl.parser.CmdLineOptionParser;
 import org.apache.oodt.cas.cl.parser.StdCmdLineOptionParser;
 
@@ -26,7 +35,9 @@ public class CmdLineUtility {
 	private CmdLineOptionSpecificHelpPrinter specificHelpPrinter;
 	private CmdLineOptionHelpFormatter helpFormatter;
 	private CmdLineOptionHelpPresenter helpPresenter;
-
+	private boolean requireHelp;
+	private boolean requireAction;
+	
 	public CmdLineUtility() {
 		parser = new StdCmdLineOptionParser();
 		optionStore = new SpringCmdLineOptionStoreFactory().createStore();
@@ -77,47 +88,59 @@ public class CmdLineUtility {
 		this.helpPresenter = helpPresenter;
 	}
 
-	public void handleCmdLine(String[] args) {
+	private void printHelp(Set<CmdLineOption> validOptions) {
+		helpPresenter.presentHelp(helpFormatter.format(helpPrinter, validOptions));
+	}
+
+	private void printSpecificHelp(Set<CmdLineOption> validOptions, CmdLineOptionInstance specifiedOption) {
+		helpPresenter.presentSpecificHelp(helpFormatter.format(
+				specificHelpPrinter, validOptions, specifiedOption));
+	}
+
+	public void handleCmdLine(String[] args) throws IOException {
 		Validate.notNull(parser);
 		Validate.notNull(optionStore);
 
+		// Load supported options.
 		Set<CmdLineOption> validOptions = optionStore.loadSupportedOptions();
-		ensureHasHelpOption(validOptions);
-//		Set<? extends CmdLineOptionInstance<?>> specifiedOptions = parser.parse(args, validOptions);
-//
-//		if (specifiedOptions.size() == 1 && specifiedOptions.iterator().next().getOption().isHelp()) {
-//			if (args.length > j + 1) {
-//				String[] helpArgs = new String[args.length - j - 1];
-//				System.arraycopy(args, j + 1, helpArgs, 0, helpArgs.length);
-//				helpPresenter.presentSpecificHelp(helpFormatter.format(
-//						specificHelpPrinter, validOptions, parse(helpArgs).iterator()
-//								.next()));
-//			} else {
-//				helpPresenter.presentHelp(helpFormatter.format(helpPrinter,
-//						validOptions));
-//			}	
-//		}
-//		// check if is a perform and quit option
-//		if (curOption.isPerformAndQuit()) {
-//			curOption.getHandler().handleOption(curOption, values);
-//			System.exit(0);
-//		}
+		if (requireHelp) {
+			ensureHasHelpOption(validOptions);
+		}
+		if (requireAction) {
+			ensureHasActionOption(validOptions);
+		}
 		
+		// Parse command line arguments.
+		Set<CmdLineOptionInstance> specifiedOptions = parser.parse(args, validOptions);
+
+		// Check for help option and handle it if specified then return.
+		GroupCmdLineOptionInstance helpOption = findSpecifiedHelpOption(specifiedOptions);
+		if (helpOption != null) {
+			if (helpOption.getValues().isEmpty()) {
+				printHelp(validOptions);
+			} else {
+				printSpecificHelp(validOptions, helpOption.getValues().get(0));
+			}
+			return;
+		}
+
+		// Otherwise, validate and handle options.
+		validateAndHandleInstances(validOptions, specifiedOptions);
 	}
 
-	private void ensureHasHelpOption(Set<CmdLineOption> validOptions) {
-		Validate.notNull(validOptions);
+	private void ensureHasHelpOption(Set<CmdLineOption> options) {
+		Validate.notNull(options);
 
-		if (validOptions != null) {
-			for (CmdLineOption validOption : validOptions) {
-				if (validOption.isHelp()) {
-					return;
-				}
-			}
+		if (CmdLineOptionUtils.findHelpOption(options) == null) {
+			options.add(new HelpCmdLineOption());
 		}
+	}
 
-		CmdLineOption helpOption = new CmdLineOption("h", "help", "Prints Help Menu", false);
-		helpOption.setHelp(true);
-		validOptions.add(helpOption);
+	private void ensureHasActionOption(Set<CmdLineOption> options) {
+		Validate.notNull(options);
+
+		if (CmdLineOptionUtils.findActionOption(options) == null) {
+			options.add(new ActionCmdLineOption());
+		}
 	}
 }

Copied: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java (from r1180819, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineAction.java)
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java?p2=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java&p1=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineAction.java&r1=1180819&r2=1182632&rev=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineAction.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java Thu Oct 13 01:19:08 2011
@@ -1,4 +1,4 @@
-package org.apache.oodt.cas.cl.option;
+package org.apache.oodt.cas.cl.action;
 
 public abstract class CmdLineAction {
 

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/action/CmdLineAction.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/CmdLineOptionHelpFormatter.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/CmdLineOptionHelpFormatter.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/CmdLineOptionHelpFormatter.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/CmdLineOptionHelpFormatter.java Thu Oct 13 01:19:08 2011
@@ -10,9 +10,9 @@ import org.apache.oodt.cas.cl.option.Cmd
 public interface CmdLineOptionHelpFormatter {
 
 	public String format(CmdLineOptionHelpPrinter helpPrinter,
-			Set<CmdLineOption<?>> options);
+			Set<CmdLineOption> options);
 
 	public String format(CmdLineOptionSpecificHelpPrinter specificHelpPrinter,
-			Set<CmdLineOption<?>> options, CmdLineOptionInstance<?> specifiedOption);
+			Set<CmdLineOption> options, CmdLineOptionInstance specifiedOption);
 
 }

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/StdCmdLineOptionHelpFormatter.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/StdCmdLineOptionHelpFormatter.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/StdCmdLineOptionHelpFormatter.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/formatter/StdCmdLineOptionHelpFormatter.java Thu Oct 13 01:19:08 2011
@@ -1,8 +1,6 @@
 package org.apache.oodt.cas.cl.help.formatter;
 
-import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.getAlwaysRequiredOptions;
-import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.getConditionallyRequiredOptions;
-import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.getOptionalOptions;
+import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.getRequiredOptions;
 import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.sortOptionsByRequiredStatus;
 
 import java.util.List;
@@ -13,15 +11,14 @@ import org.apache.oodt.cas.cl.help.print
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
 
-
 public class StdCmdLineOptionHelpFormatter implements CmdLineOptionHelpFormatter {
 
 	public String format(CmdLineOptionHelpPrinter helpPrinter,
-			Set<CmdLineOption<?>> options) {
+			Set<CmdLineOption> options) {
 		StringBuffer sb = new StringBuffer("");
-		List<CmdLineOption<?>> sortedOptions = sortOptionsByRequiredStatus(options);
+		List<CmdLineOption> sortedOptions = sortOptionsByRequiredStatus(options);
 		sb.append(helpPrinter.getHeader()).append("\n");
-		for (CmdLineOption<?> option : sortedOptions) {
+		for (CmdLineOption option : sortedOptions) {
 			sb.append(helpPrinter.getOptionHelp(option)).append("\n");
 		}
 		sb.append(helpPrinter.getFooter()).append("\n");
@@ -29,22 +26,22 @@ public class StdCmdLineOptionHelpFormatt
 	}
 
 	public String format(CmdLineOptionSpecificHelpPrinter specificHelpPrinter,
-			Set<CmdLineOption<?>> options, CmdLineOptionInstance<?> specifiedOption) {
+			Set<CmdLineOption> options, CmdLineOptionInstance specifiedOption) {
 		StringBuffer sb = new StringBuffer("");
 		sb.append(specificHelpPrinter.getHeader(specifiedOption)).append("\n");
 
 		sb.append(specificHelpPrinter.getRequiredSubHeader(specifiedOption)).append("\n");
-		Set<CmdLineOption<?>> requiredOptions = getAlwaysRequiredOptions(options);
+		Set<CmdLineOption> requiredOptions = getAlwaysRequiredOptions(options);
 		requiredOptions.addAll(getConditionallyRequiredOptions(options, specifiedOption));
-		List<CmdLineOption<?>> sortedRequiredOptions = sortOptionsByRequiredStatus(requiredOptions);
-		for (CmdLineOption<?> option : sortedRequiredOptions) {
+		List<CmdLineOption> sortedRequiredOptions = sortOptionsByRequiredStatus(requiredOptions);
+		for (CmdLineOption option : sortedRequiredOptions) {
 			sb.append(specificHelpPrinter.getRequiredOptionHelp(option, specifiedOption)).append("\n");
 		}
 
 		sb.append(specificHelpPrinter.getOptionalSubHeader(specifiedOption)).append("\n");
-		Set<CmdLineOption<?>> optionalOptions = getOptionalOptions(options, specifiedOption);
-		List<CmdLineOption<?>> sortedOptionalOptions = sortOptionsByRequiredStatus(optionalOptions);
-		for (CmdLineOption<?> option : sortedOptionalOptions) {
+		Set<CmdLineOption> optionalOptions = getOptionallyRequiredOptions(options, specifiedOption);
+		List<CmdLineOption> sortedOptionalOptions = sortOptionsByRequiredStatus(optionalOptions);
+		for (CmdLineOption option : sortedOptionalOptions) {
 			sb.append(specificHelpPrinter.getOptionalOptionHelp(option, specifiedOption)).append("\n");
 		}
 

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionHelpPrinter.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionHelpPrinter.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionHelpPrinter.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionHelpPrinter.java Thu Oct 13 01:19:08 2011
@@ -3,6 +3,7 @@ package org.apache.oodt.cas.cl.help.prin
 import static org.apache.oodt.cas.cl.option.util.CmdLineOptionUtils.getFormattedString;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.oodt.cas.cl.option.AdvancedCmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 
 public class StdCmdLineOptionHelpPrinter implements CmdLineOptionHelpPrinter {
@@ -17,13 +18,17 @@ public class StdCmdLineOptionHelpPrinter
 	}
 
 	public String getOptionHelp(CmdLineOption option) {
-		String argName = option.hasArgs() ? " <" + option.getOptionArgName() + ">" : "";
+		String argName = option.hasArgs() ? " <" + option.getArgsDescription() + ">" : "";
 		String optionUsage = "-"
 				+ StringUtils.rightPad(option.getShortOption() + ",", 7) + "--"
 				+ StringUtils.rightPad((option.getLongOption() + argName), 49)
 				+ option.getDescription();
-		optionUsage += getFormattedString(option.getHandler().getCustomOptionHelp(option),
-				62, 113);
+		if (option instanceof AdvancedCmdLineOption) {
+			if (((AdvancedCmdLineOption) option).hasHandler()) {
+				optionUsage += getFormattedString(((AdvancedCmdLineOption) option).getHandler().getHelp(option),
+						62, 113);
+			}
+		}
 
 		if (option.isRequired()) {
 			optionUsage = " " + optionUsage;

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionSpecificHelpPrinter.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionSpecificHelpPrinter.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionSpecificHelpPrinter.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/help/printer/StdCmdLineOptionSpecificHelpPrinter.java Thu Oct 13 01:19:08 2011
@@ -3,7 +3,8 @@ package org.apache.oodt.cas.cl.help.prin
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
 
-public class StdCmdLineOptionSpecificHelpPrinter implements CmdLineOptionSpecificHelpPrinter {
+public class StdCmdLineOptionSpecificHelpPrinter implements
+		CmdLineOptionSpecificHelpPrinter {
 
 	public String getHeader(CmdLineOptionInstance specifiedOption) {
 		return "Option Help when option '--"
@@ -15,7 +16,8 @@ public class StdCmdLineOptionSpecificHel
 		return " - Required:";
 	}
 
-	public String getRequiredOptionHelp(CmdLineOption option, CmdLineOptionInstance specifiedOption) {
+	public String getRequiredOptionHelp(CmdLineOption option,
+			CmdLineOptionInstance specifiedOption) {
 		return getOptionHelp(option, specifiedOption);
 	}
 
@@ -23,7 +25,8 @@ public class StdCmdLineOptionSpecificHel
 		return " - Optional:";
 	}
 
-	public String getOptionalOptionHelp(CmdLineOption option, CmdLineOptionInstance specifiedOption) {
+	public String getOptionalOptionHelp(CmdLineOption option,
+			CmdLineOptionInstance specifiedOption) {
 		return getOptionHelp(option, specifiedOption);
 	}
 
@@ -33,8 +36,8 @@ public class StdCmdLineOptionSpecificHel
 
 	private String getOptionHelp(CmdLineOption option,
 			CmdLineOptionInstance specifiedOption) {
-		return "    -" + option.getShortOption() + " [--"
-				+ option.getLongOption() + "] "
-				+ (option.hasArgs() ? "<" + option.getOptionArgName() + ">" : "");
+		return "    -" + option.getShortOption() + " [--" + option.getLongOption()
+				+ "] "
+				+ (option.hasArgs() ? "<" + option.getArgsDescription() + ">" : "");
 	}
 }

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,17 @@
+package org.apache.oodt.cas.cl.option;
+
+public class ActionCmdLineOption extends SimpleCmdLineOption {
+
+	public ActionCmdLineOption() {
+		this("a", "action", "This is the name of the action to trigger", true);
+	}
+
+	public ActionCmdLineOption(String shortOption, String longOption, String description, boolean hasArgs) {
+		super(shortOption, longOption, description, hasArgs);
+		this.setArgsDescription("action-name");
+		this.setRequired(true);
+		this.setType(String.class);
+		this.setPerformAndQuit(false);
+	}
+
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ActionCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,61 @@
+package org.apache.oodt.cas.cl.option;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.oodt.cas.cl.option.handler.CmdLineOptionHandler;
+import org.apache.oodt.cas.cl.option.validator.CmdLineOptionValidator;
+
+public class AdvancedCmdLineOption extends SimpleCmdLineOption implements ValidatableCmdLineOption, HandleableCmdLineOption {
+
+	private boolean isAction;
+	private CmdLineOptionHandler handler;
+	private List<CmdLineOptionValidator> validators;
+	private boolean performAndQuit;
+
+	public AdvancedCmdLineOption() {
+		super();
+		validators = new ArrayList<CmdLineOptionValidator>();
+	}
+
+	public AdvancedCmdLineOption(String shortOption, String longOption, String description, boolean hasArgs) {
+		super(shortOption, longOption, description, hasArgs);
+	}
+
+	public void setAction(boolean isAction) {
+		this.isAction = isAction;
+	}
+
+	public boolean isAction() {
+		return isAction;
+	}
+
+	public void setHandler(CmdLineOptionHandler handler) {
+		this.handler = handler;
+	}
+
+	public CmdLineOptionHandler getHandler() {
+		return handler;
+	}
+
+	public boolean hasHandler() {
+		return handler != null;
+	}
+
+	public List<CmdLineOptionValidator> getValidators() {
+		return this.validators;
+	}
+
+	public void setValidators(List<CmdLineOptionValidator> validators) {
+		this.validators = validators;
+	}
+
+	public boolean isPerformAndQuit() {
+		return performAndQuit;
+	}
+
+	public void setPerformAndQuit(boolean performAndQuit) {
+		this.performAndQuit = performAndQuit;
+	}
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/AdvancedCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -18,195 +18,52 @@
 package org.apache.oodt.cas.cl.option;
 
 //JDK imports
-import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
 
 //OODT imports
-import org.apache.oodt.cas.cl.option.handler.CmdLineOptionHandler;
-import org.apache.oodt.cas.cl.option.validator.CmdLineOptionValidator;
+import org.apache.oodt.cas.cl.option.require.RequirementRule;
 
 /**
- *
  * @author bfoster
  * @version $Revision$
  */
-public class CmdLineOption<T> implements Comparable<CmdLineOption<T>> {
+public interface CmdLineOption extends Comparable<CmdLineOption> {
 
-	private String shortOption;
+	public void setLongOption(String longOption);
 
-	private String longOption;
+	public String getLongOption();
 
-	private String description;
+	public void setShortOption(String shortOption);
 
-	private String optionArgName;
+	public String getShortOption();
 
-	private boolean required;
+	public void setDescription(String description);
 
-	private List<RequirementRule> requirementRules;
+	public String getDescription();
 
-	private boolean hasArgs;
+	public void setType(Class<?> type);
 
-	private boolean performAndQuit;
+	public Class<?> getType();
 
-	private Class<?> type;
+	public void setHasArgs(boolean hasArgs);
 
-	private CmdLineOptionHandler<T> handler;
+	public boolean hasArgs();
 
-	private List<CmdLineOptionValidator<T>> validators;
+	public void setArgsDescription(String argDescription);
 
-	private boolean isHelp;
+	public String getArgsDescription();
 
-	private Set<CmdLineSubOption> subOptions;
+	public void setRequired(boolean required);
 
-	public CmdLineOption() {
-		optionArgName = "arg";
-		required = false;
-		hasArgs = false;
-		performAndQuit = false;
-		type = String.class;
-		requirementRules = new ArrayList<RequirementRule>();
-		validators = new LinkedList<CmdLineOptionValidator<T>>();
-	}
+	public boolean isRequired();
 
-	public CmdLineOption(String shortOption, String longOption,
-			String description, boolean hasArgs) {
-		this();
-		this.shortOption = shortOption;
-		this.longOption = longOption;
-		this.description = description;
-		this.hasArgs = hasArgs;
-	}
+	public void setRequirementRules(List<RequirementRule> requirementRules);
 
-	public Class<?> getType() {
-		return type;
-	}
+	public List<RequirementRule> getRequirementRules();
 
-	public void setType(Class<?> type) {
-		this.type = type;
-	}
+	public int compareTo(CmdLineOption cmdLineOption);
 
-	public void setHandler(CmdLineOptionHandler<T> handler) {
-		this.handler = handler;
-	}
+	public boolean equals(Object obj);
 
-	public CmdLineOptionHandler<T> getHandler() {
-		return this.handler;
-	}
-
-	public List<CmdLineOptionValidator<T>> getValidators() {
-		return this.validators;
-	}
-
-	public void setValidators(List<CmdLineOptionValidator<T>> validators) {
-		this.validators = validators;
-	}
-
-	public String getShortOption() {
-		return shortOption;
-	}
-
-	public void setShortOption(String shortOption) {
-		this.shortOption = shortOption;
-	}
-
-	public String getLongOption() {
-		return longOption;
-	}
-
-	public void setLongOption(String longOption) {
-		this.longOption = longOption;
-	}
-
-	public String getDescription() {
-		return description;
-	}
-
-	public void setDescription(String description) {
-		this.description = description;
-	}
-
-	public boolean hasArgs() {
-		return hasArgs;
-	}
-
-	public void setHasArgs(boolean hasArgs) {
-		this.hasArgs = hasArgs;
-	}
-
-	public void setOptionArgName(String optionArgName) {
-		this.optionArgName = optionArgName;
-	}
-
-	public String getOptionArgName() {
-		return optionArgName;
-	}
-
-	public void setRequired(boolean required) {
-		this.required = required;
-	}
-
-	public boolean isRequired() {
-		return required;
-	}
-
-	public List<RequirementRule> getRequirementRules() {
-		return this.requirementRules;
-	}
-
-	public void setRequirementRules(List<RequirementRule> requirementRules) {
-		this.requirementRules = requirementRules;
-	}
-
-	public boolean isPerformAndQuit() {
-		return performAndQuit;
-	}
-
-	public void setPerformAndQuit(boolean performAndQuit) {
-		this.performAndQuit = performAndQuit;
-	}
-
-	public void setHelp(boolean isHelp) {
-		this.isHelp = isHelp;
-	}
-
-	public boolean isHelp() {
-		return isHelp;
-	}
-
-	public void setSubOptions(Set<CmdLineSubOption> subOptions) {
-		this.subOptions = subOptions;
-	}
-
-	public Set<CmdLineSubOption> getSubOptions() {
-		return subOptions;
-	}
-
-	public boolean isGroup() {
-		return subOptions != null && !subOptions.isEmpty();
-	}
-
-	public int compareTo(CmdLineOption<T> cmdLineOption) {
-		int thisScore = (this.required ? 2 : 0)
-				+ (!requirementRules.isEmpty() ? 1 : 0);
-		int compareScore = (cmdLineOption.required ? 2 : 0)
-				+ (!cmdLineOption.requirementRules.isEmpty() ? 1 : 0);
-		return new Integer(thisScore).compareTo(compareScore);
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (obj instanceof CmdLineOption) {
-			CmdLineOption<T> compareObj = (CmdLineOption<T>) obj;
-			return compareObj.shortOption.equals(this.shortOption)
-					|| compareObj.longOption.equals(this.longOption);
-		} else
-			return false;
-	}
-
-	@Override
-	public int hashCode() {
-		return shortOption.hashCode();
-	}
+	public int hashCode();
 }

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOptionInstance.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOptionInstance.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOptionInstance.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOptionInstance.java Thu Oct 13 01:19:08 2011
@@ -26,52 +26,89 @@ import org.apache.commons.lang.Validate;
  * @author bfoster
  * @version $Revision$
  */
-public abstract class CmdLineOptionInstance<T> {
+public class CmdLineOptionInstance {
 
-	private CmdLineOption<T> option;
-	private List<T> values;
+	private CmdLineOption option;
+	private List<String> values;
+	private List<CmdLineOptionInstance> subOptions;
 
 	public CmdLineOptionInstance() {
-		this.option = null;
-		this.values = new ArrayList<T>();
+		values = new ArrayList<String>();
+		subOptions = new ArrayList<CmdLineOptionInstance>();
 	}
 
-	public CmdLineOptionInstance(CmdLineOption<T> option, List<T> values) {
+	public CmdLineOptionInstance(CmdLineOption option, List<String> values) {
 		Validate.notNull(option);
 		Validate.notNull(values);
 
-		this.option = option;
+		this.option = option; 
 		this.values = values;
+		subOptions = new ArrayList<CmdLineOptionInstance>();
+	}
+
+	public void setOption(CmdLineOption option) {
+		this.option = option;
 	}
 
-	public CmdLineOption<T> getOption() {
+	public CmdLineOption getOption() {
 		return option;
 	}
 
-	public void setOption(CmdLineOption<T> option) {
-		this.option = option;
+	public boolean isGroup() {
+		return option instanceof GroupCmdLineOption;
 	}
 
-	public List<T> getValues() {
-		return values;
+	public boolean isAction() {
+		return option instanceof ActionCmdLineOption;
 	}
 
-	public void addValue(T value) {
-		values.add(value);
+	public boolean isHelp() {
+		return option instanceof HelpCmdLineOption;
 	}
 
-	public void setValues(List<T> values) {
+	public void setValues(List<String> values) {
 		Validate.notNull(values);
 
-		this.values = values;
+		this.values = new ArrayList<String>(values);
+	}
+
+	public void addValue(String value) {
+		values.add(value);
+	}
+
+	public List<String> getValues() {
+		return values;
+	}
+
+	public void setSubOptions(List<CmdLineOptionInstance> subOptions) {
+		Validate.isTrue(isGroup(), "Must be group option to have subOptions");
+		Validate.notNull(subOptions, "Cannot set subOptions to NULL");
+
+		this.subOptions = new ArrayList<CmdLineOptionInstance>(subOptions);
+	}
+
+	public void addSubOption(CmdLineOptionInstance subOption) {
+		Validate.isTrue(isGroup(), "Must be group option to have subOptions");
+		Validate.notNull(subOption, "Cannot add NULL subOption");
+
+		this.subOptions.add(subOption);
+	}
+
+	public List<CmdLineOptionInstance> getSubOptions() {
+		return subOptions;
 	}
 
 	public boolean equals(Object obj) {
 		if (obj instanceof CmdLineOptionInstance) {
-			CmdLineOptionInstance<?> compareObj = (CmdLineOptionInstance<?>) obj;
+			CmdLineOptionInstance compareObj = (CmdLineOptionInstance) obj;
 			return compareObj.option.equals(this.option)
 					&& compareObj.values.equals(this.values);
-		} else
+		} else {
 			return false;
+		}
+	}
+
+	public int hashCode() {
+		return option.hashCode();
 	}
 }

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,59 @@
+package org.apache.oodt.cas.cl.option;
+
+import java.util.Set;
+
+public class GroupCmdLineOption extends SimpleCmdLineOption {
+
+	private Set<SubOption> subOptions;
+
+	public GroupCmdLineOption() {
+		super();
+		this.setHasArgs(false);
+	}
+
+	public GroupCmdLineOption(String shortOption, String longOption,
+			String description, boolean hasArgs) {
+		super(shortOption, longOption, description, hasArgs);
+	}
+
+	public void setSubOptions(Set<SubOption> subOptions) {
+		this.subOptions = subOptions;
+	}
+
+	public Set<SubOption> getSubOptions() {
+		return subOptions;
+	}
+
+	public boolean hasSubOptions() {
+		return subOptions != null && !subOptions.isEmpty();
+	}
+
+	public class SubOption {
+
+		private CmdLineOption option;
+		private boolean required;
+
+		public SubOption() {}
+
+		public SubOption(CmdLineOption option, boolean required) {
+			this.option = option;
+			this.required = required;
+		}
+
+		public void setOption(CmdLineOption option) {
+			this.option = option;
+		}
+
+		public CmdLineOption getOption() {
+			return option;
+		}
+
+		public void setRequired(boolean required) {
+			this.required = required;
+		}
+
+		public boolean isRequired() {
+			return required;
+		}
+	}
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/GroupCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,10 @@
+package org.apache.oodt.cas.cl.option;
+
+import org.apache.oodt.cas.cl.option.handler.CmdLineOptionHandler;
+
+public interface HandleableCmdLineOption {
+
+	public void setHandler(CmdLineOptionHandler handler);
+
+	public CmdLineOptionHandler getHandler();
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HandleableCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,13 @@
+package org.apache.oodt.cas.cl.option;
+
+public class HelpCmdLineOption extends GroupCmdLineOption {
+
+	public HelpCmdLineOption() {
+		this("h", "help", "Prints help menu", false);
+	}
+
+	public HelpCmdLineOption(String shortOption, String longOption,
+			String description, boolean hasArgs) {
+		super(shortOption, longOption, description, hasArgs);
+	}
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/HelpCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java (from r1182153, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java)
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java?p2=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java&p1=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java&r1=1182153&r2=1182632&rev=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/CmdLineOption.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -19,20 +19,17 @@ package org.apache.oodt.cas.cl.option;
 
 //JDK imports
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
-import java.util.Set;
 
 //OODT imports
-import org.apache.oodt.cas.cl.option.handler.CmdLineOptionHandler;
-import org.apache.oodt.cas.cl.option.validator.CmdLineOptionValidator;
+import org.apache.oodt.cas.cl.option.require.RequirementRule;
 
 /**
  *
  * @author bfoster
  * @version $Revision$
  */
-public class CmdLineOption<T> implements Comparable<CmdLineOption<T>> {
+public class SimpleCmdLineOption implements CmdLineOption {
 
 	private String shortOption;
 
@@ -40,7 +37,7 @@ public class CmdLineOption<T> implements
 
 	private String description;
 
-	private String optionArgName;
+	private String argDescription;
 
 	private boolean required;
 
@@ -52,25 +49,16 @@ public class CmdLineOption<T> implements
 
 	private Class<?> type;
 
-	private CmdLineOptionHandler<T> handler;
-
-	private List<CmdLineOptionValidator<T>> validators;
-
-	private boolean isHelp;
-
-	private Set<CmdLineSubOption> subOptions;
-
-	public CmdLineOption() {
-		optionArgName = "arg";
+	public SimpleCmdLineOption() {
+		argDescription = "arg";
 		required = false;
 		hasArgs = false;
 		performAndQuit = false;
 		type = String.class;
 		requirementRules = new ArrayList<RequirementRule>();
-		validators = new LinkedList<CmdLineOptionValidator<T>>();
 	}
 
-	public CmdLineOption(String shortOption, String longOption,
+	public SimpleCmdLineOption(String shortOption, String longOption,
 			String description, boolean hasArgs) {
 		this();
 		this.shortOption = shortOption;
@@ -87,22 +75,6 @@ public class CmdLineOption<T> implements
 		this.type = type;
 	}
 
-	public void setHandler(CmdLineOptionHandler<T> handler) {
-		this.handler = handler;
-	}
-
-	public CmdLineOptionHandler<T> getHandler() {
-		return this.handler;
-	}
-
-	public List<CmdLineOptionValidator<T>> getValidators() {
-		return this.validators;
-	}
-
-	public void setValidators(List<CmdLineOptionValidator<T>> validators) {
-		this.validators = validators;
-	}
-
 	public String getShortOption() {
 		return shortOption;
 	}
@@ -135,12 +107,12 @@ public class CmdLineOption<T> implements
 		this.hasArgs = hasArgs;
 	}
 
-	public void setOptionArgName(String optionArgName) {
-		this.optionArgName = optionArgName;
+	public void setArgsDescription(String argDescription) {
+		this.argDescription = argDescription;
 	}
 
-	public String getOptionArgName() {
-		return optionArgName;
+	public String getArgsDescription() {
+		return argDescription;
 	}
 
 	public void setRequired(boolean required) {
@@ -167,38 +139,18 @@ public class CmdLineOption<T> implements
 		this.performAndQuit = performAndQuit;
 	}
 
-	public void setHelp(boolean isHelp) {
-		this.isHelp = isHelp;
-	}
-
-	public boolean isHelp() {
-		return isHelp;
-	}
-
-	public void setSubOptions(Set<CmdLineSubOption> subOptions) {
-		this.subOptions = subOptions;
-	}
-
-	public Set<CmdLineSubOption> getSubOptions() {
-		return subOptions;
-	}
-
-	public boolean isGroup() {
-		return subOptions != null && !subOptions.isEmpty();
-	}
-
-	public int compareTo(CmdLineOption<T> cmdLineOption) {
+	public int compareTo(CmdLineOption cmdLineOption) {
 		int thisScore = (this.required ? 2 : 0)
 				+ (!requirementRules.isEmpty() ? 1 : 0);
-		int compareScore = (cmdLineOption.required ? 2 : 0)
-				+ (!cmdLineOption.requirementRules.isEmpty() ? 1 : 0);
+		int compareScore = (cmdLineOption.isRequired() ? 2 : 0)
+				+ (!cmdLineOption.getRequirementRules().isEmpty() ? 1 : 0);
 		return new Integer(thisScore).compareTo(compareScore);
 	}
 
 	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof CmdLineOption) {
-			CmdLineOption<T> compareObj = (CmdLineOption<T>) obj;
+			SimpleCmdLineOption compareObj = (SimpleCmdLineOption) obj;
 			return compareObj.shortOption.equals(this.shortOption)
 					|| compareObj.longOption.equals(this.longOption);
 		} else

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/SimpleCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,13 @@
+package org.apache.oodt.cas.cl.option;
+
+import java.util.List;
+
+import org.apache.oodt.cas.cl.option.validator.CmdLineOptionValidator;
+
+public interface ValidatableCmdLineOption {
+
+	public void setValidators(List<CmdLineOptionValidator> validators);
+
+	public List<CmdLineOptionValidator> getValidators();
+
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/ValidatableCmdLineOption.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionBeanHandler.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionBeanHandler.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionBeanHandler.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionBeanHandler.java Thu Oct 13 01:19:08 2011
@@ -24,10 +24,9 @@ import java.util.Arrays;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 //OODT imports
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
 import org.apache.oodt.cas.cl.option.store.spring.SpringSetContextInjectionType;
@@ -38,11 +37,10 @@ import org.apache.commons.lang.Validate;
 import org.springframework.context.ApplicationContext;
 
 /**
- * 
  * @author bfoster
  * @version $Revision$
  */
-public class CmdLineOptionBeanHandler extends CmdLineOptionHandler<String> implements
+public class CmdLineOptionBeanHandler implements CmdLineOptionHandler,
 		SpringSetContextInjectionType {
 
 	private List<BeanInfo> applyToBeans;
@@ -60,7 +58,7 @@ public class CmdLineOptionBeanHandler ex
 		this.applyToBeans = applyToBeans;
 	}
 
-	public void handleOption(CmdLineOptionInstance<String> optionInstance) {
+	public void handleOption(CmdLineAction action, CmdLineOptionInstance optionInstance) {
 		Validate.notNull(appContext, "Spring ApplicationContext must be set!");
 		Validate.notNull(applyToBeans, "Apply to beans must be set!");
 
@@ -88,7 +86,7 @@ public class CmdLineOptionBeanHandler ex
 		}
 	}
 
-	public String getCustomOptionHelp(CmdLineOption option) {
+	public String getHelp(CmdLineOption option) {
 		Validate.notNull(applyToBeans, "Apply to beans must be set!");
 
 		HashSet<String> affectedClasses = new HashSet<String>();
@@ -146,24 +144,4 @@ public class CmdLineOptionBeanHandler ex
 			return values.toArray(new Object[values.size()]);
 		}
 	}
-
-	@Override
-	public boolean affectsOption(CmdLineOptionInstance optionInstance) {
-		Validate.notNull(appContext, "Spring ApplicationContext must be set!");
-
-		@SuppressWarnings("unchecked")
-		Map<String, CmdLineOptionInstance> instances = appContext.getBeansOfType(CmdLineOptionInstance.class);
-		for (Entry<String, CmdLineOptionInstance> instance : instances.entrySet()) {
-			if (instance.getValue().equals(optionInstance)) {
-				for (BeanInfo beanInfo : this.applyToBeans) {
-					if (beanInfo.getBeanId().equals(instance.getKey())) {
-						return true;
-					}
-				}
-				break;
-			}
-		}
-		return false;
-	}
-
 }

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionHandler.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionHandler.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionHandler.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/handler/CmdLineOptionHandler.java Thu Oct 13 01:19:08 2011
@@ -18,6 +18,7 @@
 package org.apache.oodt.cas.cl.option.handler;
 
 //OODT imports
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
 
@@ -25,12 +26,20 @@ import org.apache.oodt.cas.cl.option.Cmd
  * @author bfoster
  * @version $Revision$
  */
-public abstract class CmdLineOptionHandler<T> {
+public interface CmdLineOptionHandler {
 
-	public abstract void handleOption(CmdLineOptionInstance<T> optionInstance);
-
-	public abstract String getCustomOptionHelp(CmdLineOption<T> option);
-
-	public abstract boolean affectsOption(CmdLineOptionInstance<T> optionInstance);
+	/**
+	 * 
+	 * @param optionInstance
+	 */
+	public abstract void handleOption(CmdLineAction selectedAction, CmdLineOptionInstance optionInstance);
+
+	/**
+	 * Gets the {@link CmdLineOptionHandler}s help message when associated with given {@link CmdLineOption}.
+	 *
+	 * @param option The {@link CmdLineOption} to which this {@link CmdLineOptionHandler} was associated with
+	 * @return The help message for this {@link CmdLineOptionHandler}
+	 */
+	public abstract String getHelp(CmdLineOption option);
 
 }

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,24 @@
+package org.apache.oodt.cas.cl.option.require;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.oodt.cas.cl.action.CmdLineAction;
+
+public class ActionBasedRequirementRule implements RequirementRule {
+
+	private Set<String> actionNames;
+
+	public void setActions(Set<String> actionNames) {
+		this.actionNames = new HashSet<String>(actionNames);
+	}
+
+	public Set<String> getActions() {
+		return actionNames;
+	}
+
+	public boolean isRequired(CmdLineAction selectedAction) {
+		return actionNames.contains(selectedAction.getName());
+	}
+
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/ActionBasedRequirementRule.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java (from r1180819, oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/RequirementRule.java)
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java?p2=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java&p1=oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/RequirementRule.java&r1=1180819&r2=1182632&rev=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/RequirementRule.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java Thu Oct 13 01:19:08 2011
@@ -14,60 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
-package org.apache.oodt.cas.cl.option;
+package org.apache.oodt.cas.cl.option.require;
 
 //OODT imports
-import java.util.LinkedList;
-import java.util.List;
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 
 /**
- * 
  * @author bfoster
  * @version $Revision$
- *
- * <p>Describe your class here</p>.
  */
-public class RequirementRule {
-
-    private List<String> optionValues;
-    private String optionLongName;
-    private boolean requireAllValues;
-
-    public RequirementRule() {
-        this.optionValues = new LinkedList<String>();
-        this.requireAllValues = false;
-    }
-
-    public List<String> getOptionValues() {
-        return optionValues;
-    }
-
-    public void setOptionValues(List<String> optionValues) {
-        this.optionValues = optionValues;
-    }
-
-    public boolean isRequireAllValues() {
-        return requireAllValues;
-    }
-
-    public void setRequireAllValues(boolean requireAllValues) {
-        this.requireAllValues = requireAllValues;
-    }
-
-    public String getOptionLongName() {
-        return optionLongName;
-    }
-
-    public void setOptionLongName(String optionLongName) {
-        this.optionLongName = optionLongName;
-    }
+public interface RequirementRule {
 
-    public String toString() {
-        return (this.requireAllValues ? "All" : "At least one")
-                + " of the following values must be specified for option --"
-                + this.optionLongName + " " + this.optionValues;
-    }
+	public boolean isRequired(CmdLineAction selectedAction);
 
 }

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/require/RequirementRule.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/CmdLineOptionStore.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/CmdLineOptionStore.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/CmdLineOptionStore.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/CmdLineOptionStore.java Thu Oct 13 01:19:08 2011
@@ -2,7 +2,7 @@ package org.apache.oodt.cas.cl.option.st
 
 import java.util.Set;
 
-import org.apache.oodt.cas.cl.option.CmdLineAction;
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 
 public interface CmdLineOptionStore {

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/spring/SpringCmdLineOptionStore.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/spring/SpringCmdLineOptionStore.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/spring/SpringCmdLineOptionStore.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/store/spring/SpringCmdLineOptionStore.java Thu Oct 13 01:19:08 2011
@@ -4,7 +4,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.oodt.cas.cl.option.CmdLineAction;
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.store.CmdLineOptionStore;
 

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/CmdLineOptionUtils.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/CmdLineOptionUtils.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/CmdLineOptionUtils.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/CmdLineOptionUtils.java Thu Oct 13 01:19:08 2011
@@ -28,13 +28,21 @@ import java.util.Set;
 //OODT imports
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.Validate;
+import org.apache.oodt.cas.cl.option.ActionCmdLineOption;
+import org.apache.oodt.cas.cl.option.AdvancedCmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOption;
 import org.apache.oodt.cas.cl.option.CmdLineOptionInstance;
-import org.apache.oodt.cas.cl.option.RequirementRule;
+import org.apache.oodt.cas.cl.option.GroupCmdLineOption;
+import org.apache.oodt.cas.cl.option.GroupCmdLineOptionInstance;
+import org.apache.oodt.cas.cl.option.HandleableCmdLineOption;
+import org.apache.oodt.cas.cl.option.HelpCmdLineOption;
+import org.apache.oodt.cas.cl.option.ValidatableCmdLineOption;
+import org.apache.oodt.cas.cl.action.CmdLineAction;
 import org.apache.oodt.cas.cl.help.presenter.StdCmdLineOptionHelpPresenter;
 import org.apache.oodt.cas.cl.help.formatter.StdCmdLineOptionHelpFormatter;
 import org.apache.oodt.cas.cl.help.printer.StdCmdLineOptionHelpPrinter;
 import org.apache.oodt.cas.cl.help.printer.StdCmdLineOptionSpecificHelpPrinter;
+import org.apache.oodt.cas.cl.option.require.RequirementRule;
 import org.apache.oodt.cas.cl.option.validator.CmdLineOptionValidator;
 import org.apache.oodt.cas.cl.parser.CmdLineOptionParser;
 import org.apache.oodt.cas.cl.parser.StdCmdLineOptionParser;
@@ -47,151 +55,134 @@ public class CmdLineOptionUtils {
 
 	private CmdLineOptionUtils() {}
 
-	public static <T> Set<CmdLineOption<?>> getOptionalOptions(
-			Set<CmdLineOption<?>> options, CmdLineOptionInstance<T> specifiedOption) {
-		HashSet<CmdLineOption<?>> optionalOptions = new HashSet<CmdLineOption<?>>();
-		for (CmdLineOption<?> option : options) {
-			try {
-				if (isOptionalOption((CmdLineOption<T>) option, specifiedOption)) {
-					optionalOptions.add(option);
-				}
-			} catch (ClassCastException e) { /* ignore */ }
-		}
-		return optionalOptions;
-	}
+//	public static <T> Set<CmdLineOption<?>> getOptionallyRequiredOptions(
+//			Set<CmdLineOption<?>> options, CmdLineOptionInstance<T> specifiedOption) {
+//		HashSet<CmdLineOption<?>> optionalOptions = new HashSet<CmdLineOption<?>>();
+//		for (CmdLineOption<T> option : (Set<CmdLineOption<T>>)(Set<?>) options) {
+//			if (isOptionallyRequiredOption(option, specifiedOption)) {
+//				optionalOptions.add(option);
+//			}
+//		}
+//		return optionalOptions;
+//	}
+//
+//	public static <T> boolean isOptionallyRequiredOption(CmdLineOption<T> option,
+//			CmdLineAction selectedAction) {
+//		if (!isConditionallyRequired(option, selectedAction)) {
+//			if (option.hasHandler()) {
+//				return option.getHandler().isInterested(selectedAction);
+//			}
+//		}
+//		return false;
+//	}
 
-	public static <T> boolean isOptionalOption(CmdLineOption<T> option,
-			CmdLineOptionInstance<T> specifiedOption) {
-		return !isConditionallyRequired(option, specifiedOption)
-				&& option.getHandler().affectsOption(specifiedOption);
-	}
+//	public static Set<CmdLineOption<?>> getConditionallyRequiredOptions(
+//			Set<CmdLineOption<?>> options, CmdLineOptionInstance<?> specifiedOption) {
+//		HashSet<CmdLineOption<?>> requiredOptions = new HashSet<CmdLineOption<?>>();
+//		for (CmdLineOption<?> option : options) {
+//			if (isConditionallyRequired(option, specifiedOption)) {
+//				requiredOptions.add(option);
+//			}
+//		}
+//		return requiredOptions;
+//	}
 
-	public static Set<CmdLineOption<?>> getConditionallyRequiredOptions(
-			Set<CmdLineOption<?>> options, CmdLineOptionInstance<?> specifiedOption) {
-		HashSet<CmdLineOption<?>> requiredOptions = new HashSet<CmdLineOption<?>>();
-		for (CmdLineOption<?> option : options) {
-			if (isConditionallyRequired(option, specifiedOption)) {
+	public static Set<CmdLineOption> getRequiredOptions(CmdLineAction action,
+			Set<CmdLineOption> options) {
+		Set<CmdLineOption> requiredOptions = getRequiredOptions(options);
+		for (CmdLineOption option : options) {
+			if (isRequired(action, option)) {
 				requiredOptions.add(option);
 			}
 		}
 		return requiredOptions;
 	}
 
-	public static Set<CmdLineOption<?>> getConditionallyRequiredOptions(
-			Set<CmdLineOption<?>> options, Set<CmdLineOptionInstance<?>> specifiedOptions) {
-		HashSet<CmdLineOption<?>> requiredOptions = new HashSet<CmdLineOption<?>>();
-		for (CmdLineOption<?> option : options) {
-			for (CmdLineOptionInstance<?> specifiedOption : specifiedOptions) {
-				if (isConditionallyRequired(option, specifiedOption)) {
-					requiredOptions.add(option);
-					break;
-				}
-			}
-		}
-		return requiredOptions;
-	}
-
-	public static boolean isConditionallyRequired(CmdLineOption<?> option,
-			CmdLineOptionInstance<?> specifiedOption) {
+	public static boolean isRequired(CmdLineAction action, CmdLineOption option) {
 		Validate.notNull(option);
-		Validate.notNull(specifiedOption);
+		Validate.notNull(action);
 
 		for (RequirementRule requirementRule : option.getRequirementRules()) {
-			if (((requirementRule.isRequireAllValues() && specifiedOption.getValues()
-					.containsAll(requirementRule.getOptionValues())) || (!requirementRule
-							.isRequireAllValues() && !Collections.disjoint(
-									specifiedOption.getValues(), requirementRule.getOptionValues())))) {
+			if (requirementRule.isRequired(action)) {
 				return true;
 			}
 		}
 		return false;
 	}
 
-	public static Set<CmdLineOption<?>> getAlwaysRequiredOptions(
-			Set<CmdLineOption<?>> options) {
-		HashSet<CmdLineOption<?>> requiredOptions = new HashSet<CmdLineOption<?>>();
-		for (CmdLineOption<?> option : options) {
+	public static Set<CmdLineOption> getRequiredOptions(Set<CmdLineOption> options) {
+		HashSet<CmdLineOption> requiredOptions = new HashSet<CmdLineOption>();
+		for (CmdLineOption option : options) {
 			if (option.isRequired()) {
 				requiredOptions.add(option);
 			}
 		}
 		return requiredOptions;
 	}
+//
+//	public static Set<CmdLineOption<?>> getRequiredOptions(
+//			Set<CmdLineOption<?>> supportedOptions,
+//			Set<CmdLineOptionInstance<?>> specifiedOptions) {
+//		Set<CmdLineOption<?>> reqOptions = getAlwaysRequiredOptions(supportedOptions);
+//		reqOptions.addAll(getConditionallyRequiredOptions(supportedOptions,
+//				specifiedOptions));
+//		return reqOptions;
+//	}
 
-	public static Set<CmdLineOption<?>> getRequiredOptions(
-			Set<CmdLineOption<?>> supportedOptions,
-			Set<CmdLineOptionInstance<?>> specifiedOptions) {
-		Set<CmdLineOption<?>> reqOptions = getAlwaysRequiredOptions(supportedOptions);
-		reqOptions.addAll(getConditionallyRequiredOptions(supportedOptions,
-				specifiedOptions));
-		return reqOptions;
-	}
-
-	public static Set<CmdLineOption<?>> getRequiredOptionsNotSet(
-			Set<CmdLineOption<?>> supportedOptions, Set<CmdLineOptionInstance<?>> setOptions) {
-		return getOptionsNotSet(getRequiredOptions(supportedOptions, setOptions),
-				setOptions);
-	}
+//	public static Set<CmdLineOption<?>> getRequiredOptionsNotSet(
+//			Set<CmdLineOption<?>> supportedOptions, Set<CmdLineOptionInstance<?>> setOptions) {
+//		return getOptionsNotSet(getRequiredOptions(supportedOptions, setOptions),
+//				setOptions);
+//	}
 
-	public static Set<CmdLineOption<?>> getOptionsNotSet(
-			Set<CmdLineOption<?>> expectedOptions, Set<CmdLineOptionInstance<?>> setOptions) {
-		HashSet<CmdLineOption<?>> nonSetRequiredOptions = new HashSet<CmdLineOption<?>>();
-		TOP:
-		for (CmdLineOption<?> reqOption : expectedOptions) {
-			for (CmdLineOptionInstance<?> optionInst : setOptions) {
-				if (reqOption.equals(optionInst.getOption()))
-					continue TOP;
-			}
-			nonSetRequiredOptions.add(reqOption);
-		}
-		return nonSetRequiredOptions;
-	}
+//	public static Set<CmdLineOption<?>> getOptionsNotSet(
+//			Set<CmdLineOption<?>> expectedOptions, Set<CmdLineOptionInstance<?>> setOptions) {
+//		HashSet<CmdLineOption<?>> nonSetRequiredOptions = new HashSet<CmdLineOption<?>>();
+//		TOP:
+//		for (CmdLineOption<?> reqOption : expectedOptions) {
+//			for (CmdLineOptionInstance<?> optionInst : setOptions) {
+//				if (reqOption.equals(optionInst.getOption()))
+//					continue TOP;
+//			}
+//			nonSetRequiredOptions.add(reqOption);
+//		}
+//		return nonSetRequiredOptions;
+//	}
 
-	public static List<CmdLineOption<?>> sortOptionsByRequiredStatus(Set<CmdLineOption<?>> options) {
-		ArrayList<CmdLineOption<?>> optionsList = new ArrayList<CmdLineOption<?>>(options);
+	public static List<CmdLineOption> sortOptionsByRequiredStatus(Set<CmdLineOption> options) {
+		ArrayList<CmdLineOption> optionsList = new ArrayList<CmdLineOption>(options);
 		Collections.sort(optionsList);
 		Collections.reverse(optionsList);
 		return optionsList;
 	}
 
-	public static CmdLineOption<?> getOptionByName(String optionName,
-			Set<CmdLineOption<?>> options) {
-		for (CmdLineOption<?> option : options)
+	public static CmdLineOption getOptionByName(String optionName, Set<CmdLineOption> options) {
+		for (CmdLineOption option : options)
 			if (option.getLongOption().equals(optionName)
 					|| option.getShortOption().equals(optionName))
 				return option;
 		return null;
 	}
 
-	public static CmdLineOptionInstance<?> getOptionInstanceByName(
-			String optionName, Set<CmdLineOptionInstance<?>> optionInsts) {
-		for (CmdLineOptionInstance<?> optionInst : optionInsts)
+	public static CmdLineOptionInstance getOptionInstanceByName(
+			String optionName, Set<CmdLineOptionInstance> optionInsts) {
+		for (CmdLineOptionInstance optionInst : optionInsts)
 			if (optionInst.getOption().getLongOption().equals(optionName)
 					|| optionInst.getOption().getShortOption().equals(optionName))
 				return optionInst;
 		return null;
 	}
 
-//	public static List<?> getOptionValues(String optionName,
-//			Set<CmdLineOptionInstance<?>> options) {
-//		for (CmdLineOptionInstance<?> optionInst : options)
-//			if (optionInst.getOption().getLongOption().equals(optionName)
-//					|| optionInst.getOption().getShortOption().equals(optionName))
-//				return optionInst.getValues();
-//		return null;
-//	}
-
-
-	public static Set<CmdLineOptionInstance<?>> parseArgs(Set<CmdLineOption<?>> supportedOptions, String[] args) throws IOException {
+	public static Set<CmdLineOptionInstance> parseArgs(Set<CmdLineOption> supportedOptions, String[] args) throws IOException {
 		CmdLineOptionParser parser = new StdCmdLineOptionParser();
 		return parser.parse(args, supportedOptions);
 	}
 
-	public static Set<CmdLineOptionInstance<?>> validateOptions(Set<CmdLineOptionInstance<?>> options) throws IOException {
+	public static Set<CmdLineOptionInstance> validateOptions(Set<CmdLineOptionInstance> options) throws IOException {
 		Validate.notNull(options);
 
-		HashSet<CmdLineOptionInstance<?>> optionsFailed = new HashSet<CmdLineOptionInstance<?>>();
-		for (CmdLineOptionInstance<?> optionInst : options) {
+		HashSet<CmdLineOptionInstance> optionsFailed = new HashSet<CmdLineOptionInstance>();
+		for (CmdLineOptionInstance optionInst : options) {
 			if (!validateOption(optionInst)) {
 				optionsFailed.add(optionInst);
 			}
@@ -199,64 +190,183 @@ public class CmdLineOptionUtils {
 		return optionsFailed;
 	}
 
-	public static <T> boolean validateOption(CmdLineOptionInstance<T> option) {
-		for (CmdLineOptionValidator<T> validator : option.getOption()
-				.getValidators()) {
-			if (!validator.validate(option)) {
-				return false;
+	public static boolean validateOption(CmdLineOptionInstance option) {
+		if (isValidatable(option.getOption())) {
+			for (CmdLineOptionValidator validator : ((ValidatableCmdLineOption) option.getOption()).getValidators()) {
+				if (!validator.validate(option)) {
+					return false;
+				}
 			}
 		}
 		return true;
 	}
 
-	public static void handleOptions(Set<CmdLineOptionInstance<?>> options) {
-		for (CmdLineOptionInstance<?> option : options) {
-			handleOption(option);
+	public static boolean isValidatable(CmdLineOption option) {
+		return option instanceof ValidatableCmdLineOption;
+	}
+
+	public static void handleOptions(CmdLineAction action, Set<CmdLineOptionInstance> options) {
+		for (CmdLineOptionInstance option : options) {
+			handleOption(action, option);
+		}
+	}
+
+	public static void handleOption(CmdLineAction action, CmdLineOptionInstance option) {
+		if (isHandleable(option.getOption())) {
+			((HandleableCmdLineOption) option.getOption()).getHandler().handleOption(action, option);
 		}
 	}
 
-	public static <T> void handleOption(CmdLineOptionInstance<T> option) {
-		option.getOption().getHandler().handleOption(option);
+	public static boolean isHandleable(CmdLineOption option) {
+		return option instanceof HandleableCmdLineOption;
 	}
 
-	public static Set<CmdLineOptionInstance<?>> validateAndHandleInstances(
-			Set<CmdLineOption<?>> supportedOptions, String[] args) throws IOException {
+	public static void validateAndHandleInstances(Set<CmdLineOption> supportedOptions,
+			Set<CmdLineOptionInstance> specifiedOptions) throws IOException {
 
-		// parse args
-		Set<CmdLineOptionInstance<?>> setOptions = parseArgs(supportedOptions, args);
 
 		// check that required args have been specified
-		Set<CmdLineOption<?>> unsetReqOptions = getRequiredOptionsNotSet(supportedOptions, setOptions);
+		Set<CmdLineOption> requiredOptions = getRequiredOptions();
+		Set<CmdLineOption> unsetReqOptions = getRequiredOptionsNotSet(supportedOptions, specifiedOptions);
 		if (!unsetReqOptions.isEmpty()) {
 			throw new IOException("Miss required options: " + sortOptionsByRequiredStatus(unsetReqOptions));
 		}
 
 		// validate options
-		Set<CmdLineOptionInstance<?>> optionsFailedVal = validateOptions(setOptions);
+		Set<CmdLineOptionInstance> optionsFailedVal = validateOptions(specifiedOptions);
 		if (!optionsFailedVal.isEmpty()) {
 			throw new IOException("Options failed validations: " + optionsFailedVal);
 		}
 
+		// Check for perform and quit options and handle them if specified then return.
+		Set<CmdLineOptionInstance> performAndQuitOptions = findPerformAndQuitOptions(specifiedOptions);
+		if (!performAndQuitOptions.isEmpty()) {
+			handleOptions(performAndQuitOptions);
+			return;
+		}
+
 		// if all looks good . . . handle options
-		handleOptions(setOptions);
+		handleOptions(specifiedOptions);
+	}
 
-		return setOptions;
+	public static boolean isSubOption(CmdLineOptionInstance specifiedOption, CmdLineOption option) {
+		if (specifiedOption.isGroup()) {
+			for (GroupCmdLineOption.SubOption subOption : ((GroupCmdLineOption) specifiedOption.getOption()).getSubOptions()) {
+				if (subOption.getOption().equals(option)) {
+					return true;
+				}
+			}
+		}
+		return false;
 	}
 
-	public static void printHelp(Set<CmdLineOption<?>> options) {
+	public static Set<CmdLineOptionInstance> findPerformAndQuitOptions(
+			Set<CmdLineOptionInstance> options) {
+		HashSet<CmdLineOptionInstance> performAndQuitOptions = new HashSet<CmdLineOptionInstance>();
+		for (CmdLineOptionInstance option : options) {
+			if (isPerformAndQuitOption(option.getOption())) {
+				performAndQuitOptions.add(option);
+			}
+		}
+		return performAndQuitOptions;
+	}
+
+	public static boolean isPerformAndQuitOption(CmdLineOption option) {
+		if (option instanceof AdvancedCmdLineOption) {
+			return ((AdvancedCmdLineOption) option).isPerformAndQuit();
+		}
+		return false;
+	}
+
+	public static CmdLineOptionInstance findSpecifiedOption(CmdLineOption option, Set<CmdLineOptionInstance> specifiedOptions) {
+		Validate.notNull(option);
+		Validate.notNull(specifiedOptions);
+
+		for (CmdLineOptionInstance specifiedOption : specifiedOptions) {
+			if (specifiedOption.getOption().equals(option)) {
+				return specifiedOption;
+			}
+		}
+		return null;
+	}
+
+	public static boolean isActionOption(CmdLineOption option) {
+		return option instanceof ActionCmdLineOption;
+	}
+
+	public static ActionCmdLineOption findActionOption(Set<CmdLineOption> options) {
+		for (CmdLineOption option : options) {
+			if (isActionOption(option)) {
+				return (ActionCmdLineOption) option;
+			}
+		}
+	}
+
+	public static CmdLineOptionInstance findSpecifiedActionOption(Set<CmdLineOptionInstance> options) {
+		for (CmdLineOptionInstance option : options) {
+			if (isActionOption(option.getOption())) {
+				return option;
+			}
+		}
+	}
+
+	public static boolean isHelpOption(CmdLineOption option) {
+		return option instanceof HelpCmdLineOption;
+	}
+
+	public static HelpCmdLineOption findHelpOption(Set<CmdLineOption> options) {
+		for (CmdLineOption option : options) {
+			if (isHelpOption(option)) {
+				return (HelpCmdLineOption) option;
+			}
+		}
+		return null;
+	}
+
+	public static CmdLineOptionInstance findSpecifiedHelpOption(
+			Set<CmdLineOptionInstance> options) {
+		for (CmdLineOptionInstance option : options) {
+			if (isHelpOption(option.getOption())) {
+				return option;
+			}
+		}
+		return null;
+	}
+
+	public static void printHelp(Set<CmdLineOption> options) {
 		new StdCmdLineOptionHelpPresenter()
 				.presentHelp(new StdCmdLineOptionHelpFormatter().format(
 						new StdCmdLineOptionHelpPrinter(), options));
 	}
 
-	public static void printSpecificHelp(Set<CmdLineOption<?>> options,
-			CmdLineOptionInstance<?> specifiedOption) {
+	public static void printSpecificHelp(Set<CmdLineOption> options,
+			CmdLineOptionInstance specifiedOption) {
 		new StdCmdLineOptionHelpPresenter()
 				.presentSpecificHelp(new StdCmdLineOptionHelpFormatter()
 						.format(new StdCmdLineOptionSpecificHelpPrinter(), options,
 								specifiedOption));
 	}
 
+//	public static <T> Iterable<CmdLineOption<T>> safeCast(Iterable<CmdLineOption<?>> options) {
+//		return new GenericsSafeIterable<CmdLineOption<T>>(options);
+//	}
+//
+//	public static <T> List<T> iterableToList(Iterable<T> iterable) {
+//		ArrayList<T> safeItems = new ArrayList<T>();
+//		for (T item : iterable) {
+//			safeItems.add(item);
+//		}
+//		return safeItems;
+//	}
+//
+//	public static <T> HashSet<T> iterableToSet(Iterable<T> iterable) {
+//		HashSet<T> safeItems = new HashSet<T>();
+//		for (T item : iterable) {
+//			safeItems.add(item);
+//		}
+//		return safeItems;
+//	}
+
 	public static String getFormattedString(String string, int startIndex,
 			int endIndex) {
 		StringBuffer outputString = new StringBuffer("");

Added: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java?rev=1182632&view=auto
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java (added)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java Thu Oct 13 01:19:08 2011
@@ -0,0 +1,52 @@
+package org.apache.oodt.cas.cl.option.util;
+
+import java.util.Iterator;
+
+public class GenericsSafeIterable<T> implements Iterable<T> {
+
+	private static final long serialVersionUID = -4763442582059214684L;
+
+	private Iterable<?> iterable;
+
+	public GenericsSafeIterable(Iterable<?> iterable) {
+		this.iterable = iterable;
+	}
+
+	public Iterator<T> iterator() {
+		return new Iterator<T>() {
+			
+			private Iterator<?> iterator = iterable.iterator();
+			private T next = null;
+
+			public boolean hasNext() {
+				if (next == null) {
+					next = safeGetNext(iterator);
+				}
+				return next != null;
+			}
+
+			public T next() {
+				if (next == null) {
+					next = safeGetNext(iterator);
+				}
+				T curNext = next;
+				next = safeGetNext(iterator);
+				return curNext;
+			}
+
+			public void remove() {
+				// do nothing
+			}
+			
+		};
+	}
+
+	private T safeGetNext(Iterator<?> iterator) {
+		while (iterator.hasNext()) {
+			try {
+				return (T) iterator.next();
+			} catch (ClassCastException e) {}
+		}
+		return null;
+	}
+}

Propchange: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/util/GenericsSafeIterable.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/AllowedArgsCmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/AllowedArgsCmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/AllowedArgsCmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/AllowedArgsCmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -29,7 +29,7 @@ import org.apache.oodt.cas.cl.option.Cmd
  * @version $Revision$
  */
 public class AllowedArgsCmdLineOptionValidator implements
-		CmdLineOptionValidator<String> {
+		CmdLineOptionValidator {
 
 	private List<String> allowedArgs;
 
@@ -37,7 +37,7 @@ public class AllowedArgsCmdLineOptionVal
 		this.allowedArgs = new LinkedList<String>();
 	}
 
-	public boolean validate(CmdLineOptionInstance<String> optionInst) {
+	public boolean validate(CmdLineOptionInstance optionInst) {
 		for (String value : optionInst.getValues()) {
 			if (!allowedArgs.contains(value)) {
 				LOG.severe("Option value " + value + " is not allowed for option "

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ArgRegExpCmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ArgRegExpCmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ArgRegExpCmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ArgRegExpCmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -31,7 +31,7 @@ public class ArgRegExpCmdLineOptionValid
 		AllowedArgsCmdLineOptionValidator {
 
 	@Override
-	public boolean validate(CmdLineOptionInstance<String> optionInst) {
+	public boolean validate(CmdLineOptionInstance optionInst) {
 		TOP: for (String value : optionInst.getValues()) {
 			for (String regex : this.getAllowedArgs()) {
 				if (Pattern.matches(regex, value))

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ClassExistsCmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ClassExistsCmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ClassExistsCmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/ClassExistsCmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -25,9 +25,9 @@ import org.apache.oodt.cas.cl.option.Cmd
  * @version $Revision$
  */
 public class ClassExistsCmdLineOptionValidator implements
-		CmdLineOptionValidator<String> {
+		CmdLineOptionValidator {
 
-	public boolean validate(CmdLineOptionInstance<String> optionInst) {
+	public boolean validate(CmdLineOptionInstance optionInst) {
 		for (String value : optionInst.getValues()) {
 			try {
 				Class.forName(value);

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/CmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/CmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/CmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/CmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -31,11 +31,11 @@ import org.apache.oodt.cas.cl.option.Cmd
  *
  * <p>Describe your class here</p>.
  */
-public interface CmdLineOptionValidator<T> {
+public interface CmdLineOptionValidator {
 
     static Logger LOG = Logger
             .getLogger(CmdLineOptionValidator.class.getName());
 
-    public boolean validate(CmdLineOptionInstance<T> optionInst);
+    public boolean validate(CmdLineOptionInstance optionInst);
 
 }

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/FileExistCmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/FileExistCmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/FileExistCmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/FileExistCmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -27,9 +27,9 @@ import org.apache.oodt.cas.cl.option.Cmd
  * @author bfoster
  * @version $Revision$
  */
-public class FileExistCmdLineOptionValidator implements CmdLineOptionValidator<String> {
+public class FileExistCmdLineOptionValidator implements CmdLineOptionValidator {
 
-	public boolean validate(CmdLineOptionInstance<String> optionInst) {
+	public boolean validate(CmdLineOptionInstance optionInst) {
 		for (String value : optionInst.getValues()) {
 			if (!new File(value).exists()) {
 				LOG.severe("Option value " + value + " for option "

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/NoRestrictionsCmdLineOptionValidator.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/NoRestrictionsCmdLineOptionValidator.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/NoRestrictionsCmdLineOptionValidator.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/option/validator/NoRestrictionsCmdLineOptionValidator.java Thu Oct 13 01:19:08 2011
@@ -14,8 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
 package org.apache.oodt.cas.cl.option.validator;
 
 //OODT imports
@@ -25,8 +23,6 @@ import org.apache.oodt.cas.cl.option.Cmd
  * 
  * @author bfoster
  * @version $Revision$
- *
- * <p>Describe your class here</p>.
  */
 public class NoRestrictionsCmdLineOptionValidator implements
         CmdLineOptionValidator {

Modified: oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/CmdLineOptionParser.java
URL: http://svn.apache.org/viewvc/oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/CmdLineOptionParser.java?rev=1182632&r1=1182631&r2=1182632&view=diff
==============================================================================
--- oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/CmdLineOptionParser.java (original)
+++ oodt/branches/cas-cl/src/main/java/org/apache/oodt/cas/cl/parser/CmdLineOptionParser.java Thu Oct 13 01:19:08 2011
@@ -10,11 +10,11 @@ import org.apache.oodt.cas.cl.option.Cmd
 
 public abstract class CmdLineOptionParser {
 
-	public Set<CmdLineOptionInstance<?>> parse(String[] args, Set<CmdLineOption<?>> validOptions) throws IOException {
+	public Set<CmdLineOptionInstance> parse(String[] args, Set<CmdLineOption> validOptions) throws IOException {
 		return parse(new Args(args), validOptions);
 	}
 
-	public abstract Set<CmdLineOptionInstance<?>> parse(Args args, Set<CmdLineOption<?>> validOptions) throws IOException;
+	public abstract Set<CmdLineOptionInstance> parse(Args args, Set<CmdLineOption> validOptions) throws IOException;
 
 	protected class Args implements Iterable<String> {
 		private int curIndex;
@@ -83,12 +83,4 @@ public abstract class CmdLineOptionParse
 			};
 		}
 	}
-
-	protected class GroupCmdLineOptionInstance extends
-			CmdLineOptionInstance<CmdLineOptionInstance<?>> {
-	}
-
-	protected class StringCmdLineOptionInstance extends
-			CmdLineOptionInstance<String> {
-	}
 }