📄 script.java
字号:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package org.openacs.js;import java.lang.reflect.Method;import java.util.logging.Level;import java.util.logging.Logger;import javax.ejb.FinderException;import org.mozilla.javascript.Context;import org.mozilla.javascript.Function;import org.mozilla.javascript.FunctionObject;import org.mozilla.javascript.Scriptable;import org.mozilla.javascript.ScriptableObject;import org.openacs.HostsLocal;import org.openacs.ScriptLocal;import org.openacs.message.Inform;import org.openacs.message.TransferComplete;import org.openacs.utils.Ejb;/** * * @author Administrator */public class Script extends Thread { private Inform lastInform; private String script; private HostsLocal host; private TransferComplete transferComplete; public Script (Inform lastInform, String script, HostsLocal host, TransferComplete transferComplete) { this.lastInform = lastInform; this.script = script; this.host = host; this.transferComplete = transferComplete; } private static Level getLevel (String l) { if (l.compareToIgnoreCase("severe")==0) return Level.SEVERE; if (l.compareToIgnoreCase("warning")==0) return Level.WARNING; //if (l.compareToIgnoreCase("info")==0) return Level.INFO; return Level.INFO; } public static Object logger (Context cx, Scriptable thisObj, Object[] args, Function funObj) { //System.out.println("logger with "+args.length+" parameters"); String msg = ""; Level level; switch (args.length) { case 0: level = Level.WARNING; msg = "logger called with no severity and message"; break; case 1: level = Level.INFO; msg = args[0].toString(); break; case 2: level = getLevel((String)args[0]); msg = args[1].toString(); break; default: level = getLevel((String)args[0]); for (Object m : args) { msg += m.toString(); } msg = args[0].toString(); break; } Logger.getLogger(Script.class.getName()).log (level, msg); return null; } public static Object call (Context cx, Scriptable thisObj, Object[] args, Function funObj) { if (args.length < 1) { Logger.getLogger(Script.class.getName()).log (Level.WARNING, "call function with zero args"); return null; } ScriptLocal script; try { script = Ejb.lookupScriptBean((String) args[0]); /* Object [] newargs = null; if (args.length > 1) { newargs = new Object[args.length - 1]; System.arraycopy(args, 1, newargs, 0, args.length - 1); Scriptable a = cx.newArray(thisObj, newargs); thisObj.put("arguments", thisObj, newargs); } */ return cx.evaluateString(thisObj, new String (script.getScript()), (String)args[0], 1, null); } catch (FinderException ex) { Logger.getLogger(Script.class.getName()).log(Level.SEVERE, "CALL: function "+args[0]+" not found."); } return null; } private void exportFunction (Scriptable scope, String name) { try { Method m = Script.class.getMethod(name , Context.class, Scriptable.class, Object[].class, Function.class); scope.put(name, scope, new FunctionObject(name , m, scope)); } catch (NoSuchMethodException ex) { Logger.getLogger(Script.class.getName()).log(Level.SEVERE, null, ex); } catch (SecurityException ex) { Logger.getLogger(Script.class.getName()).log(Level.SEVERE, null, ex); } } @Override public void run () {// System.out.println ("Script::Run"); Context cx = Context.enter(); try { Scriptable scope = cx.initStandardObjects(); ScriptableObject.defineClass(scope, Cpe.class); ScriptableObject.defineClass(scope, CpeDb.class); Object[] arg = {lastInform, host, transferComplete}; Cpe cpe = (Cpe)cx.newObject(scope, "Cpe", arg); scope.put("cpe", scope, cpe); arg = new Object [1]; arg [0] = host; CpeDb cpedb = (CpeDb)cx.newObject(scope, "CpeDb", arg); scope.put("cpedb", scope, cpedb); exportFunction(scope, "call"); exportFunction(scope, "logger"); org.mozilla.javascript.Script scr = cx.compileString(script, "skriptas", 0, null); Object result = scr.exec(cx, scope); //Object result = cx.evaluateString(scope, script, "<cmd>", 1, null); String resultString = Context.toString(result); if (resultString != null) { // cpedb.setScriptResult (resultString); }// System.err.println("Returned: " + Context.toString(result)); } catch (Exception e) { System.out.println ("Run exception: "+e.getMessage()); } finally { Context.exit(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -