add short options for CLI flags

patch by Christoph Hack and Pavel Yaskevich for CASSANDRA-1565

git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1061049 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2011-01-19 23:02:51 +00:00
parent 0be34cec41
commit 98aaa38ec8
2 changed files with 80 additions and 35 deletions

View File

@ -27,6 +27,7 @@
* fix writing SSTable column count statistics (CASSANDRA-1976)
* fix streaming of multiple CFs during bootstrap (CASSANDRA-1992)
* explicitly set JVM GC new generation size with -Xmn (CASSANDRA-1968)
* add short options for CLI flags (CASSANDRA-1565)
0.7.0-final

View File

@ -24,9 +24,12 @@ import org.apache.commons.cli.*;
* Used to process, and act upon the arguments passed to the CLI.
*
*/
public class CliOptions {
public class CliOptions
{
private static CLIOptions options = null; // Info about command line options
private static Options options = null; // Info about command line options
// Name of the command line tool (used for error messages)
private static final String TOOL_NAME = "cassandra-cli";
// Command line options
private static final String HOST_OPTION = "host";
@ -48,48 +51,46 @@ public class CliOptions {
// whether they take an extra argument, etc.
static
{
options = new Options();
options.addOption(HOST_OPTION, true, "cassandra server's host name");
options.addOption(PORT_OPTION, true, "cassandra server's thrift port");
options.addOption(UNFRAME_OPTION, false, "cassandra server's framed transport");
options.addOption(DEBUG_OPTION, false, "display stack traces");
options.addOption(USERNAME_OPTION, true, "username for cassandra authentication");
options.addOption(PASSWORD_OPTION, true, "password for cassandra authentication");
options.addOption(KEYSPACE_OPTION, true, "cassandra keyspace user is authenticated against");
options.addOption(BATCH_OPTION, false, "enabled batch mode (supress output; errors are fatal)");
options.addOption(FILE_OPTION, true, "load statements from the specific file.");
options.addOption(JMX_PORT_OPTION, true, "JMX service port.");
options.addOption(HELP_OPTION, false, "usage help.");
options = new CLIOptions();
options.addOption("h", HOST_OPTION, "HOSTNAME", "cassandra server's host name");
options.addOption("p", PORT_OPTION, "PORT", "cassandra server's thrift port");
options.addOption("u", USERNAME_OPTION, "USERNAME", "user name for cassandra authentication");
options.addOption("pw", PASSWORD_OPTION, "PASSWORD", "password for cassandra authentication");
options.addOption("k", KEYSPACE_OPTION, "KEYSPACE", "cassandra keyspace user is authenticated against");
options.addOption("f", FILE_OPTION, "FILENAME", "load statements from the specific file.");
options.addOption(null, JMX_PORT_OPTION, "JMX-PORT", "JMX service port");
// options without argument
options.addOption("B", BATCH_OPTION, "enabled batch mode (suppress output; errors are fatal)");
options.addOption(null, UNFRAME_OPTION, "use cassandra server's unframed transport");
options.addOption(null, DEBUG_OPTION, "display stack traces");
options.addOption("?", HELP_OPTION, "usage help.");
}
private static void printUsage()
{
System.err.println("Usage: cassandra-cli --host hostname [--port <port>] [--jmxport <port>] [--file <filename>] [--unframed] [--debug]");
System.err.println("\t[--username username] [--password password] [--keyspace keyspace] [--batch] [--help]");
new HelpFormatter().printHelp(TOOL_NAME, options);
}
public void processArgs(CliSessionState css, String[] args)
{
CommandLineParser parser = new PosixParser();
CommandLineParser parser = new GnuParser();
try
{
CommandLine cmd = parser.parse(options, args);
if (!cmd.hasOption(HOST_OPTION))
CommandLine cmd = parser.parse(options, args, false);
if (cmd.hasOption(HOST_OPTION))
{
css.hostName = cmd.getOptionValue(HOST_OPTION);
}
else
{
// host name not specified in command line.
// In this case, we don't implicitly connect at CLI startup. In this case,
// the user must use the "connect" CLI statement to connect.
//
css.hostName = null;
// HelpFormatter formatter = new HelpFormatter();
// formatter.printHelp("java com.facebook.infrastructure.cli.CliMain ", options);
// System.exit(1);
}
else
{
css.hostName = cmd.getOptionValue(HOST_OPTION);
}
// Look to see if frame has been specified
@ -113,23 +114,24 @@ public class CliOptions {
{
css.thriftPort = DEFAULT_THRIFT_PORT;
}
// Look for authentication credentials (username and password)
if (cmd.hasOption(USERNAME_OPTION))
if (cmd.hasOption(USERNAME_OPTION))
{
css.username = cmd.getOptionValue(USERNAME_OPTION);
}
if (cmd.hasOption(PASSWORD_OPTION))
{
css.password = cmd.getOptionValue(PASSWORD_OPTION);
}
// Look for keyspace
if (cmd.hasOption(KEYSPACE_OPTION))
if (cmd.hasOption(KEYSPACE_OPTION))
{
css.keyspace = cmd.getOptionValue(KEYSPACE_OPTION);
}
if (cmd.hasOption(BATCH_OPTION))
{
css.batch = true;
@ -150,12 +152,54 @@ public class CliOptions {
printUsage();
System.exit(1);
}
// Abort if there are any unrecognized arguments left
if (cmd.getArgs().length > 0)
{
System.err.printf("Unknown argument: %s\n", cmd.getArgs()[0]);
System.err.println();
printUsage();
System.exit(1);
}
}
catch (ParseException e)
{
System.err.println(e.getMessage());
System.err.println();
printUsage();
System.err.println("\n" + e.getMessage());
System.exit(1);
}
}
private static class CLIOptions extends Options
{
/**
* Add option with argument and argument name
* @param opt shortcut for option name
* @param longOpt complete option name
* @param argName argument name
* @param description description of the option
* @return updated Options object
*/
public Options addOption(String opt, String longOpt, String argName, String description)
{
Option option = new Option(opt, longOpt, true, description);
option.setArgName(argName);
return addOption(option);
}
/**
* Add option without argument
* @param opt shortcut for option name
* @param longOpt complete option name
* @param description description of the option
* @return updated Options object
*/
public Options addOption(String opt, String longOpt, String description)
{
return addOption(new Option(opt, longOpt, false, description));
}
}
}