From 19d2cf57c407e6ad97383ae57e632672dd91294c Mon Sep 17 00:00:00 2001 From: jpg0 Date: Sat, 9 Nov 2019 10:04:45 +1100 Subject: [PATCH 1/5] Add script filename to engine, if engineIdentifier is a file Signed-off-by: Jonathan Gilbert --- .../script/internal/ScriptEngineManagerImpl.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java index 629d69a60e4..fff77af0c0a 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java @@ -12,12 +12,14 @@ */ package org.openhab.core.automation.module.script.internal; +import java.io.File; import java.io.InputStreamReader; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.script.Invocable; +import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptException; @@ -145,6 +147,7 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { } else { ScriptEngine engine = container.getScriptEngine(); try { + tryExtractAndInjectFilename(engineIdentifier, engine); engine.eval(scriptData); if (engine instanceof Invocable) { @@ -163,6 +166,17 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { } } + private void tryExtractAndInjectFilename(String engineIdentifier, ScriptEngine engine) { + try { + File maybeScriptFile = new File(engineIdentifier); + if(maybeScriptFile.isFile()) { + engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); + } + } catch (Exception e) { + logger.warn("Failure whilst inserting script filename: {}" + e.getMessage()); + } + } + @Override public void removeEngine(String engineIdentifier) { ScriptEngineContainer container = loadedScriptEngineInstances.get(engineIdentifier); From 6b7c272f7f2c813dd8eb42052532ec4ad865fd0b Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sat, 9 Nov 2019 11:54:20 +1100 Subject: [PATCH 2/5] Incorporated PR feedback Signed-off-by: Jonathan Gilbert --- .../module/script/internal/ScriptEngineManagerImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java index fff77af0c0a..f97fc27bf42 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java @@ -169,11 +169,11 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { private void tryExtractAndInjectFilename(String engineIdentifier, ScriptEngine engine) { try { File maybeScriptFile = new File(engineIdentifier); - if(maybeScriptFile.isFile()) { + if (maybeScriptFile.isFile()) { engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); } } catch (Exception e) { - logger.warn("Failure whilst inserting script filename: {}" + e.getMessage()); + logger.warn("Failure while adding file name for script '{}' to the ScriptEngine: {}", engineIdentifier, e.getMessage()); } } From 240910afd3b31e21b857135348ee714c9a4ba41c Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sun, 10 Nov 2019 07:59:56 +1100 Subject: [PATCH 3/5] Fixed engineIdentifier parsing & added check to ensure not already set Signed-off-by: Jonathan Gilbert --- .../script/internal/ScriptEngineManagerImpl.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java index f97fc27bf42..b7c0b22f2be 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java @@ -14,6 +14,9 @@ import java.io.File; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URL; +import java.nio.file.Paths; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -168,9 +171,14 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { private void tryExtractAndInjectFilename(String engineIdentifier, ScriptEngine engine) { try { - File maybeScriptFile = new File(engineIdentifier); - if (maybeScriptFile.isFile()) { - engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); + if(engine.getContext().getAttribute(ScriptEngine.FILENAME) == null) { + URI fileURI = new URL(engineIdentifier).toURI(); + if ("file".equals(fileURI.getScheme())) { + File maybeScriptFile = Paths.get(fileURI).toFile(); + if (maybeScriptFile.isFile()) { + engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); + } + } } } catch (Exception e) { logger.warn("Failure while adding file name for script '{}' to the ScriptEngine: {}", engineIdentifier, e.getMessage()); From a54fd754eaa21161d4e54703f8d562baf7493e6a Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sat, 7 Dec 2019 19:23:58 +1000 Subject: [PATCH 4/5] Added debug logging when engineIdentifier is not a filename Signed-off-by: Jonathan Gilbert Co-Authored-By: Scott Rushworth --- .../module/script/internal/ScriptEngineManagerImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java index b7c0b22f2be..f7fa88880e1 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java @@ -177,6 +177,8 @@ private void tryExtractAndInjectFilename(String engineIdentifier, ScriptEngine e File maybeScriptFile = Paths.get(fileURI).toFile(); if (maybeScriptFile.isFile()) { engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); + } else { + logger.debug("engineIdentifier '{}' is not a file", engineIdentifier); } } } From f2c93364f6983b613efd833167030777a3353f5c Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sat, 7 Dec 2019 20:27:02 +1100 Subject: [PATCH 5/5] Updated method & variable name Signed-off-by: Jonathan Gilbert --- .../script/internal/ScriptEngineManagerImpl.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java index f7fa88880e1..21d15d9a3e8 100644 --- a/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java +++ b/bundles/org.openhab.core.automation.module.script/src/main/java/org/openhab/core/automation/module/script/internal/ScriptEngineManagerImpl.java @@ -150,7 +150,7 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { } else { ScriptEngine engine = container.getScriptEngine(); try { - tryExtractAndInjectFilename(engineIdentifier, engine); + injectFilename(engineIdentifier, engine); engine.eval(scriptData); if (engine instanceof Invocable) { @@ -169,14 +169,14 @@ public void loadScript(String engineIdentifier, InputStreamReader scriptData) { } } - private void tryExtractAndInjectFilename(String engineIdentifier, ScriptEngine engine) { + private void injectFilename(String engineIdentifier, ScriptEngine engine) { try { if(engine.getContext().getAttribute(ScriptEngine.FILENAME) == null) { URI fileURI = new URL(engineIdentifier).toURI(); if ("file".equals(fileURI.getScheme())) { - File maybeScriptFile = Paths.get(fileURI).toFile(); - if (maybeScriptFile.isFile()) { - engine.getContext().setAttribute(ScriptEngine.FILENAME, maybeScriptFile.getName(), ScriptContext.ENGINE_SCOPE); + File scriptFile = Paths.get(fileURI).toFile(); + if (scriptFile.isFile()) { + engine.getContext().setAttribute(ScriptEngine.FILENAME, scriptFile.getName(), ScriptContext.ENGINE_SCOPE); } else { logger.debug("engineIdentifier '{}' is not a file", engineIdentifier); }