DSL support for sharedCache/privateCache (#3187)

Signed-off-by: Jan N. Klug <github@klug.nrw>
This commit is contained in:
J-N-K
2022-12-05 22:08:42 +01:00
committed by GitHub
parent 2cb8f148ef
commit e90811cfd7
18 changed files with 58 additions and 21 deletions
@@ -31,6 +31,7 @@ import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.interpreter.IEvaluationContext;
import org.eclipse.xtext.xbase.interpreter.impl.DefaultEvaluationContext;
import org.openhab.core.automation.module.script.ScriptExtensionAccessor;
import org.openhab.core.items.events.ItemEvent;
import org.openhab.core.model.script.engine.Script;
import org.openhab.core.model.script.engine.ScriptExecutionException;
@@ -69,13 +70,15 @@ public class DSLScriptEngine implements javax.script.ScriptEngine {
private final org.openhab.core.model.script.engine.ScriptEngine scriptEngine;
private final @Nullable DSLScriptContextProvider contextProvider;
private final ScriptContext context = new SimpleScriptContext();
private final ScriptExtensionAccessor scriptExtensionAccessor;
private @Nullable Script parsedScript;
public DSLScriptEngine(org.openhab.core.model.script.engine.ScriptEngine scriptEngine,
@Nullable DSLScriptContextProvider contextProvider) {
@Nullable DSLScriptContextProvider contextProvider, ScriptExtensionAccessor scriptExtensionAccessor) {
this.scriptEngine = scriptEngine;
this.contextProvider = contextProvider;
this.scriptExtensionAccessor = scriptExtensionAccessor;
}
@Override
@@ -161,6 +164,10 @@ public class DSLScriptEngine implements javax.script.ScriptEngine {
}
}
}
Map<String, Object> cachePreset = scriptExtensionAccessor.findPreset("cache", (String) context.getAttribute("oh.engine-identifier", ScriptContext.ENGINE_SCOPE));
evalContext.newValue(QualifiedName.create("sharedCache"), cachePreset.get("sharedCache"));
evalContext.newValue(QualifiedName.create("privateCache"), cachePreset.get("privateCache"));
// now add specific implicit vars, where we have to map the right content
Object value = context.getAttribute(OUTPUT_EVENT);
if (value instanceof ChannelTriggeredEvent) {
@@ -18,6 +18,7 @@ import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.core.automation.module.script.ScriptEngineFactory;
import org.openhab.core.automation.module.script.ScriptExtensionAccessor;
import org.openhab.core.model.script.engine.ScriptEngine;
import org.openhab.core.model.script.runtime.DSLScriptContextProvider;
import org.osgi.service.component.annotations.Activate;
@@ -38,13 +39,15 @@ public class DSLScriptEngineFactory implements ScriptEngineFactory {
private static final String SCRIPT_TYPE = "dsl";
private final ScriptEngine scriptEngine;
private final ScriptExtensionAccessor scriptExtensionAccessor;
@Reference(cardinality = ReferenceCardinality.OPTIONAL, policyOption = ReferencePolicyOption.GREEDY)
protected @Nullable DSLScriptContextProvider contextProvider;
@Activate
public DSLScriptEngineFactory(@Reference ScriptEngine scriptEngine) {
public DSLScriptEngineFactory(@Reference ScriptEngine scriptEngine, @Reference ScriptExtensionAccessor scriptExtensionAccessor) {
this.scriptEngine = scriptEngine;
this.scriptExtensionAccessor = scriptExtensionAccessor;
}
@Override
@@ -58,7 +61,7 @@ public class DSLScriptEngineFactory implements ScriptEngineFactory {
@Override
public javax.script.@Nullable ScriptEngine createScriptEngine(String scriptType) {
return new DSLScriptEngine(scriptEngine, contextProvider);
return new DSLScriptEngine(scriptEngine, contextProvider, scriptExtensionAccessor);
}
}