HelpCommand.java
package org.cyclopsgroup.jmxterm.cc;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.Validate;
import org.cyclopsgroup.jcli.ArgumentProcessor;
import org.cyclopsgroup.jcli.annotation.Argument;
import org.cyclopsgroup.jcli.annotation.Cli;
import org.cyclopsgroup.jcli.annotation.MultiValue;
import org.cyclopsgroup.jmxterm.Command;
import org.cyclopsgroup.jmxterm.io.RuntimeIOException;
/**
* Command that display a help message
*
* @author <a href="mailto:jiaqi.guo@gmail.com">Jiaqi Guo</a>
*/
@Cli(
name = "help",
description = "Display available commands or usage of a command",
note =
"Run \"help [command1] [command2] ...\" to display usage or certain command(s). Help without argument shows list of available commands")
public class HelpCommand extends Command {
private List<String> argNames = Collections.emptyList();
private CommandCenter commandCenter = null;
@Override
public void execute() {
Validate.notNull(commandCenter, "Command center hasn't been set yet");
if (argNames.isEmpty()) {
List<String> commandNames = new ArrayList<String>(commandCenter.getCommandNames());
Collections.sort(commandNames);
getSession().output.printMessage("following commands are available to use:");
for (String commandName : commandNames) {
Class<? extends Command> commandType = commandCenter.getCommandType(commandName);
org.cyclopsgroup.jcli.spi.Cli cli =
ArgumentProcessor.forType(commandType).createParsingContext().cli();
getSession().output.println(String.format("%-8s - %s", commandName, cli.getDescription()));
}
} else {
for (String argName : argNames) {
Class<? extends Command> commandType = commandCenter.getCommandType(argName);
if (commandType == null) {
throw new IllegalArgumentException("Command " + argName + " is not found");
}
ArgumentProcessor<? extends Command> ap = ArgumentProcessor.forType(commandType);
try {
ap.printHelp(new PrintWriter(System.out, true));
} catch (IOException e) {
throw new RuntimeIOException("Can't print help message", e);
}
}
}
}
/**
* @param argNames Array of arguments
*/
@MultiValue(listType = ArrayList.class)
@Argument
public final void setArgNames(List<String> argNames) {
Validate.notNull(argNames, "argNames can't be NULL");
this.argNames = argNames;
}
/**
* @param commandCenter CommandCenter object that calls this help command
*/
final void setCommandCenter(CommandCenter commandCenter) {
Validate.notNull(commandCenter, "commandCenter can't be NULL");
this.commandCenter = commandCenter;
}
}