You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2010/06/17 00:59:59 UTC

svn commit: r955420 - in /commons/proper/cli/trunk/src: main/java/org/apache/commons/cli/DefaultParser.java main/java/org/apache/commons/cli/Parser.java test/java/org/apache/commons/cli/ParserTestCase.java

Author: ebourg
Date: Wed Jun 16 22:59:59 2010
New Revision: 955420

URL: http://svn.apache.org/viewvc?rev=955420&view=rev
Log:
Default options are now taken into account for the required options (CLI-202)

Modified:
    commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java
    commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Parser.java
    commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/ParserTestCase.java

Modified: commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java?rev=955420&r1=955419&r2=955420&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java (original)
+++ commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/DefaultParser.java Wed Jun 16 22:59:59 2010
@@ -136,7 +136,7 @@ public class DefaultParser implements Co
      *
      * @param properties The value properties to be processed.
      */
-    private void handleProperties(Properties properties)
+    private void handleProperties(Properties properties) throws ParseException
     {
         if (properties == null)
         {
@@ -169,7 +169,8 @@ public class DefaultParser implements Co
                     continue;
                 }
                 
-                cmd.addOption(opt);
+                handleOption(opt);
+                currentOption = null;
             }
         }
     }

Modified: commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Parser.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Parser.java?rev=955420&r1=955419&r2=955420&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Parser.java (original)
+++ commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Parser.java Wed Jun 16 22:59:59 2010
@@ -249,7 +249,7 @@ public abstract class Parser implements 
      *
      * @param properties The value properties to be processed.
      */
-    protected void processProperties(Properties properties)
+    protected void processProperties(Properties properties) throws ParseException
     {
         if (properties == null)
         {
@@ -291,6 +291,7 @@ public abstract class Parser implements 
                 }
 
                 cmd.addOption(opt);
+                updateRequiredOptions(opt);
             }
         }
     }
@@ -376,7 +377,27 @@ public abstract class Parser implements 
 
         // get the option represented by arg
         Option opt = (Option) getOptions().getOption(arg).clone();
+        
+        // update the required options and groups
+        updateRequiredOptions(opt);
+        
+        // if the option takes an argument value
+        if (opt.hasArg())
+        {
+            processArgs(opt, iter);
+        }
+        
+        // set the option on the command line
+        cmd.addOption(opt);
+    }
 
+    /**
+     * Removes the option or its group from the list of expected elements.
+     * 
+     * @param opt
+     */
+    private void updateRequiredOptions(Option opt) throws ParseException
+    {
         // if the option is a required option remove the option from
         // the requiredOptions list
         if (opt.isRequired())
@@ -397,14 +418,5 @@ public abstract class Parser implements 
 
             group.setSelected(opt);
         }
-
-        // if the option takes an argument value
-        if (opt.hasArg())
-        {
-            processArgs(opt, iter);
-        }
-
-        // set the option on the command line
-        cmd.addOption(opt);
     }
 }

Modified: commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/ParserTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/ParserTestCase.java?rev=955420&r1=955419&r2=955420&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/ParserTestCase.java (original)
+++ commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/ParserTestCase.java Wed Jun 16 22:59:59 2010
@@ -986,4 +986,16 @@ public abstract class ParserTestCase ext
         assertEquals( "ink", cmd.getOptionValue("i") );
         assertTrue( !cmd.hasOption("fake") );
     }
+
+    public void testPropertyOptionRequired() throws Exception
+    {
+        Options opts = new Options();
+        opts.addOption(OptionBuilder.isRequired().create("f"));
+        
+        Properties properties = new Properties();
+        properties.setProperty("f", "true");
+        
+        CommandLine cmd = parse(parser, opts, null, properties);
+        assertTrue(cmd.hasOption("f"));
+    }
 }