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 2011/04/12 23:17:52 UTC

svn commit: r1091575 - in /commons/proper/cli/trunk/src: main/java/org/apache/commons/cli/HelpFormatter.java main/java/org/apache/commons/cli/Options.java test/java/org/apache/commons/cli/HelpFormatterTest.java

Author: ebourg
Date: Tue Apr 12 21:17:52 2011
New Revision: 1091575

URL: http://svn.apache.org/viewvc?rev=1091575&view=rev
Log:
HelpFormatter now accepts a null comparator to preserve the declaration order of the options (CLI-212)

Modified:
    commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/HelpFormatter.java
    commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Options.java
    commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/HelpFormatterTest.java

Modified: commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/HelpFormatter.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/HelpFormatter.java?rev=1091575&r1=1091574&r2=1091575&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/HelpFormatter.java (original)
+++ commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/HelpFormatter.java Tue Apr 12 21:17:52 2011
@@ -341,20 +341,13 @@ public class HelpFormatter
 
     /**
      * Set the comparator used to sort the options when they output in help text.
-     * Passing in a null parameter will set the ordering to the default mode.
+     * Passing in a null comparator will keep the options in the order they were declared.
      * 
      * @since 1.2
      */
     public void setOptionComparator(Comparator<Option> comparator)
     {
-        if (comparator == null)
-        {
-            this.optionComparator = new OptionComparator();
-        }
-        else
-        {
-            this.optionComparator = comparator;
-        }
+        this.optionComparator = comparator;
     }
 
     /**
@@ -546,17 +539,17 @@ public class HelpFormatter
         // create a list for processed option groups
         final Collection<OptionGroup> processedGroups = new ArrayList<OptionGroup>();
 
-        // temp variable
-        Option option;
-
         List<Option> optList = new ArrayList<Option>(options.getOptions());
-        Collections.sort(optList, getOptionComparator());
+        if (getOptionComparator() != null)
+        {
+            Collections.sort(optList, getOptionComparator());
+        }
         // iterate over the options
         for (Iterator i = optList.iterator(); i.hasNext();)
         {
             // get the next Option
-            option = (Option) i.next();
-
+            Option option = (Option) i.next();
+            
             // check if the option is part of an OptionGroup
             OptionGroup group = options.getOptionGroup(option);
 
@@ -611,7 +604,10 @@ public class HelpFormatter
         }
 
         List<Option> optList = new ArrayList<Option>(group.getOptions());
-        Collections.sort(optList, getOptionComparator());
+        if (getOptionComparator() != null)
+        {
+            Collections.sort(optList, getOptionComparator());
+        }
         // for each option in the OptionGroup
         for (Iterator i = optList.iterator(); i.hasNext();)
         {
@@ -757,16 +753,18 @@ public class HelpFormatter
         // the longest opt string this list will be then used to 
         // sort options ascending
         int max = 0;
-        StringBuffer optBuf;
         List<StringBuffer> prefixList = new ArrayList<StringBuffer>();
         
         List<Option> optList = options.helpOptions();
         
-        Collections.sort(optList, getOptionComparator());
+        if (getOptionComparator() != null)
+        {
+            Collections.sort(optList, getOptionComparator());
+        }
         
         for (Option option : optList)
         {
-            optBuf = new StringBuffer();
+            StringBuffer optBuf = new StringBuffer();
             
             if (option.getOpt() == null)
             {
@@ -806,7 +804,7 @@ public class HelpFormatter
         for (Iterator i = optList.iterator(); i.hasNext();)
         {
             Option option = (Option) i.next();
-            optBuf = new StringBuffer(prefixList.get(x++).toString());
+            StringBuffer optBuf = new StringBuffer(prefixList.get(x++).toString());
 
             if (optBuf.length() < max)
             {

Modified: commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Options.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Options.java?rev=1091575&r1=1091574&r2=1091575&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Options.java (original)
+++ commons/proper/cli/trunk/src/main/java/org/apache/commons/cli/Options.java Tue Apr 12 21:17:52 2011
@@ -24,6 +24,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -49,10 +50,10 @@ public class Options implements Serializ
     private static final long serialVersionUID = 1L;
 
     /** a map of the options with the character key */
-    private Map<String, Option> shortOpts = new HashMap<String, Option>();
+    private Map<String, Option> shortOpts = new LinkedHashMap<String, Option>();
 
     /** a map of the options with the long key */
-    private Map<String, Option> longOpts = new HashMap<String, Option>();
+    private Map<String, Option> longOpts = new LinkedHashMap<String, Option>();
 
     /** a map of the required options */
     private List<Object> requiredOpts = new ArrayList<Object>();

Modified: commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/HelpFormatterTest.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/HelpFormatterTest.java?rev=1091575&r1=1091574&r2=1091575&view=diff
==============================================================================
--- commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/HelpFormatterTest.java (original)
+++ commons/proper/cli/trunk/src/test/java/org/apache/commons/cli/HelpFormatterTest.java Tue Apr 12 21:17:52 2011
@@ -269,13 +269,11 @@ public class HelpFormatterTest extends T
         opts.addOption(new Option("c", "third"));
 
         HelpFormatter helpFormatter = new HelpFormatter();
-        helpFormatter.setOptionComparator(new Comparator()
+        helpFormatter.setOptionComparator(new Comparator<Option>()
         {
-            public int compare(Object o1, Object o2)
+            public int compare(Option opt1, Option opt2)
             {
                 // reverses the fuctionality of the default comparator
-                Option opt1 = (Option) o1;
-                Option opt2 = (Option) o2;
                 return opt2.getKey().compareToIgnoreCase(opt1.getKey());
             }
         });
@@ -289,9 +287,9 @@ public class HelpFormatterTest extends T
     public void testPrintSortedUsageWithNullComparator()
     {
         Options opts = new Options();
-        opts.addOption(new Option("a", "first"));
+        opts.addOption(new Option("c", "first"));
         opts.addOption(new Option("b", "second"));
-        opts.addOption(new Option("c", "third"));
+        opts.addOption(new Option("a", "third"));
 
         HelpFormatter helpFormatter = new HelpFormatter();
         helpFormatter.setOptionComparator(null);
@@ -299,7 +297,7 @@ public class HelpFormatterTest extends T
         StringWriter out = new StringWriter();
         helpFormatter.printUsage(new PrintWriter(out), 80, "app", opts);
 
-        assertEquals("usage: app [-a] [-b] [-c]" + EOL, out.toString());
+        assertEquals("usage: app [-c] [-b] [-a]" + EOL, out.toString());
     }
 
     public void testPrintOptionGroupUsage()