PRESERVE ARGUMENT ORDERING IN HELP SECTIONS?

Barbara Jones

Total Post:13

Points:91
Posted by  Barbara Jones
Java 
 928  View(s)
Ratings:
Rate this:

I have following arguments to add to CLI
-sbx
-CSWConfig
-stripInfo
-modelSources
-catchArchive
-swSupplierName
-modelsSWExchnage

but while displaying help it is showing these options in sorted order(as shown below) which I dont want, I want all the options to be in order as they are added.
-CatchArchive
-CSWConfig
-modelSources
-sbx
-stripInfo
-swSupplierName


private void print_help() {

    String CONST_STR_CLI_INFO = "ercli.exe custzip";

    HelpFormatter formatter = new HelpFormatter();

    formatter.setOptionComparator(new Comparator() {

 

        @Override

        public int compare(Object o1, Object o2) {

            Option op1=(Option) o1;

            Option op2=(Option) o2;

            return //what to do here?

        }

    });

    formatter.printHelp(CONST_STR_CLI_INFO, null, options, "", true);

}

  1. Mark Devid

    Post:102

    Points:714
    Re: Preserve argument ordering in help sections?

    As the Options() class stores the options in Maps internally, it does not keep any ordering. That means you need to provide your own order as you already found out.

    To get the ordering, you can put the keys in a List upfront to have an index of required order for each element:

    final List<String> optionKeys = new ArrayList<>();

            optionKeys.add("sbx");

            optionKeys.add("CSWConfig");

            optionKeys.add("stripInfo");

            optionKeys.add("modelSources");

            optionKeys.add("catchArchive");

            optionKeys.add("swSupplierName");

            optionKeys.add("modelsSWExchnage");

    Then in the Comparator you can compare by index in this list:

    @Override

        public int compare(Object o1, Object o2) {

            Option op1=(Option) o1;

            Option op2=(Option) o2;

            return Integer.compare(optionKeys.indexOf(op1.getLongOpt()), optionKeys.indexOf(op1.getLongOpt()));

        }

      Modified On Jun-26-2016 11:16:01 PM

Answer

NEWSLETTER

Enter your email address here always to be updated. We promise not to spam!