OSDN Git Service

[#31450] add ScriptContext field into Environment for scripting t31450
authorargius <argius.net@gmail.com>
Fri, 13 Dec 2013 13:01:40 +0000 (22:01 +0900)
committerargius <argius.net@gmail.com>
Fri, 13 Dec 2013 13:01:40 +0000 (22:01 +0900)
src/net/argius/stew/CommandProcessor.java
src/net/argius/stew/Environment.java
src/net/argius/stew/messages.u8p
src/net/argius/stew/messages_ja.u8p

index 9547df1..410b4c2 100644 (file)
@@ -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);
index 9eb24f5..f06fbe2 100644 (file)
@@ -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;
+    }
+
 }
index 504ab69..6b476ce 100644 (file)
@@ -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.
index cb4d180..8dd5d50 100644 (file)
@@ -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=警告: 自動コミットモードが無効です。