From 6ef5fa929ebd112d85168476cdd11a598b442adc Mon Sep 17 00:00:00 2001 From: argius Date: Fri, 13 Dec 2013 22:01:40 +0900 Subject: [PATCH] [#31450] add ScriptContext field into Environment for scripting --- src/net/argius/stew/CommandProcessor.java | 12 +++++++++++- src/net/argius/stew/Environment.java | 14 +++++++++++++- src/net/argius/stew/messages.u8p | 1 + src/net/argius/stew/messages_ja.u8p | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/net/argius/stew/CommandProcessor.java b/src/net/argius/stew/CommandProcessor.java index 9547df1..410b4c2 100644 --- a/src/net/argius/stew/CommandProcessor.java +++ b/src/net/argius/stew/CommandProcessor.java @@ -127,13 +127,23 @@ final class CommandProcessor { } // script if (commandName.equals("-s")) { - final File file = Path.resolve(env.getCurrentDirectory(), p.at(1)); + if (!p.has(1)) { + throw new UsageException(res.get("usage.-s")); + } + final String p1 = p.at(1); + if (p1.equals(".")) { + env.initializeScriptContext(); + outputMessage("i.script-context-initialized"); + return true; + } + final File file = Path.resolve(env.getCurrentDirectory(), p1); if (!file.isFile()) { throw new UsageException(res.get("usage.-s")); } log.debug("-s %s", file.getAbsolutePath()); ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); + engine.setContext(env.getScriptContext()); engine.put("connection", env.getCurrentConnection()); engine.put("conn", env.getCurrentConnection()); engine.put("patameter", p); diff --git a/src/net/argius/stew/Environment.java b/src/net/argius/stew/Environment.java index 9eb24f5..f06fbe2 100644 --- a/src/net/argius/stew/Environment.java +++ b/src/net/argius/stew/Environment.java @@ -5,6 +5,8 @@ import static net.argius.stew.Bootstrap.getSystemFile; import java.io.*; import java.sql.*; +import javax.script.*; + import net.argius.stew.ui.*; /** @@ -26,6 +28,7 @@ public final class Environment { private File currentDirectory; private long connectorTimestamp; private AliasMap aliasMap; + private ScriptContext scriptContext; private Environment(ConnectorMap connectorMap, File currentDirectory) { this.connectorMap = connectorMap; @@ -49,6 +52,7 @@ public final class Environment { this(new ConnectorMap(), getInitialCurrentDirectory()); // init directories initializeQueryTimeout(); loadConnectorMap(); + initializeScriptContext(); } /** @@ -56,7 +60,7 @@ public final class Environment { * @param src */ public Environment(Environment src) { - // never copy coconnector,conn,op,aliasMap into this + // never copy coconnector,conn,op,aliasMap,scriptContext into this this(new ConnectorMap(src.connectorMap), src.currentDirectory); this.timeoutSeconds = src.timeoutSeconds; } @@ -181,6 +185,10 @@ public final class Environment { } } + void initializeScriptContext() { + this.scriptContext = new SimpleScriptContext(); + } + /** * Loads and refreshes connector map. */ @@ -266,4 +274,8 @@ public final class Environment { return aliasMap; } + public ScriptContext getScriptContext() { + return scriptContext; + } + } diff --git a/src/net/argius/stew/messages.u8p b/src/net/argius/stew/messages.u8p index 504ab69..6b476ce 100644 --- a/src/net/argius/stew/messages.u8p +++ b/src/net/argius/stew/messages.u8p @@ -14,6 +14,7 @@ i.now=({0,date,yyyy-MM-dd}T{0,time,HH:mm:ss}{0,time,ZZZZ}) i.proceeded=Proceeded {0} records. i.response-time=[ response time: {0,number,#.###} seconds ] i.rollbacked=Rollbacked. +i.script-context-initialized=Script Context was initialized. i.selected=Selected {0} records. i.updated=Updated {0} records. w.auto-commit-not-available=Warning: Auto-commit mode is not available. diff --git a/src/net/argius/stew/messages_ja.u8p b/src/net/argius/stew/messages_ja.u8p index cb4d180..8dd5d50 100644 --- a/src/net/argius/stew/messages_ja.u8p +++ b/src/net/argius/stew/messages_ja.u8p @@ -13,6 +13,7 @@ i.noalias=エイリアスは未定義です。 i.proceeded={0} 件 処理されました。 i.response-time=[ 応答時間: {0,number,#.###} 秒 ] i.rollbacked=ロールバックされました。 +i.script-context-initialized=Script Context は初期化されました。 i.selected={0} 件 ヒットしました。 i.updated={0} 件 更新されました。 w.auto-commit-not-available=警告: 自動コミットモードが無効です。 -- 2.11.0