cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbel...@apache.org
Subject svn commit: r1061049 - in /cassandra/branches/cassandra-0.7: CHANGES.txt src/java/org/apache/cassandra/cli/CliOptions.java
Date Wed, 19 Jan 2011 23:02:51 GMT
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));
+        }
+    }
+
 }



Mime
View raw message