Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Complex Line Command Syntaxes With JCommander

DZone's Guide to

Complex Line Command Syntaxes With JCommander

· Java Zone ·
Free Resource

Verify, standardize, and correct the Big 4 + more– name, email, phone and global addresses – try our Data Quality APIs now at Melissa Developer Portal!

Complex tools such as git or svn understand a whole set of commands, each of which with their own specific syntax:

git commit --amend -m "Bug fix"
Words such as “commit” above are called “commands” in JCommander, and you can specify them by creating one arg object per command.

For example, here is a the arg object for the commit command:

@Parameters(separators = "=")
public class CommandCommit {

@Parameter(description = "Record changes to the repository")
public List<String> files;

@Parameter(names = "--amend", description = "Amend")
public Boolean amend = false;

@Parameter(names = "--author")
public String author;
}

And here is add:

public class CommandAdd {

@Parameter(description = "Add file contents to the index")
public List<String> patterns;

@Parameter(names = "-i")
public Boolean interactive = false;
}

Then you register these commands with your JCommander object. After the parsing phase, you call getParsedCommand() on your JCommander object, and based on the command that is returned, you know which arg object to inspect (you can still use a main arg object if you want to support options before the first command appears on the command line):

// Options available before commands
CommandMain cm = new CommandMain();
JCommander jc = new JCommander(cm);

// Command: add
CommandAdd add = new CommandAdd();
jc.addCommand("add", add);

// Command: commit
CommandCommit commit = new CommandCommit();
jc.addCommand("commit", commit);

jc.parse("-v", "commit", "--amend", "--author=cbeust", "A.java", "B.java");

Assert.assertTrue(cm.verbose);
Assert.assertEquals(jc.getParsedCommand(), "commit");
Assert.assertTrue(commit.amend);
Assert.assertEquals(commit.author, "cbeust");
Assert.assertEquals(commit.files, Arrays.asList("A.java", "B.java"));

 

Support for complex commands is one of the new features available in JCommander 1.5.

From http://beust.com/weblog/2010/08/08/complex-line-command-syntaxes-with-jcommander

Developers! Quickly and easily gain access to the tools and information you need! Explore, test and combine our data quality APIs at Melissa Developer Portal – home to tools that save time and boost revenue. Our APIs verify, standardize, and correct the Big 4 + more – name, email, phone and global addresses – to ensure accurate delivery, prevent blacklisting and identify risks in real-time.

Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}