use of com.bluenimble.platform.cli.command.CommandOption in project serverless by bluenimble.
the class RemoteCommand method execute.
@Override
public CommandResult execute(Tool tool, Map<String, CommandOption> options) throws CommandExecutionException {
if (handlers == null || handlers.isEmpty()) {
Map<String, String> data = new HashMap<String, String>();
if (options != null && !options.isEmpty()) {
for (CommandOption o : options.values()) {
data.put(o.name(), (String) o.getArg(0));
}
}
String cmd = (String) tool.currentContext().get(ToolContext.CommandLine);
String[] aArgs = args(args, cmd);
if (aArgs != null && aArgs.length > 0) {
for (int i = 0; i < aArgs.length; i++) {
data.put(String.valueOf(i), aArgs[i]);
}
}
return RemoteUtils.processRequest(tool, source, data);
}
return super.execute(tool, options);
}
use of com.bluenimble.platform.cli.command.CommandOption in project serverless by bluenimble.
the class AbstractTool method processCommand.
@SuppressWarnings({ "unchecked" })
@Override
public int processCommand(String cmdLine) throws IOException {
if (!isAllowed()) {
writeln("not allowed to write commands.");
return FAILURE;
}
if (cmdLine == null) {
cmdLine = readLine();
}
if (cmdLine == null || cmdLine.trim().isEmpty()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
return SUCCESS;
}
String delimeter = getDelimeter();
if (!delimeter.equals("\n")) {
runingCommand.setCmdLine(runingCommand.getCmdLine() + "\n" + cmdLine);
if (!cmdLine.endsWith(currentContext.getDelimiter())) {
return UNTERMINATED;
} else {
cmdLine = runingCommand.getCmdLine();
runingCommand.setCmdLine("");
}
}
if (!delimeter.equals("\n")) {
cmdLine = cmdLine.substring(0, cmdLine.length() - delimeter.length());
}
String commandName;
String params;
String out = null;
cmdLine = cmdLine.trim();
// multiple commands
if (cmdLine.indexOf(COMMAND_CHAINING_TOKEN) > 0) {
String[] aCommands = Lang.split(cmdLine, COMMAND_CHAINING_TOKEN, true);
for (String cmd : aCommands) {
processCommand(cmd);
}
return MULTIPLE;
}
final Map<String, Object> vars = (Map<String, Object>) getContext(Tool.ROOT_CTX).get(ToolContext.VARS);
Calendar now = Calendar.getInstance();
vars.put("day", now.get(Calendar.DAY_OF_MONTH));
vars.put("month", now.get(Calendar.MONTH) + 1);
vars.put("year", now.get(Calendar.YEAR));
vars.put("hour", now.get(Calendar.HOUR));
vars.put("min", now.get(Calendar.MINUTE));
vars.put("sec", now.get(Calendar.SECOND));
vars.put("uuid", Lang.UUID(20).toString());
cmdLine = Lang.resolve(cmdLine, ExpStart, ExpEnd, new Lang.VariableResolver() {
@Override
public String resolve(String ns, String p) {
Object o = vars.get(ns == null ? p : ns + Lang.DOT + p);
if (o == null) {
return null;
}
return String.valueOf(o);
}
});
int indexOfSpace = cmdLine.indexOf(' ');
if (indexOfSpace > 0) {
commandName = cmdLine.substring(0, indexOfSpace);
params = cmdLine.substring(indexOfSpace + 1);
int outIndex = params.lastIndexOf(OUT_TOKEN);
if (outIndex >= 0) {
out = params.substring(outIndex + OUT_TOKEN.length());
params = params.substring(0, outIndex);
}
} else {
commandName = cmdLine;
params = null;
}
if (Lang.isNullOrEmpty(out)) {
out = null;
} else {
out = out.trim();
if (out.startsWith(FilePrefix)) {
vars.put(CMD_OUT, CMD_OUT_FILE);
}
}
commandName = commandName.trim().toLowerCase();
params = onCommand(commandName, params);
Command cmd = getCommand(commandName);
if (cmd == null) {
String synCommandName = getCommandForSynonym(commandName);
if (synCommandName != null) {
cmd = getCommand(synCommandName);
}
}
if (cmd != null) {
if (!cmd.forContext(currentContext)) {
printer.error("Command [" + commandName + "] not found in current context");
} else {
history.add(cmdLine);
if (!cmd.isSingleton(this)) {
try {
cmd = (Command) cmd.getClass().newInstance();
} catch (Throwable th) {
if (isTestMode()) {
printer().content(th.getMessage(), Lang.toString(th));
}
onException(cmd, th);
return FAILURE;
}
}
CommandResult result = null;
try {
final Map<String, CommandOption> options = commandParser.parse(cmd, params);
if (options != null && !options.isEmpty()) {
Iterator<CommandOption> optIter = options.values().iterator();
while (optIter.hasNext()) {
CommandOption option = optIter.next();
if (option.isMasked() && option.acceptsArgs() != CommandOption.NO_ARG && option.getArgsCount() == 0) {
if (System.console() != null) {
char[] aArg = System.console().readPassword("\t- " + option.label() + "? ");
if ((aArg == null || aArg.length == 0)) {
printer.error("'" + option.label() + "' requires at least one argument.");
}
option.addArg(new String(aArg));
} else {
printer.error("'" + option.label() + "' requires at least one argument.");
return FAILURE;
}
}
}
}
if (Lang.AMP.equals(out)) {
final Command tCmd = cmd;
new Thread() {
public void run() {
try {
tCmd.execute(AbstractTool.this, options);
} catch (CommandExecutionException th) {
if (isTestMode()) {
th.printStackTrace(System.out);
}
try {
onException(tCmd, th);
} catch (IOException ioex) {
// ignore
}
}
}
}.start();
printer.info("command is running in background");
} else {
result = cmd.execute(this, options);
}
} catch (Throwable th) {
if (isTestMode()) {
printer.content("Error", Lang.toString(Lang.getRootCause(th)));
} else {
onException(cmd, th);
}
return FAILURE;
}
if (result != null) {
if (result.getType() == CommandResult.OK) {
if (out != null && !Lang.AMP.equals(out) && result.getContent() != null) {
if (out.startsWith(FilePrefix)) {
out = out.substring(FilePrefix.length());
InputStream is = null;
if (result.getContent() instanceof InputStream) {
is = (InputStream) result.getContent();
} else {
Object content = result.getContent();
if (content instanceof YamlObject) {
content = ((YamlObject) content).toJson();
}
is = new ByteArrayInputStream(content.toString().getBytes());
}
OutputStream os = null;
try {
os = new FileOutputStream(new File(out));
IOUtils.copy(is, os);
} catch (Exception e) {
onException(cmd, e);
return FAILURE;
} finally {
IOUtils.closeQuietly(os);
IOUtils.closeQuietly(is);
vars.remove(CMD_OUT);
}
} else {
Object content = result.getContent();
if (content instanceof YamlObject) {
content = ((YamlObject) content).toJson();
}
vars.put(out, content);
}
} else if (result.getContent() != null) {
if (result.getContent() instanceof JsonObject) {
printer().success(Lang.BLANK);
if (printer().isOn()) {
((JsonObject) result.getContent()).write(new FriendlyJsonEmitter(this));
writeln(Lang.BLANK);
}
} else if (result.getContent() instanceof YamlObject) {
printer().success(Lang.BLANK);
if (printer().isOn()) {
YamlObject yaml = (YamlObject) result.getContent();
yaml.print(this, 4);
writeln(Lang.BLANK);
}
} else if (result.getContent() instanceof InputStream) {
System.out.println("result.getContent () instanceof InputStream");
OutputStream os = null;
try {
os = new FileOutputStream(new File(out));
IOUtils.copy(new ByteArrayInputStream(result.getContent().toString().getBytes()), os);
} catch (Exception e) {
onException(cmd, e);
return FAILURE;
} finally {
IOUtils.closeQuietly(os);
}
} else {
printer().success(String.valueOf(result.getContent()));
if (printer().isOn()) {
writeln(Lang.BLANK);
}
}
}
} else if (result.getContent() != null) {
if (result.getContent() instanceof JsonObject) {
printer().error(Lang.BLANK);
((JsonObject) result.getContent()).write(new FriendlyJsonEmitter(this));
writeln(Lang.BLANK);
} else if (result.getContent() instanceof YamlObject) {
printer().error(Lang.BLANK);
if (printer().isOn()) {
YamlObject yaml = (YamlObject) result.getContent();
yaml.print(this, 4);
writeln(Lang.BLANK);
}
} else {
printer.error(String.valueOf(result.getContent()));
writeln(Lang.BLANK);
}
}
}
}
} else {
printer.error("command '" + commandName + "' not found. Type in 'help' to list all available commands");
}
return SUCCESS;
}
use of com.bluenimble.platform.cli.command.CommandOption in project serverless by bluenimble.
the class WGetCommand method execute.
@SuppressWarnings("unchecked")
@Override
public CommandResult execute(Tool tool, Map<String, CommandOption> options) throws CommandExecutionException {
String sUrl = (String) options.get("u").getArg(0);
CommandOption varOpt = options.get("v");
CommandOption fileOpt = options.get("f");
InputStream in = null;
Writer writer = null;
try {
if (varOpt != null) {
writer = new StringWriter();
} else if (fileOpt != null) {
writer = new FileWriter(new File((String) fileOpt.getArg(0)));
} else {
writer = new PrintWriter(System.out);
}
in = new URL(sUrl).openStream();
IOUtils.copy(in, writer);
if (varOpt != null) {
Map<String, Object> vars = (Map<String, Object>) tool.getContext(Tool.ROOT_CTX).get(ToolContext.VARS);
vars.put((String) varOpt.getArg(0), writer.toString());
}
} catch (Throwable th) {
throw new CommandExecutionException(th.getMessage(), th);
} finally {
IOUtils.closeQuietly(writer);
IOUtils.closeQuietly(in);
}
return new DefaultCommandResult(CommandResult.OK, "Command Executed with success");
}
use of com.bluenimble.platform.cli.command.CommandOption in project serverless by bluenimble.
the class EndLnParser method main.
public static void main(String[] args) throws CommandParsingError {
String cmdLine = " -s -f argF -a rg2 -q select * \n from \n where 1=1";
AbstractCommand command = new AbstractCommand("abc", "desc", "s,f++,!q+") {
private static final long serialVersionUID = 0L;
@Override
public CommandResult execute(Tool tool, Map<String, CommandOption> options) throws CommandExecutionException {
return null;
}
};
CommandParser wrapper = new CommandParserImpl();
Map<String, CommandOption> res = wrapper.parse(command, cmdLine);
Iterator<CommandOption> optionsIter = res.values().iterator();
while (optionsIter.hasNext()) {
System.out.print(optionsIter.next());
}
}
use of com.bluenimble.platform.cli.command.CommandOption in project serverless by bluenimble.
the class ManCommand method execute.
@Override
public CommandResult execute(Tool tool, Map<String, CommandOption> options) throws CommandExecutionException {
CommandOption co = options.get(CommandOption.CMD_LINE);
if (co == null || co.getArg(0) == null) {
return new DefaultCommandResult(CommandResult.KO, "Specify a command");
}
String commandName = (String) co.getArg(0);
commandName = commandName.trim();
int indexOfSpace = commandName.indexOf(Lang.SPACE);
if (indexOfSpace > 0) {
commandName = commandName.substring(0, indexOfSpace);
}
Command command = tool.getCommand(commandName);
String man = null;
if (command == null) {
man = tool.getManual(commandName);
if (man == null) {
return new DefaultCommandResult(CommandResult.KO, "Command not found in any context");
}
}
if (command != null && !command.forContext(tool.currentContext())) {
return new DefaultCommandResult(CommandResult.KO, "Command not accessible by the current context");
}
if (man == null) {
man = command.manual();
if (man == null || man.trim().isEmpty()) {
man = command.describe();
}
}
return new DefaultCommandResult(CommandResult.OK, man);
}
Aggregations