Added variable 'triggeringChannel' to DSL rules (#2567)

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
Christoph Weitkamp
2021-12-02 22:08:17 +01:00
committed by GitHub
parent e0544e2cba
commit 674db6c744
3 changed files with 9 additions and 0 deletions
@@ -147,6 +147,8 @@ class RulesJvmModelInferrer extends ScriptJvmModelInferrer {
if (containsEventTrigger(rule)) {
val eventTypeRef = ruleModel.newTypeRef(String)
parameters += rule.toParameter(VAR_RECEIVED_EVENT, eventTypeRef)
val channelRef = ruleModel.newTypeRef(String)
parameters += rule.toParameter(VAR_TRIGGERING_CHANNEL, channelRef)
}
if (containsThingStateChangedEventTrigger(rule) && !containsParam(parameters, VAR_PREVIOUS_STATE)) {
val stateTypeRef = ruleModel.newTypeRef(State)
@@ -165,6 +165,8 @@ public class DSLScriptEngine implements javax.script.ScriptEngine {
if (value instanceof ChannelTriggeredEvent) {
ChannelTriggeredEvent event = (ChannelTriggeredEvent) value;
evalContext.newValue(QualifiedName.create(ScriptJvmModelInferrer.VAR_RECEIVED_EVENT), event.getEvent());
evalContext.newValue(QualifiedName.create(ScriptJvmModelInferrer.VAR_TRIGGERING_CHANNEL),
event.getChannel().getAsString());
}
if (value instanceof ItemEvent) {
ItemEvent event = (ItemEvent) value;
@@ -58,6 +58,9 @@ class ScriptJvmModelInferrer extends AbstractModelInferrer {
/** Variable name for the received event in a "trigger event" rule */
public static final String VAR_RECEIVED_EVENT = "receivedEvent";
/** Variable name for the triggering channel in a "trigger event" rule */
public static final String VAR_TRIGGERING_CHANNEL = "triggeringChannel";
/**
* conveninence API to build and initialize JvmTypes and their members.
*/
@@ -119,6 +122,8 @@ class ScriptJvmModelInferrer extends AbstractModelInferrer {
parameters += script.toParameter(VAR_PREVIOUS_STATE, stateTypeRef)
val eventTypeRef = script.newTypeRef(String)
parameters += script.toParameter(VAR_RECEIVED_EVENT, eventTypeRef)
val channelRef = script.newTypeRef(String)
parameters += script.toParameter(VAR_TRIGGERING_CHANNEL, channelRef)
val stateTypeRef2 = script.newTypeRef(State)
parameters += script.toParameter(VAR_NEW_STATE, stateTypeRef2)
body = script