hsarjcli/src/de/hsadmin/cli/Scripting.java | ●●●●● patch | view | raw | blame | history | |
hsarjcli/src/de/hsadmin/jscli/CASTicket.java | ●●●●● patch | view | raw | blame | history | |
hsarjcli/src/de/hsadmin/jscli/Main.java | ●●●●● patch | view | raw | blame | history | |
hsarjcli/src/de/hsadmin/jscli/RpcClient.java | ●●●●● patch | view | raw | blame | history | |
hsarjcli/src/de/hsadmin/jscli/ScriptClient.java | ●●●●● patch | view | raw | blame | history |
hsarjcli/src/de/hsadmin/cli/Scripting.java
@@ -10,9 +10,13 @@ ScriptEngineManager engineManager = new ScriptEngineManager(); ScriptEngine engine = engineManager.getEngineByName("js"); try { engine.eval("var user = { };"); engine.eval("if (typeof user === 'undefined') { user = { }; };"); engine.eval("user['name'] = 'Klaus-Dieter';"); engine.eval("print(user.name);"); engine.eval("if (typeof user === 'undefined') { user = { }; };"); engine.eval("user['age'] = 44;"); engine.eval("print(user.name + '\\n');"); engine.eval("print(user.age + '\\n');"); engine.eval("print(user + '\\n');"); } catch (ScriptException e) { System.err.println(e.getMessage()); } hsarjcli/src/de/hsadmin/jscli/CASTicket.java
@@ -20,8 +20,10 @@ private String loginURL; private String backendURL; private String grantingTicket; private String runAs; public CASTicket(String user) throws JSCliException { public CASTicket(String user, String runAs) throws JSCliException { this.runAs = runAs; loginURL = Config.getInstance().getProperty("loginURL", LOGIN_URL); backendURL = Config.getInstance().getProperty("backendURL", BACKEND_URL); grantingTicket = getGrantingTicket(user); @@ -37,6 +39,10 @@ } } public String getRunAs() { return runAs; } private String getGrantingTicket(String user) throws JSCliException { grantingTicket = null; char[] password = null; hsarjcli/src/de/hsadmin/jscli/Main.java
@@ -1,6 +1,5 @@ package de.hsadmin.jscli; import java.util.List; public class Main { @@ -8,13 +7,12 @@ try { CommandlineParser cmdParser = new CommandlineParser(args); String user = cmdParser.getUser(); CASTicket tgt = new CASTicket(user); System.out.println(tgt); RpcClient client = new RpcClient(tgt); List<String> methods = client.listMethods(); for (String m : methods) { System.out.println(m); } String runAs = cmdParser.getRunAs(); CASTicket tgt = new CASTicket(user, runAs); RpcClient rpcClient = new RpcClient(tgt); ScriptClient scriptClient = new ScriptClient(tgt, rpcClient); Object o = scriptClient.execute(cmdParser.getExpression()); System.out.println(o); } catch (JSCliException e) { System.err.println(e.getMessage()); System.exit(-1); hsarjcli/src/de/hsadmin/jscli/RpcClient.java
@@ -31,20 +31,20 @@ public List<String> listMethods() throws JSCliException { List<String> methodList = new ArrayList<String>(); List<Object> execute = execute(); List<Object> execute = execute("system.listMethods"); for (Object obj : execute) { methodList.add(obj.toString()); } return methodList; } private List<Object> execute() throws JSCliException { return execute(new ArrayList<Object>()); private List<Object> execute(String method) throws JSCliException { return execute(method, new ArrayList<Object>()); } private List<Object> execute(List<?> params) throws JSCliException { public List<Object> execute(String method, List<?> params) throws JSCliException { try { Object execute = client.execute("system.listMethods", params); Object execute = client.execute(method, params); ArrayList<Object> list = new ArrayList<Object>(); if (execute instanceof Object[]) { Object[] resArray = (Object[]) execute; hsarjcli/src/de/hsadmin/jscli/ScriptClient.java
New file @@ -0,0 +1,68 @@ package de.hsadmin.jscli; import java.util.List; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ScriptClient { private ScriptEngine engine; public ScriptClient(CASTicket grantingTicket, RpcClient rpcClient) throws JSCliException { ScriptEngineManager engineManager = new ScriptEngineManager(); engine = engineManager.getEngineByName("js"); try { engine.put("casgrantingticket", grantingTicket); engine.put("xmlrpcclient", rpcClient); engine.eval("importClass(java.util.ArrayList);"); engine.eval("importClass(java.util.HashMap);"); engine.eval("function hsaParseParamObject(o) { " + "var hsh = new HashMap(); " + "for (var key in o) { " + " var val = o[key]; " + " if (typeof val === 'object') { val = hsaParseParamObject(val); }; " + " hsh.put(key, val); " + "}; " + "return hsh; " + "};"); } catch (ScriptException e) { throw new JSCliException(e); } List<String> methods = rpcClient.listMethods(); for (String method : methods) { String[] parts = method.split("\\."); if (parts.length == 2) { String module = parts[0]; String function = parts[1]; try { engine.eval("if (typeof " + module + " === 'undefined') " + "{ var " + module + " = { }; };\n" + module + "['" + function + "'] = function(json) { " + "var mod = '" + module + "'; " + "var fct = '" + function + "'; " + "var params = new ArrayList(); " + "params.add(casgrantingticket.getRunAs()); " + "params.add(casgrantingticket.getTicket()); " + "if (typeof json === 'undefined') { json = { where:{}, set:{} } };" + "if (fct == 'update' || fct == 'add') { params.add(hsaParseParamObject(json['set'])); }; " + "if (fct == 'update' || fct == 'delete' || fct == 'search') { params.add(hsaParseParamObject(json['where'])); }; " + "return xmlrpcclient.execute(mod + '.' + fct, params); " + "};"); } catch (ScriptException e) { e.printStackTrace(); } } } } public Object execute(String snippet) throws JSCliException { try { return engine.eval(snippet); } catch (ScriptException e) { throw new JSCliException(e); } } }