modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
| 32 +++++++---
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/ClientMain.java
| 32 +++-------
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/HelpCommand.java
| 29 ++++-----
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LoginCommand.java
| 21 +++---
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LogoutCommand.java
| 4 -
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/QuitCommand.java
| 4 -
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/RecordCommand.java
| 7 +-
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/ScriptCommand.java
| 6 -
modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/VersionCommand.java
| 6 +
9 files changed, 75 insertions(+), 66 deletions(-)
New commits:
commit 48eab9a4fc98505c845f2c8d695312b7cc6a6674
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed Feb 1 14:31:11 2012 -0500
when a commands are passed invalid options, print an error message and the
command's usage - do not print a stack trace
diff --git
a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
index 94a4d05..1809e39 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/output/TabularWriter.java
@@ -64,6 +64,7 @@ public class TabularWriter {
private CSVWriter csvWriter;
private SummaryFilter summaryFilter = new SummaryFilter();
boolean exportMode;
+ boolean hideRowCount;
static Set<String> IGNORED_PROPS = new HashSet<String>();
@@ -115,6 +116,10 @@ public class TabularWriter {
}
}
+ public void setHideRowCount(boolean hideRowCount) {
+ this.hideRowCount = hideRowCount;
+ }
+
public void print(Object object) {
if (object instanceof Map) {
@@ -305,15 +310,18 @@ public class TabularWriter {
public void print(Collection list) {
// List of arbitrary objects
- if (list == null || list.size() == 0)
- out.println("no data");
- else if (list.size() == 1 && !CSV.equals(format)) {
- out.println("one row");
+ if (list == null || list.size() == 0) {
+ if (!hideRowCount) {
+ out.println("0 rows");
+ }
+ } else if (list.size() == 1 && !CSV.equals(format)) {
+ if (!hideRowCount) {
+ out.println("one row");
+ }
print(list.iterator().next());
} else {
-
- String[][] data = null;
+ String[][] data;
if (!allOneType(list)) {
printStrings(list);
@@ -550,7 +558,9 @@ public class TabularWriter {
public void print(Object[] data) {
if (data == null || data.length == 0) {
- out.println("0 rows");
+ if (!hideRowCount) {
+ out.println("0 rows");
+ }
return;
}
out.println("Array of " +
(data.getClass().getComponentType().getName()));
@@ -592,7 +602,9 @@ public class TabularWriter {
public void print(String[][] data) {
if (data == null || data.length == 0) {
- out.println("0 rows");
+ if (!hideRowCount) {
+ out.println("0 rows");
+ }
return;
}
@@ -661,7 +673,9 @@ public class TabularWriter {
}
}
- out.print(data.length + " rows\n");
+ if (!hideRowCount) {
+ out.print(data.length + " rows\n");
+ }
}
private void printSpaced(PrintWriter out, String data, int length) {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/ClientMain.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/ClientMain.java
index d42fc6d..7323ecd 100755
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/ClientMain.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/ClientMain.java
@@ -45,6 +45,7 @@ import mazz.i18n.Msg;
import org.rhq.core.domain.auth.Subject;
import org.rhq.enterprise.client.commands.ClientCommand;
import org.rhq.enterprise.client.commands.ScriptCommand;
+import org.rhq.enterprise.client.script.CommandLineParseException;
import org.rhq.enterprise.clientapi.RemoteClient;
/**
@@ -273,14 +274,8 @@ public class ClientMain {
ClientCommand command = commands.get(cmd);
if (shouldDisplayHelp(args)) {
- outputWriter.println("syntax: " + command.getSyntax());
- outputWriter.println("description: " + command.getHelp() +
"\n");
- return true;
- }
-
- if (shouldDisplayDetailedHelp(args)) {
- outputWriter.println("syntax: " + command.getSyntax());
- outputWriter.println("description: " +
command.getDetailedHelp() + "\n");
+ outputWriter.println("Usage: " + command.getSyntax());
+ outputWriter.println(command.getDetailedHelp());
return true;
}
@@ -289,9 +284,12 @@ public class ClientMain {
processNotes(outputWriter);
outputWriter.println("");
return response;
+ } catch (CommandLineParseException e) {
+ outputWriter.println(command.getPromptCommandString() + ": " +
e.getMessage());
+ outputWriter.println("Usage: " + command.getSyntax());
} catch (ArrayIndexOutOfBoundsException e) {
- outputWriter.println("An incorrect number of arguments was
specified.");
- outputWriter.println("Expected syntax: " +
command.getSyntax());
+ outputWriter.println(command.getPromptCommandString() + ": An
incorrect number of arguments was specified.");
+ outputWriter.println("Usage: " + command.getSyntax());
}
} else {
boolean result = commands.get("exec").execute(this, args);
@@ -309,15 +307,7 @@ public class ClientMain {
return false;
}
- return args[1].equals("-h");
- }
-
- private boolean shouldDisplayDetailedHelp(String[] args) {
- if (args.length < 2) {
- return false;
- }
-
- return args[1].equals("--help");
+ return args[1].equals("-h") || args[1].equals("--help");
}
/**
@@ -585,8 +575,8 @@ public class ClientMain {
*
* These notes are meant to be terse, and pasted/purged at the end of every command
execution.
*
- * @param note
- * String. Ex."There were errors retrieving some data from the server
objects. See System Admin."
+ * @param note the note to be displayed, e.g. "There were errors retrieving some
data from the server objects. See
+ * System Admin."
*/
public void addMenuNote(String note) {
if ((note != null) && (note.trim().length() > 0)) {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/HelpCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/HelpCommand.java
index 6366b6e..4676730 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/HelpCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/HelpCommand.java
@@ -55,9 +55,10 @@ public class HelpCommand implements ClientCommand {
data[i][0] = name;
data[i++][1] = command.getHelp();
}
+
TabularWriter tw = new TabularWriter(client.getPrintWriter(),
"Command", "Description");
tw.setWidth(client.getConsoleWidth());
-
+ tw.setHideRowCount(true);
tw.print(data);
} else if ("api".equals(args[1])) {
Map<String, Object> services = client.getRemoteClient().getManagers();
@@ -131,18 +132,18 @@ public class HelpCommand implements ClientCommand {
tw.print(data);
} else {
client.getPrintWriter().println(
- "Unknown service [" + args[2] + "] try
'help api' for a listing of services");
+ "Unknown service [" + args[2] + "] - try
'help api' for a listing of services");
}
}
} else {
- ClientCommand cmd = commands.get(args[1]);
- if (cmd == null) {
- client.getPrintWriter().println("Uknown command [" + args[1] +
"]");
+ String commandName = args[1];
+ ClientCommand command = commands.get(commandName);
+ if (command == null) {
+ client.getPrintWriter().println(getPromptCommandString() + ":
Unknown command: " + commandName);
} else {
- client.getPrintWriter().println("Help [" + args[1] +
"]");
- client.getPrintWriter().println("Syntax [" + cmd.getSyntax() +
"]");
- client.getPrintWriter().println(cmd.getDetailedHelp());
+ client.getPrintWriter().println("Usage: " +
command.getSyntax());
+ client.getPrintWriter().println(command.getDetailedHelp());
}
}
@@ -150,16 +151,16 @@ public class HelpCommand implements ClientCommand {
}
public String getSyntax() {
- return "help [command] | [api [service]]";
+ return getPromptCommandString() + " [command] | [api [service]]";
}
public String getHelp() {
- return "Help on the client and its commands";
+ return "Display help on CLI commands or services";
}
public String getDetailedHelp() {
- return "Use help [command] to get detailed help\n"
- + "help api will return the list of service apis available for
script execs\n"
- + "help api [service] will display the methods and signatures of a
specific api";
+ return "Use \"help [command]\" to get detailed help for a
command\n"
+ + "\"help api\" will return the list of service APIs
available for script execs\n"
+ + "\"help api [service]\" will list the methods provided
by the specified service API";
}
-}
\ No newline at end of file
+}
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LoginCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LoginCommand.java
index 2e3dbed..72bd8e1 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LoginCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LoginCommand.java
@@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.common.ProductInfo;
import org.rhq.enterprise.client.ClientMain;
+import org.rhq.enterprise.client.script.CommandLineParseException;
import org.rhq.enterprise.clientapi.RemoteClient;
/**
@@ -44,22 +45,22 @@ public class LoginCommand implements ClientCommand {
}
public boolean execute(ClientMain client, String[] args) {
- String user = null;
- String pass = null;
+ if (args.length < 3) {
+ throw new CommandLineParseException("Too few arguments");
+ }
+ if (args.length > 7) {
+ throw new CommandLineParseException("Too many arguments");
+ }
+
+ String user = args[1];
+ String pass = args[2];
String host = "localhost";
String transport = null;
int port = 7080;
PrintWriter printWriter = client.getPrintWriter();
- if (args.length<3) {
- printWriter.println(usage());
- return true;
- }
try {
- user = args[1];
- pass = args[2];
-
if (args.length == 5) {
host = args[3];
port = Integer.parseInt(args[4]);
@@ -133,7 +134,7 @@ public class LoginCommand implements ClientCommand {
}
public String getSyntax() {
- return "login username password [host port [transport]]";
+ return getPromptCommandString() + " username password [host port
[transport]]";
}
public String getHelp() {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LogoutCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LogoutCommand.java
index c764bab..6966508 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LogoutCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/LogoutCommand.java
@@ -48,11 +48,11 @@ public class LogoutCommand implements ClientCommand {
}
public String getSyntax() {
- return "logout";
+ return getPromptCommandString();
}
public String getHelp() {
- return "Logout and disconnect from the server but does not exit the CLI
interpreter";
+ return "Logout and disconnect from the server but do not exit the
CLI";
}
public String getDetailedHelp() {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/QuitCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/QuitCommand.java
index 8640599..1aa3b90 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/QuitCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/QuitCommand.java
@@ -34,11 +34,11 @@ public class QuitCommand implements ClientCommand {
}
public String getSyntax() {
- return "quit";
+ return getPromptCommandString();
}
public String getHelp() {
- return "Exit the CLI interpreter";
+ return "Exit the CLI";
}
public String getDetailedHelp() {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/RecordCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/RecordCommand.java
index 468076e..1e32092 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/RecordCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/RecordCommand.java
@@ -64,7 +64,8 @@ public class RecordCommand implements ClientCommand {
new LongOpt("start", LongOpt.OPTIONAL_ARGUMENT, null,
'b'),
new LongOpt("end", LongOpt.OPTIONAL_ARGUMENT, null,
'e')
};
- Getopt getopt = new Getopt("exec", args, shortOpts, longOpts);
+ Getopt getopt = new Getopt(getPromptCommandString(), args, shortOpts, longOpts);
+ getopt.setOpterr(false);
RecordArgs recordArgs = new RecordArgs();
@@ -73,7 +74,7 @@ public class RecordCommand implements ClientCommand {
switch (code) {
case ':':
case '?':
- throw new IllegalArgumentException("Invalid options");
+ throw new CommandLineParseException("Invalid option");
case 1:
break;
case 'f':
@@ -128,7 +129,7 @@ public class RecordCommand implements ClientCommand {
}
public String getSyntax() {
- return "record [[-b | --start] | [-e | --end]] [-a | --append] -f
<file>";
+ return getPromptCommandString() + " [[-b | --start] | [-e | --end]] [-a |
--append] -f <file>";
}
public String getHelp() {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/ScriptCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/ScriptCommand.java
index 7b8c37f..4a99316 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/ScriptCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/ScriptCommand.java
@@ -274,7 +274,7 @@ public class ScriptCommand implements ClientCommand {
}
public String getSyntax() {
- return "exec <statement> | [-s<indexed|named>] -f <file>
[args]";
+ return getPromptCommandString() + " <statement> |
[-s<indexed|named>] -f <file> [args]";
}
public String getHelp() {
@@ -282,8 +282,8 @@ public class ScriptCommand implements ClientCommand {
}
public String getDetailedHelp() {
- return "Execute a statement or a script. The following services managers are
available: "
- + RhqManagers.values();
+ return "Execute a statement or a script. The following service managers are
available: "
+ + Arrays.toString(RhqManagers.values());
}
public ScriptContext getContext() {
diff --git
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/VersionCommand.java
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/VersionCommand.java
index 2df0b72..802ac4c 100644
---
a/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/VersionCommand.java
+++
b/modules/enterprise/remoting/cli/src/main/java/org/rhq/enterprise/client/commands/VersionCommand.java
@@ -25,6 +25,7 @@ import gnu.getopt.Getopt;
import gnu.getopt.LongOpt;
import org.rhq.enterprise.client.ClientMain;
import org.rhq.enterprise.client.Version;
+import org.rhq.enterprise.client.script.CommandLineParseException;
/**
* Command to show the user the version information of the CLI.
@@ -68,7 +69,8 @@ public class VersionCommand implements ClientCommand {
LongOpt[] longOpts = {
new LongOpt("verbose", LongOpt.OPTIONAL_ARGUMENT, null,
'v')
};
- Getopt getopt = new Getopt("exec", args, shortOpts, longOpts);
+ Getopt getopt = new Getopt(getPromptCommandString(), args, shortOpts, longOpts);
+ getopt.setOpterr(false);
VersionArgs versionArgs = new VersionArgs();
@@ -76,7 +78,7 @@ public class VersionCommand implements ClientCommand {
while (code != -1) {
switch (code) {
case ':':
- throw new IllegalArgumentException("Illegal option.");
+ throw new CommandLineParseException("Invalid option");
case 'v':
versionArgs.verbose = true;
break;