From fb709fba092d5297ead99c5da6fbbd6b77f0214a Mon Sep 17 00:00:00 2001 From: Peter Hormanns Date: Wed, 28 Nov 2012 15:57:29 +0100 Subject: [PATCH] introduce jline line editing features --- hsarjcli/.classpath | 1 + hsarjcli/lib/jline-1.0.jar | Bin 0 -> 67901 bytes hsarjcli/src/de/hsadmin/jscli/CASTicket.java | 27 +++----- .../src/de/hsadmin/jscli/ConsoleWrapper.java | 62 ++++++++++++++++++ hsarjcli/src/de/hsadmin/jscli/Main.java | 40 ++++------- .../src/de/hsadmin/jscli/ScriptClient.java | 23 ++++++- 6 files changed, 107 insertions(+), 46 deletions(-) create mode 100644 hsarjcli/lib/jline-1.0.jar create mode 100644 hsarjcli/src/de/hsadmin/jscli/ConsoleWrapper.java diff --git a/hsarjcli/.classpath b/hsarjcli/.classpath index 30d5f00..20e5ff1 100644 --- a/hsarjcli/.classpath +++ b/hsarjcli/.classpath @@ -6,5 +6,6 @@ + diff --git a/hsarjcli/lib/jline-1.0.jar b/hsarjcli/lib/jline-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..0089779cffad87ef80d105c1d89d43a502d5e627 GIT binary patch literal 67901 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 PTA&)hExyD3AIJYc=N*K- literal 0 HcmV?d00001 diff --git a/hsarjcli/src/de/hsadmin/jscli/CASTicket.java b/hsarjcli/src/de/hsadmin/jscli/CASTicket.java index 6ec99fa..e61eaaa 100644 --- a/hsarjcli/src/de/hsadmin/jscli/CASTicket.java +++ b/hsarjcli/src/de/hsadmin/jscli/CASTicket.java @@ -2,7 +2,6 @@ package de.hsadmin.jscli; import java.io.BufferedReader; import java.io.BufferedWriter; -import java.io.Console; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; @@ -22,13 +21,16 @@ public class CASTicket { private static final String LOGIN_URL = "https://login.hostsharing.net:443/cas/v1/tickets"; private static final String BACKEND_URL = "https://admin.hostsharing.net:443/hsar/backend"; - private String loginURL; - private String backendURL; - private String grantingTicket; - private String runAs; - private String user; + final private String loginURL; + final private String backendURL; + final private String runAs; + final private String user; + final private ConsoleWrapper cons; - public CASTicket(String user, String runAs) throws JSCliException { + private String grantingTicket; + + public CASTicket(ConsoleWrapper console, String user, String runAs) throws JSCliException { + this.cons = console; this.user = user; this.runAs = runAs; Config config = Config.getInstance(); @@ -77,16 +79,7 @@ public class CASTicket { } private String readPasswordFromConsole() throws JSCliException { - char[] password = null; - Console console = System.console(); - if (console == null) { - throw new JSCliException("fatal error: console not found"); - } - password = console.readPassword("password:"); - if (password == null || password.length <= 0) { - throw new JSCliException("no password given"); - } - return new String(password); + return cons.readPassword(); } private String doHttpPost(String urlString, String encodedParams) throws JSCliException { diff --git a/hsarjcli/src/de/hsadmin/jscli/ConsoleWrapper.java b/hsarjcli/src/de/hsadmin/jscli/ConsoleWrapper.java new file mode 100644 index 0000000..28f1a44 --- /dev/null +++ b/hsarjcli/src/de/hsadmin/jscli/ConsoleWrapper.java @@ -0,0 +1,62 @@ +package de.hsadmin.jscli; + +import java.io.IOException; + +import jline.ConsoleReader; +import jline.SimpleCompletor; + +public class ConsoleWrapper { + + private ConsoleReader cons; + private String prompt; + + public void open(final String prompt) throws JSCliException { + this.prompt = prompt; + try { + cons = new ConsoleReader(); + cons.setDefaultPrompt(prompt); + } catch (IOException e) { + throw new JSCliException(e); + } + } + + public String readInput() throws JSCliException { + try { + String line = cons.readLine(); + while (line.trim().endsWith("\\")) { + line = line.substring(0, line.length() - 1) + "\n" + cons.readLine(">"); + } + return line; + } catch (IOException e) { + throw new JSCliException(e); + } + } + + public void println(String text) throws JSCliException { + try { + if (cons != null) { + cons.printString(text); + cons.printNewline(); + } else { + throw new JSCliException("cannot write console"); + } + } catch (IOException e) { + throw new JSCliException(e); + } + } + + public String readPassword() throws JSCliException { + try { + String pw = cons.readLine("password:", new Character('*')); + cons.setDefaultPrompt(prompt); + return pw; + } catch (IOException e) { + throw new JSCliException(e); + } + } + + public void codeCompletion(String[] candidateStrings) { + cons.addCompletor(new SimpleCompletor(candidateStrings)); + } + +} diff --git a/hsarjcli/src/de/hsadmin/jscli/Main.java b/hsarjcli/src/de/hsadmin/jscli/Main.java index 11d0675..7eec1a5 100644 --- a/hsarjcli/src/de/hsadmin/jscli/Main.java +++ b/hsarjcli/src/de/hsadmin/jscli/Main.java @@ -1,6 +1,5 @@ package de.hsadmin.jscli; -import java.io.Console; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; @@ -10,19 +9,22 @@ import java.io.InputStreamReader; public class Main { public static void main(String[] args) { + ConsoleWrapper console = null; try { - JSONFormatter formatter = new JSONFormatter(); CommandlineParser cmdParser = new CommandlineParser(args); String runAs = cmdParser.getRunAs(); - ScriptClient scriptClient = new ScriptClient(cmdParser.getUser(), runAs); + console = new ConsoleWrapper(); + console.open(runAs + "@hsadmin>"); + JSONFormatter formatter = new JSONFormatter(); + ScriptClient scriptClient = new ScriptClient(console, cmdParser.getUser(), runAs); String file = cmdParser.getFile(); if (file != null && file.length() > 0) { if ("-".equals(file)) { - System.out.println(formatter.format(scriptClient.execute(new InputStreamReader(System.in)))); + console.println(formatter.format(scriptClient.execute(new InputStreamReader(System.in)))); } else { File fileHandle = new File(file); try { - System.out.println(formatter.format(scriptClient.execute(new FileReader(fileHandle)))); + console.println(formatter.format(scriptClient.execute(new FileReader(fileHandle)))); } catch (FileNotFoundException e) { System.err.println("file not found: " + file); } @@ -30,37 +32,23 @@ public class Main { } String expr = cmdParser.getExpression(); if (expr != null && expr.length() > 0) { - System.out.println(formatter.format(scriptClient.execute(expr))); + console.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); - if (command == null) { - command = ""; - } + String command = console.readInput(); while (!("bye".equals(command.trim()) || "exit".equals(command.trim()) || "quit".equals(command.trim()))) { try { - console.printf("%s\n", formatter.format(scriptClient.execute(command))); + console.println(formatter.format(scriptClient.execute(command))); } catch (Exception e) { - console.printf("ERR: %s\n", e.getLocalizedMessage()); - } - command = console.readLine("%s@hsadmin>", runAs); - if (command == null) { - command = ""; - } - while (command.trim().endsWith("\\")) { - command = command.substring(0, command.length() - 1) + - "\n" + console.readLine(">"); + console.println("ERR: " + e.getLocalizedMessage() + "\n"); } + command = console.readInput(); } } - } catch (JSCliException e) { + } catch (Exception e) { System.err.println(e.getMessage()); System.exit(-1); } } - + } diff --git a/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java b/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java index 762773b..adfc9ad 100644 --- a/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java +++ b/hsarjcli/src/de/hsadmin/jscli/ScriptClient.java @@ -1,7 +1,9 @@ package de.hsadmin.jscli; import java.io.Reader; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; @@ -9,10 +11,12 @@ import javax.script.ScriptException; public class ScriptClient { - private ScriptEngine engine; + final private ScriptEngine engine; + final private Set completionStrings; - public ScriptClient(String user, String runAs) throws JSCliException { - CASTicket grantingTicket = new CASTicket(user, runAs); + public ScriptClient(ConsoleWrapper console, String user, String runAs) throws JSCliException { + completionStrings = new HashSet(); + CASTicket grantingTicket = new CASTicket(console, user, runAs); RpcClient rpcClient = new RpcClient(grantingTicket); ScriptEngineManager engineManager = new ScriptEngineManager(); engine = engineManager.getEngineByName("js"); @@ -54,6 +58,8 @@ public class ScriptClient { if ("delete".equals(function)) { function = "remove"; } + completionStrings.add(module); + completionStrings.add(module + "." + function); try { engine.eval("if (typeof " + module + " === 'undefined') " + "{ var " + module + " = { }; };\n" + @@ -73,6 +79,17 @@ public class ScriptClient { } } } + console.codeCompletion(getCodeCompletionStrings()); + } + + public String[] getCodeCompletionStrings() { + String[] codeCompletionStrings = new String[completionStrings.size()]; + int idx = 0; + for (String s : completionStrings) { + codeCompletionStrings[idx] = s; + idx++; + } + return codeCompletionStrings; } public Object execute(String snippet) throws JSCliException {