/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package spimedb.util.js; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import spimedb.SpimeDB; import javax.script.ScriptEngine; import javax.script.ScriptException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * Provides a javascript context with a DB reference for querying, populating, and/or transforming it * Should be considered admin-level */ public class SpimeJS extends JSScript { public final static Logger logger = LoggerFactory.getLogger(SpimeJS.class); private final SpimeDB db; public SpimeJS(SpimeDB db) { super(db.js); this.db = db; } @Override public void run(String jsCode) { db.runLater(1f, ()->{ try { super.run(jsCode); } catch (ScriptException e) { logger.error("{}: {}", jsCode, e); } }); } public static void setImports(ScriptEngine js) throws Exception { js.eval("load('nashorn:mozilla_compat.js')"); js.eval("importPackage('java.lang')"); js.eval("importPackage('java.util')"); js.eval("importPackage('java.io')"); // js.eval("importPackage('nars.core')"); // js.eval("importPackage('nars.core.build')"); // js.eval("importPackage('nars.io')"); // js.eval("importPackage('nars.gui')"); } public Object eval(String s) throws ScriptException { return engine.eval(s); } public static void printHelp() { System.out.println("Help coming soon."); } public static void repl(ScriptEngine js) { System.out.println(SpimeDB.VERSION + " javascript console - :h for help, :q to exit"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("> "); String s; try { while ((s = br.readLine())!=null) { try { if (s.equals(":q")) break; else if (s.startsWith(":h")) { printHelp(); continue; } Object ret = js.eval(s); if (ret != null) { System.out.println(ret); } } catch (Exception e) { System.out.println(e.getClass().getName() + " in parsing: " + e.getMessage()); } finally { System.out.print("> "); } } } catch (IOException e) { e.printStackTrace(); } try { br.close(); } catch (IOException ex) { } System.exit(0); } public static void main(String[] args) throws Exception { repl(new SpimeJS(new SpimeDB()).engine); } }