delete is a reserved word in javascript: use remove instead
interactive mode
This commit is contained in:
parent
6ce4645026
commit
e30d26fd77
@ -19,6 +19,7 @@ public class CommandlineParser {
|
||||
opts.addOption("r", "runas", true, "specify run-as user");
|
||||
opts.addOption("e", "expr", true, "expression to execute");
|
||||
opts.addOption("f", "file", true, "script file to execute");
|
||||
opts.addOption("i", "interactive", false, "interactive shell");
|
||||
PosixParser parser = new PosixParser();
|
||||
try {
|
||||
if (args.length < 1) {
|
||||
@ -51,6 +52,10 @@ public class CommandlineParser {
|
||||
return cmd.getOptionValue("file", null);
|
||||
}
|
||||
|
||||
public boolean isInteractive() {
|
||||
return cmd.hasOption("interactive");
|
||||
}
|
||||
|
||||
public void printHelp() {
|
||||
HelpFormatter formatter = new HelpFormatter();
|
||||
formatter.printHelp("hsscript", opts);
|
||||
|
@ -62,6 +62,7 @@ public class JSONFormatter {
|
||||
}
|
||||
|
||||
public String format(Object object) {
|
||||
if (object == null) return "";
|
||||
if (object instanceof List<?>) {
|
||||
return formatList((List<?>) object);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package de.hsadmin.jscli;
|
||||
|
||||
import java.io.Console;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileReader;
|
||||
@ -12,11 +13,8 @@ public class Main {
|
||||
try {
|
||||
JSONFormatter formatter = new JSONFormatter();
|
||||
CommandlineParser cmdParser = new CommandlineParser(args);
|
||||
ScriptClient scriptClient = new ScriptClient(cmdParser.getUser(), cmdParser.getRunAs());
|
||||
String expr = cmdParser.getExpression();
|
||||
if (expr != null && expr.length() > 0) {
|
||||
System.out.println(formatter.format(scriptClient.execute(expr)));
|
||||
}
|
||||
String runAs = cmdParser.getRunAs();
|
||||
ScriptClient scriptClient = new ScriptClient(cmdParser.getUser(), runAs);
|
||||
String file = cmdParser.getFile();
|
||||
if (file != null && file.length() > 0) {
|
||||
if ("-".equals(file)) {
|
||||
@ -30,6 +28,29 @@ public class Main {
|
||||
}
|
||||
}
|
||||
}
|
||||
String expr = cmdParser.getExpression();
|
||||
if (expr != null && expr.length() > 0) {
|
||||
System.out.println(formatter.format(scriptClient.execute(expr)));
|
||||
}
|
||||
if (cmdParser.isInteractive()) {
|
||||
Console console = System.console();
|
||||
if (console == null) {
|
||||
throw new JSCliException("fatal error: console not found");
|
||||
}
|
||||
String command = console.readLine("%s@hsadmin>", runAs);
|
||||
while (!("bye".equals(command.trim()) || "exit".equals(command.trim()) || "quit".equals(command.trim()))) {
|
||||
try {
|
||||
console.printf("%s\n", formatter.format(scriptClient.execute(command)));
|
||||
} catch (Exception e) {
|
||||
console.printf("ERR: %s\n", e.getLocalizedMessage());
|
||||
}
|
||||
command = console.readLine("%s@hsadmin>", runAs);
|
||||
while (command.endsWith("\\")) {
|
||||
command = command.substring(0, command.length() - 1) +
|
||||
console.readLine(">");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (JSCliException e) {
|
||||
System.err.println(e.getMessage());
|
||||
System.exit(-1);
|
||||
|
@ -51,12 +51,15 @@ public class ScriptClient {
|
||||
if (parts.length == 2) {
|
||||
String module = parts[0];
|
||||
String function = parts[1];
|
||||
if ("delete".equals(function)) {
|
||||
function = "remove";
|
||||
}
|
||||
try {
|
||||
engine.eval("if (typeof " + module + " === 'undefined') " +
|
||||
"{ var " + module + " = { }; };\n" +
|
||||
module + "['" + function + "'] = function(json) { " +
|
||||
"var mod = '" + module + "'; " +
|
||||
"var fct = '" + function + "'; " +
|
||||
("remove".equals(function) ? "var fct = 'delete'; " : "var fct = '" + function + "'; ") +
|
||||
"var params = new ArrayList(); " +
|
||||
"params.add(casgrantingticket.getRunAs()); " +
|
||||
"params.add(casgrantingticket.getTicket()); " +
|
||||
|
Loading…
Reference in New Issue
Block a user