mirror of
https://github.com/danieldemus/openhab-core.git
synced 2026-07-29 12:34:22 +02:00
Fixed missing item resolution of DSL scripts created through the UI (#1720)
Signed-off-by: Kai Kreuzer <kai@openhab.org>
This commit is contained in:
+19
-3
@@ -23,11 +23,15 @@ import javax.script.ScriptEngineFactory;
|
||||
import javax.script.ScriptException;
|
||||
import javax.script.SimpleScriptContext;
|
||||
|
||||
import org.eclipse.emf.ecore.resource.Resource;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import org.eclipse.xtext.naming.QualifiedName;
|
||||
import org.eclipse.xtext.resource.IResourceServiceProvider;
|
||||
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.model.script.engine.Script;
|
||||
import org.openhab.core.model.script.engine.ScriptExecutionException;
|
||||
import org.openhab.core.model.script.engine.ScriptParsingException;
|
||||
import org.openhab.core.model.script.runtime.DSLScriptContextProvider;
|
||||
@@ -110,7 +114,7 @@ public class DSLScriptEngine implements javax.script.ScriptEngine {
|
||||
} else {
|
||||
s = scriptEngine.newScriptFromString(script);
|
||||
}
|
||||
IEvaluationContext evalContext = createEvaluationContext(specificContext);
|
||||
IEvaluationContext evalContext = createEvaluationContext(s, specificContext);
|
||||
s.execute(evalContext);
|
||||
} catch (ScriptExecutionException | ScriptParsingException e) {
|
||||
throw new ScriptException(e.getMessage(), modelName, -1);
|
||||
@@ -118,8 +122,20 @@ public class DSLScriptEngine implements javax.script.ScriptEngine {
|
||||
return null;
|
||||
}
|
||||
|
||||
private DefaultEvaluationContext createEvaluationContext(IEvaluationContext specificContext) {
|
||||
DefaultEvaluationContext evalContext = new DefaultEvaluationContext(specificContext);
|
||||
private DefaultEvaluationContext createEvaluationContext(Script script, IEvaluationContext specificContext) {
|
||||
IEvaluationContext parentContext = specificContext;
|
||||
if (specificContext == null && script instanceof ScriptImpl) {
|
||||
XExpression xExpression = ((ScriptImpl) script).getXExpression();
|
||||
if (xExpression != null) {
|
||||
Resource resource = xExpression.eResource();
|
||||
IEvaluationContext evaluationContext = null;
|
||||
if (resource instanceof XtextResource) {
|
||||
IResourceServiceProvider provider = ((XtextResource) resource).getResourceServiceProvider();
|
||||
parentContext = provider.get(IEvaluationContext.class);
|
||||
}
|
||||
}
|
||||
}
|
||||
DefaultEvaluationContext evalContext = new DefaultEvaluationContext(parentContext);
|
||||
for (Map.Entry<String, String> entry : implicitVars.entrySet()) {
|
||||
Object value = context.getAttribute(entry.getKey());
|
||||
if (value != null) {
|
||||
|
||||
Reference in New Issue
Block a user