hi,

>  Command
>  + isValid(options: Options):boolean
>  + getDescription():String
>  + execute(options:Options):void
>  + getPrimaryOption():Option
>
>  Each command has a primaryOption which uniquely identifies the command from
>  the command line.  For example, if you have a command which scales images,
>  then it might be identified by the --scale option.
i implemented a 'shell like' interactive console. each 'command'
defines it's own options and arguments. so eg a: "rm -r files "
behaves different as a "mv files dst".
the commands are then assembled by the main app into one option group
and CLI2 just works perfect.

Example of a simple 'rm' command:

    protected Command createCommand() {
        return new CommandBuilder()
                .withName("rm")
                .withDescription(getShortDescription())
                .withChildren(new GroupBuilder()
                        .withName("Options:")
                        .withOption(optRecursive = new DefaultOptionBuilder()
                                .withShortName("r")
                                .withDescription("remove the directory
recursively")
                                .create())
                        .withOption(argPath = new ArgumentBuilder()
                                .withName("path")
                                .withDescription("path of the file or
directory")
                                .withMinimum(1)
                                .withMaximum(1)
                                .create()
                        )
                        .create()
                )
                .create();
    }


>  The main application is responsible for discovering and loading all plugins
>  at runtime (using the SPI mechanism), determining which plugin to execute,
>  and printing out help information.  It also invokes the command by first
>  invoking the command's isValid method to validate the input before invoking
>  its execute method.
IMO the validation is not really needed - the 'execute' of the command
can always throw a IllegalArgumentException so there is not need to
validating it first.

>  I'm curious if other people are using CLI in a similar manner, or if people
>  create separate CLI applications for each piece of functionality?  If this
>  usage pattern is common, should CLI2 incorporate that usage pattern more
>  formally into its design?
i think this is not really needed - since CLI2 already offers a very
smart way of implementing exactly this.

regards, toby

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to