You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Russel Winder <ru...@concertant.com> on 2008/06/03 19:27:44 UTC

[cli] 2.x command line

I must be missing something very simple. . .

The 2.x appears to have no way of not processing items on the command
line:  it seems that in order to parse a command line you have to
specify every aspect of the line.  This means that a command line such
as:

	foo -q blah

where blah is a variable cannot be described.  With 1.x this is easy you
just specify information about the -q parse the line and then call
getArgList to get a list of all the items not recognized.  This works
well, but seems to have no equivalent in 2.x.
  
-- 
Russel.
====================================================
Dr Russel Winder                 Partner

Concertant LLP                   t: +44 20 7585 2200, +44 20 7193 9203
41 Buckmaster Road,              f: +44 8700 516 084
London SW11 1EN, UK.             m: +44 7770 465 077

Re: [cli] 2.x command line

Posted by "andrew ox." <an...@gmail.com>.
Hi Again,

Here is JUnit file that demonstrates how to use the '-f filename'
style functionality. I'm putting these in
http://wiki.apache.org/commons/CLI2

======================================================
package com.wategan.cli.demo;

import junit.framework.TestCase;
import org.apache.commons.cli2.*;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.commandline.Parser;
import org.apache.commons.cli2.option.DefaultOption;

public class CLIDemoWithOneOptionAndAnArgumentTest extends TestCase {

    public void testOptionAndArgument() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"-l", "hell"});
        assertNotNull(cmd);
        Option longOption = cmd.getOption("-l");
        Object widthOption = cmd.getValue("width");
        assertNotNull(longOption);
        assertNotNull(widthOption);

        assertEquals(2, cmd.getOptions().size());
        assertEquals("hell", widthOption.toString().trim());
        assertEquals("[-l (--length)]", longOption.toString().trim());
    }

    public void testDemoWithOneOption() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"-l"});
        assertNotNull(cmd);
        assertEquals(1, cmd.getOptions().size());
        Option longOption = cmd.getOption("-l");
        assertNotNull(longOption);
        assertEquals("[-l (--length)]", longOption.toString().trim());
    }

    public void testWithOneArgument() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"hell"});
        assertNotNull(cmd);
        assertEquals(1, cmd.getOptions().size());
        Option widthOption = cmd.getOption("width");
        assertNotNull(widthOption);
        assertEquals("hell", widthOption.toString().trim());
    }

    private CommandLine parseArgs(String[] args) {
        DefaultOptionBuilder optionBuilder = new DefaultOptionBuilder();
        GroupBuilder groupBuilder = new GroupBuilder();

        ArgumentBuilder argumentBuilder = new ArgumentBuilder();

        Argument widthOption = argumentBuilder
                .withMinimum(0)
                .withMaximum(1)
                .withName("width")
                .create();

        DefaultOption longOption = optionBuilder
                .withShortName("l")
                .withLongName("length")
                .create();


        Group group =
groupBuilder.withOption(longOption).withOption(widthOption).create();

        Parser parser = new Parser();
        parser.setGroup(group);

        CommandLine cmdLine = null;
        try {
            cmdLine = parser.parse(args);
        } catch (OptionException e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return cmdLine;
    }

}


====================================

2008/6/4 andrew ox. <an...@gmail.com>:
> Hi Russel,
>
> I've been looking at that just now, and it doesn't work as expected.
>
> I'm assuming you mean 'blah' here is a separate argument to 'foo', not
> as an argument to '-q', that 'foo blah' is valid.
>
> I've also been trying to attach an argument to an option so for
> instance -f filename would work, without any luck. I think either I'm
> missing something, or there's a bug.
>
> Please find enclosed a JUnit file which seems to highlight a problem.
> The final test in 'testWithOneArgument' fails.
>
> =======================================
>
> package com.wategan.cli.demo;
>
> import junit.framework.TestCase;
> import org.apache.commons.cli2.*;
> import org.apache.commons.cli2.builder.ArgumentBuilder;
> import org.apache.commons.cli2.builder.DefaultOptionBuilder;
> import org.apache.commons.cli2.builder.GroupBuilder;
> import org.apache.commons.cli2.commandline.Parser;
> import org.apache.commons.cli2.option.DefaultOption;
>
> public class CLIDemoWithOneOptionWithAnArgumentTest extends TestCase {
>
>    public void testOptionAndArgument() throws Exception {
>        CommandLine cmd = parseArgs(new String[]{"-l", "hell"});
>        assertNotNull(cmd);
>        Option longOption = cmd.getOption("-l");
>        Object widthOption = cmd.getValue("width");
>        assertNotNull(longOption);
>        assertNotNull(widthOption);
>
>        assertEquals(2, cmd.getOptions().size());
>        assertEquals("hell", widthOption.toString().trim());
>        assertEquals("[-l (--length)]", longOption.toString().trim());
>    }
>
>    public void testDemoWithOneOption() throws Exception {
>        CommandLine cmd = parseArgs(new String[]{"-l"});
>        assertNotNull(cmd);
>        assertEquals(1, cmd.getOptions().size());
>        Option longOption = cmd.getOption("-l");
>        assertNotNull(longOption);
>        assertEquals("[-l (--length)]", longOption.toString().trim());
>    }
>
>    public void testWithOneArgument() throws Exception {
>        CommandLine cmd = parseArgs(new String[]{"hell"});
>        assertNotNull(cmd);
>        assertEquals(1, cmd.getOptions().size());
>        Option widthOption = cmd.getOption("width");
>        assertNotNull(widthOption);
>        assertEquals("hell", widthOption.toString().trim());
>    }
>
>    private CommandLine parseArgs(String[] args) {
>        DefaultOptionBuilder optionBuilder = new DefaultOptionBuilder();
>        GroupBuilder groupBuilder = new GroupBuilder();
>
>        ArgumentBuilder argumentBuilder = new ArgumentBuilder();
>
>        Argument widthOption = argumentBuilder
>                .withMinimum(0)
>                .withMaximum(1)
>                .withName("width")
>                .create();
>
>        DefaultOption longOption = optionBuilder
>                .withShortName("l")
>                .withLongName("length")
>                .create();
>
>
>        Group group =
> groupBuilder.withOption(longOption).withOption(widthOption).create();
>
>        Parser parser = new Parser();
>        parser.setGroup(group);
>
>        CommandLine cmdLine = null;
>        try {
>            cmdLine = parser.parse(args);
>        } catch (OptionException e) {
>            System.out.println(e.getMessage());
>        } finally {
>        }
>        return cmdLine;
>    }
>
> }
>
> =======================================
>
>
>
>
> 2008/6/3 Russel Winder <ru...@concertant.com>:
>> I must be missing something very simple. . .
>>
>> The 2.x appears to have no way of not processing items on the command
>> line:  it seems that in order to parse a command line you have to
>> specify every aspect of the line.  This means that a command line such
>> as:
>>
>>        foo -q blah
>>
>> where blah is a variable cannot be described.  With 1.x this is easy you
>> just specify information about the -q parse the line and then call
>> getArgList to get a list of all the items not recognized.  This works
>> well, but seems to have no equivalent in 2.x.
>>
>> --
>> Russel.
>> ====================================================
>> Dr Russel Winder                 Partner
>>
>> Concertant LLP                   t: +44 20 7585 2200, +44 20 7193 9203
>> 41 Buckmaster Road,              f: +44 8700 516 084
>> London SW11 1EN, UK.             m: +44 7770 465 077
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [cli] 2.x command line

Posted by "andrew ox." <an...@gmail.com>.
Hi Russel,

I've been looking at that just now, and it doesn't work as expected.

I'm assuming you mean 'blah' here is a separate argument to 'foo', not
as an argument to '-q', that 'foo blah' is valid.

I've also been trying to attach an argument to an option so for
instance -f filename would work, without any luck. I think either I'm
missing something, or there's a bug.

Please find enclosed a JUnit file which seems to highlight a problem.
The final test in 'testWithOneArgument' fails.

=======================================

package com.wategan.cli.demo;

import junit.framework.TestCase;
import org.apache.commons.cli2.*;
import org.apache.commons.cli2.builder.ArgumentBuilder;
import org.apache.commons.cli2.builder.DefaultOptionBuilder;
import org.apache.commons.cli2.builder.GroupBuilder;
import org.apache.commons.cli2.commandline.Parser;
import org.apache.commons.cli2.option.DefaultOption;

public class CLIDemoWithOneOptionWithAnArgumentTest extends TestCase {

    public void testOptionAndArgument() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"-l", "hell"});
        assertNotNull(cmd);
        Option longOption = cmd.getOption("-l");
        Object widthOption = cmd.getValue("width");
        assertNotNull(longOption);
        assertNotNull(widthOption);

        assertEquals(2, cmd.getOptions().size());
        assertEquals("hell", widthOption.toString().trim());
        assertEquals("[-l (--length)]", longOption.toString().trim());
    }

    public void testDemoWithOneOption() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"-l"});
        assertNotNull(cmd);
        assertEquals(1, cmd.getOptions().size());
        Option longOption = cmd.getOption("-l");
        assertNotNull(longOption);
        assertEquals("[-l (--length)]", longOption.toString().trim());
    }

    public void testWithOneArgument() throws Exception {
        CommandLine cmd = parseArgs(new String[]{"hell"});
        assertNotNull(cmd);
        assertEquals(1, cmd.getOptions().size());
        Option widthOption = cmd.getOption("width");
        assertNotNull(widthOption);
        assertEquals("hell", widthOption.toString().trim());
    }

    private CommandLine parseArgs(String[] args) {
        DefaultOptionBuilder optionBuilder = new DefaultOptionBuilder();
        GroupBuilder groupBuilder = new GroupBuilder();

        ArgumentBuilder argumentBuilder = new ArgumentBuilder();

        Argument widthOption = argumentBuilder
                .withMinimum(0)
                .withMaximum(1)
                .withName("width")
                .create();

        DefaultOption longOption = optionBuilder
                .withShortName("l")
                .withLongName("length")
                .create();


        Group group =
groupBuilder.withOption(longOption).withOption(widthOption).create();

        Parser parser = new Parser();
        parser.setGroup(group);

        CommandLine cmdLine = null;
        try {
            cmdLine = parser.parse(args);
        } catch (OptionException e) {
            System.out.println(e.getMessage());
        } finally {
        }
        return cmdLine;
    }

}

=======================================




2008/6/3 Russel Winder <ru...@concertant.com>:
> I must be missing something very simple. . .
>
> The 2.x appears to have no way of not processing items on the command
> line:  it seems that in order to parse a command line you have to
> specify every aspect of the line.  This means that a command line such
> as:
>
>        foo -q blah
>
> where blah is a variable cannot be described.  With 1.x this is easy you
> just specify information about the -q parse the line and then call
> getArgList to get a list of all the items not recognized.  This works
> well, but seems to have no equivalent in 2.x.
>
> --
> Russel.
> ====================================================
> Dr Russel Winder                 Partner
>
> Concertant LLP                   t: +44 20 7585 2200, +44 20 7193 9203
> 41 Buckmaster Road,              f: +44 8700 516 084
> London SW11 1EN, UK.             m: +44 7770 465 077
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org