Author: jbellis
Date: Wed Jan 19 23:02:51 2011
New Revision: 1061049
URL: http://svn.apache.org/viewvc?rev=1061049&view=rev
Log:
add short options for CLI flags
patch by Christoph Hack and Pavel Yaskevich for CASSANDRA-1565
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1061049&r1=1061048&r2=1061049&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Wed Jan 19 23:02:51 2011
@@ -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
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java?rev=1061049&r1=1061048&r2=1061049&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
Wed Jan 19 23:02:51 2011
@@ -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));
+ }
+ }
+
}