diff --git a/README.md b/README.md
index d68151a5..605488b2 100644
--- a/README.md
+++ b/README.md
@@ -221,7 +221,9 @@ To add an OR statement we simply add multiple @JRuleWhen statements
@JRuleWhenItemChange(item = MyTestNumber, from = "14", to = "10")
@JRuleWhenItemChange(item = MyTestNumber, from = "10", to = "12")
public void myOrRuleNumber(JRuleEvent event) {
- logInfo("Got change number: {}", event.getState().getValue());
+ logInfo("Got change number: {}", event.getState().asStringValue());
+ // or
+ logInfo("Got change number: {}", event.getItem().getState().asStringValue());
}
```
@@ -631,7 +633,7 @@ triggered the rule.
@JRuleWhenItemChange(item = MyTestSwitch1, to = ON)
@JRuleWhenItemChange(item = MyTestSwitch2, to = ON)
public void triggerNameExample(JRuleEvent event) {
- logInfo("The rule was triggered by the following item: {}", event.getItemName());
+ logInfo("The rule was triggered by the following item: {}", event.getItem().getName());
logInfo("The rule was Old Value was: {} and new value: {}", event.getOldState().getValue(), event.getState().getValue());
}
diff --git a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemChangeExecutionContext.java b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemChangeExecutionContext.java
index a75d1f2f..5dedbe83 100644
--- a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemChangeExecutionContext.java
+++ b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemChangeExecutionContext.java
@@ -19,14 +19,13 @@
import java.util.Optional;
import org.openhab.automation.jrule.internal.handler.JRuleEventHandler;
+import org.openhab.automation.jrule.items.JRuleItem;
import org.openhab.automation.jrule.rules.JRule;
import org.openhab.automation.jrule.rules.JRuleMemberOf;
import org.openhab.automation.jrule.rules.event.JRuleEvent;
import org.openhab.automation.jrule.rules.event.JRuleItemEvent;
import org.openhab.core.events.AbstractEvent;
-import org.openhab.core.items.events.GroupItemStateChangedEvent;
-import org.openhab.core.items.events.ItemEvent;
-import org.openhab.core.items.events.ItemStateChangedEvent;
+import org.openhab.core.items.events.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -89,19 +88,23 @@ && matchCondition(((ItemStateChangedEvent) event).getItemState().toString(),
@Override
public JRuleEvent createJRuleEvent(AbstractEvent event) {
- final String itemName;
- final String memberName;
+ final JRuleItem item;
+ final JRuleItem memberItem;
if (getMemberOf() != JRuleMemberOf.None) {
- itemName = this.getItemName();
- memberName = ((ItemEvent) event).getItemName();
+ item = JRuleItem.forName(this.getItemName());
+ memberItem = JRuleItem.forName(((ItemEvent) event).getItemName());
} else {
- itemName = this.getItemName();
- memberName = event instanceof GroupItemStateChangedEvent
- ? ((GroupItemStateChangedEvent) event).getMemberName()
+ item = JRuleItem.forName(this.getItemName());
+ memberItem = event instanceof GroupItemStateChangedEvent
+ ? JRuleItem.forName(((GroupItemStateChangedEvent) event).getMemberName())
: null;
}
- return new JRuleItemEvent(itemName, memberName,
+ // updating the item state to be sure that it's update when the JRule method is fired
+ JRuleEventHandler.get().setValue(((ItemStateChangedEvent) event).getItemName(),
+ ((ItemStateChangedEvent) event).getItemState());
+
+ return new JRuleItemEvent(item, memberItem,
JRuleEventHandler.get().toValue(((ItemStateChangedEvent) event).getItemState()),
JRuleEventHandler.get().toValue(((ItemStateChangedEvent) event).getOldItemState()));
}
diff --git a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedCommandExecutionContext.java b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedCommandExecutionContext.java
index 4151b435..548b2a1c 100644
--- a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedCommandExecutionContext.java
+++ b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedCommandExecutionContext.java
@@ -19,6 +19,7 @@
import java.util.Optional;
import org.openhab.automation.jrule.internal.handler.JRuleEventHandler;
+import org.openhab.automation.jrule.items.JRuleItem;
import org.openhab.automation.jrule.rules.JRule;
import org.openhab.automation.jrule.rules.JRuleMemberOf;
import org.openhab.automation.jrule.rules.event.JRuleEvent;
@@ -77,17 +78,17 @@ && matchCondition(((ItemCommandEvent) event).getItemCommand().toString(), null)
@Override
public JRuleEvent createJRuleEvent(AbstractEvent event) {
- final String itemName;
- final String memberName;
+ final JRuleItem item;
+ final JRuleItem memberItem;
if (getMemberOf() != JRuleMemberOf.None) {
- memberName = ((ItemEvent) event).getItemName();
- itemName = ((ItemEvent) event).getItemName();
+ memberItem = JRuleItem.forName(((ItemEvent) event).getItemName());
+ item = JRuleItem.forName(((ItemEvent) event).getItemName());
} else {
- memberName = null;
- itemName = this.getItemName();
+ memberItem = null;
+ item = JRuleItem.forName(this.getItemName());
}
- return new JRuleItemEvent(itemName, memberName,
+ return new JRuleItemEvent(item, memberItem,
JRuleEventHandler.get().toValue(((ItemCommandEvent) event).getItemCommand()), null);
}
diff --git a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedUpdateExecutionContext.java b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedUpdateExecutionContext.java
index e057f726..d69c9cf4 100644
--- a/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedUpdateExecutionContext.java
+++ b/src/main/java/org/openhab/automation/jrule/internal/engine/excutioncontext/JRuleItemReceivedUpdateExecutionContext.java
@@ -19,6 +19,7 @@
import java.util.Optional;
import org.openhab.automation.jrule.internal.handler.JRuleEventHandler;
+import org.openhab.automation.jrule.items.JRuleItem;
import org.openhab.automation.jrule.rules.JRule;
import org.openhab.automation.jrule.rules.JRuleMemberOf;
import org.openhab.automation.jrule.rules.event.JRuleEvent;
@@ -75,17 +76,21 @@ && matchCondition(((ItemStateEvent) event).getItemState().toString(), null)
@Override
public JRuleEvent createJRuleEvent(AbstractEvent event) {
- final String itemName;
- final String memberName;
+ final JRuleItem item;
+ final JRuleItem memberItem;
if (getMemberOf() != JRuleMemberOf.None) {
- memberName = ((ItemEvent) event).getItemName();
- itemName = ((ItemEvent) event).getItemName();
+ memberItem = JRuleItem.forName(((ItemEvent) event).getItemName());
+ item = JRuleItem.forName(((ItemEvent) event).getItemName());
} else {
- memberName = null;
- itemName = this.getItemName();
+ memberItem = null;
+ item = JRuleItem.forName(this.getItemName());
}
- return new JRuleItemEvent(itemName, memberName,
+ // updating the item state to be sure that it's update when the JRule method is fired
+ JRuleEventHandler.get().setValue(((ItemStateEvent) event).getItemName(),
+ ((ItemStateEvent) event).getItemState());
+
+ return new JRuleItemEvent(item, memberItem,
JRuleEventHandler.get().toValue(((ItemStateEvent) event).getItemState()), null);
}
diff --git a/src/main/java/org/openhab/automation/jrule/internal/handler/JRuleEventHandler.java b/src/main/java/org/openhab/automation/jrule/internal/handler/JRuleEventHandler.java
index 8367847a..97ab3651 100644
--- a/src/main/java/org/openhab/automation/jrule/internal/handler/JRuleEventHandler.java
+++ b/src/main/java/org/openhab/automation/jrule/internal/handler/JRuleEventHandler.java
@@ -25,10 +25,7 @@
import org.openhab.automation.jrule.rules.JRule;
import org.openhab.automation.jrule.rules.value.*;
import org.openhab.core.events.EventPublisher;
-import org.openhab.core.items.GroupItem;
-import org.openhab.core.items.Item;
-import org.openhab.core.items.ItemNotFoundException;
-import org.openhab.core.items.ItemRegistry;
+import org.openhab.core.items.*;
import org.openhab.core.items.events.ItemEvent;
import org.openhab.core.items.events.ItemEventFactory;
import org.openhab.core.library.types.*;
@@ -179,6 +176,21 @@ public State getStateFromItem(String itemName) {
}
}
+ public void setValue(String itemName, State itemState) {
+ if (itemRegistry == null) {
+ throw new JRuleRuntimeException("ItemRegistry must not be null");
+ }
+ try {
+ Item item = itemRegistry.getItem(itemName);
+ if (!(item instanceof GenericItem)) {
+ throw new JRuleRuntimeException("Given item must be of type GenericItem");
+ }
+ ((GenericItem) item).setState(itemState);
+ } catch (ItemNotFoundException e) {
+ throw new JRuleRuntimeException(String.format("Failed to find item: %s", itemName));
+ }
+ }
+
public void setItemRegistry(@NonNull ItemRegistry itemRegistry) {
this.itemRegistry = itemRegistry;
}
diff --git a/src/main/java/org/openhab/automation/jrule/rules/event/JRuleItemEvent.java b/src/main/java/org/openhab/automation/jrule/rules/event/JRuleItemEvent.java
index 2b5b3054..9f552324 100644
--- a/src/main/java/org/openhab/automation/jrule/rules/event/JRuleItemEvent.java
+++ b/src/main/java/org/openhab/automation/jrule/rules/event/JRuleItemEvent.java
@@ -12,44 +12,87 @@
*/
package org.openhab.automation.jrule.rules.event;
+import org.openhab.automation.jrule.exception.JRuleRuntimeException;
+import org.openhab.automation.jrule.items.JRuleItem;
import org.openhab.automation.jrule.rules.value.JRuleValue;
/**
* The {@link JRuleItemEvent}
+ *
+ * ATTENTION: For Command events the state isn't updated in the item yet, so use the state property.
*
* @author Robert Delbrück
*/
public class JRuleItemEvent extends JRuleEvent {
- private final String itemName;
- private final String memberName;
+ private final JRuleItem item;
+ private final JRuleItem memberItem;
private final JRuleValue state;
private final JRuleValue oldState;
- public JRuleItemEvent(String itemName, String memberName, JRuleValue state, JRuleValue oldState) {
- this.itemName = itemName;
- this.memberName = memberName;
+ public JRuleItemEvent(JRuleItem item, JRuleItem memberItem, JRuleValue state, JRuleValue oldState) {
+ this.item = item;
+ this.memberItem = memberItem;
this.state = state;
this.oldState = oldState;
}
- public JRuleValue getState() {
- return state;
+ public JRuleItem getItem() {
+ return item;
}
- public JRuleValue getOldState() {
- return oldState;
+ /**
+ * Casts the item to the given type.
+ *
+ * @param asType Cast to this type
+ * @return the casted item
+ * @param new item type
+ */
+ public I getItem(Class asType) {
+ if (!asType.isAssignableFrom(item.getClass())) {
+ throw new JRuleRuntimeException(String.format("'%s' cannot be cast to '%s'", item.getClass(), asType));
+ }
+ return (I) item;
+ }
+
+ public JRuleItem getMemberItem() {
+ return memberItem;
}
- public String getMemberName() {
- return memberName;
+ /**
+ * Casts the member-item to the given type.
+ *
+ * @param asType Cast to this type
+ * @return the casted member-item
+ * @param new item type
+ */
+ public I getMemberItem(Class asType) {
+ if (!asType.isAssignableFrom(memberItem.getClass())) {
+ throw new JRuleRuntimeException(
+ String.format("'%s' cannot be cast to '%s'", memberItem.getClass(), asType));
+ }
+ return (I) memberItem;
}
- public String getItemName() {
- return itemName;
+ /**
+ * Gets the new state of the item. Must be used while receiving commands.
+ *
+ * @return the new item state
+ */
+ public JRuleValue getState() {
+ return state;
+ }
+
+ /**
+ * Gets the old state of the item. Just for Item-Change-Events
+ *
+ * @return the old state of the item
+ */
+ public JRuleValue getOldState() {
+ return oldState;
}
@Override
public String toString() {
- return String.format("JRuleEvent [state=%s, oldState=%s, itemName=%s]", state, oldState, itemName);
+ return String.format("JRuleEvent [item=%s, memberItem=%s, oldState=%s]", item, memberItem, oldState);
}
}
diff --git a/src/test/java/org/openhab/automation/jrule/rules/user/TestReceiveCommands.java b/src/test/java/org/openhab/automation/jrule/rules/user/TestReceiveCommands.java
index bb1ef88d..1f1abdcd 100644
--- a/src/test/java/org/openhab/automation/jrule/rules/user/TestReceiveCommands.java
+++ b/src/test/java/org/openhab/automation/jrule/rules/user/TestReceiveCommands.java
@@ -12,6 +12,7 @@
*/
package org.openhab.automation.jrule.rules.user;
+import org.openhab.automation.jrule.items.*;
import org.openhab.automation.jrule.rules.JRule;
import org.openhab.automation.jrule.rules.JRuleName;
import org.openhab.automation.jrule.rules.JRuleWhenItemReceivedCommand;
@@ -137,72 +138,84 @@ public void receiveQuantityCommand(JRuleItemEvent event) {
@JRuleName(NAME_RECEIVE_SWITCH_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_SWITCH_EVENT)
public void receiveSwitchUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleSwitchItem.class).getStateAsOnOff());
}
@JRuleName(NAME_RECEIVE_NUMBER_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_NUMBER_EVENT)
public void receiveNumberUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleNumberItem.class).getStateAsDecimal().floatValue());
}
@JRuleName(NAME_RECEIVE_STRING_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_STRING_EVENT)
public void receiveStringUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleStringItem.class).getStateAsString());
}
@JRuleName(NAME_RECEIVE_DATETIME_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_DATETIME_EVENT)
public void receiveDatetimeUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleDateTimeItem.class).getStateAsDateTime().getValue());
}
@JRuleName(NAME_RECEIVE_PLAYER_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_PLAYER_EVENT)
public void receivePlayerUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRulePlayerItem.class).getStateAsPlayPause());
}
@JRuleName(NAME_RECEIVE_CONTACT_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_CONTACT_EVENT)
public void receiveContactUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleContactItem.class).getStateAsOpenClose());
}
@JRuleName(NAME_RECEIVE_IMAGE_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_IMAGE_EVENT)
public void receiveImageUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleImageItem.class).getStateAsRaw());
}
@JRuleName(NAME_RECEIVE_ROLLERSHUTTER_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_ROLLERSHUTTER_EVENT)
public void receiveRollershutterUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleRollershutterItem.class).getStateAsPercent().floatValue());
}
@JRuleName(NAME_RECEIVE_DIMMER_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_DIMMER_EVENT)
public void receiveDimmerUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleDimmerItem.class).getStateAsPercent().floatValue());
}
@JRuleName(NAME_RECEIVE_COLOR_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_COLOR_EVENT)
public void receiveColorUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleColorItem.class).getStateAsHsb());
}
@JRuleName(NAME_RECEIVE_LOCATION_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_LOCATION_EVENT)
public void receiveLocationUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleLocationItem.class).getStateAsPoint());
}
@JRuleName(NAME_RECEIVE_QUANTITY_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_QUANTITY_EVENT)
public void receiveQuantityUpdate(JRuleItemEvent event) {
- logInfo("received: '{}', type: '{}'", event.getState(), event.getState().getClass());
+ logInfo("received: '{}', type: '{}'", event.getItem().getState(), event.getItem().getState().getClass());
+ logInfo("received value: {}", event.getItem(JRuleQuantityItem.class).getStateAsDecimal().floatValue());
}
}
diff --git a/src/test/java/org/openhab/automation/jrule/rules/user/TestRules.java b/src/test/java/org/openhab/automation/jrule/rules/user/TestRules.java
index 765462da..bb435584 100755
--- a/src/test/java/org/openhab/automation/jrule/rules/user/TestRules.java
+++ b/src/test/java/org/openhab/automation/jrule/rules/user/TestRules.java
@@ -148,25 +148,25 @@ public void switchReceivedOnCommand(JRuleItemEvent event) {
@JRuleName(NAME_SWITCH_ITEM_RECEIVED_ANY_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_RECEIVING_COMMAND_SWITCH)
public void switchItemReceivedUpdate(JRuleItemEvent event) {
- logInfo("received update: {}", event.getState().stringValue());
+ logInfo("received update: {}", event.getItem().getState().stringValue());
}
@JRuleName(NAME_SWITCH_ITEM_RECEIVED_ON_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_RECEIVING_COMMAND_SWITCH, state = JRuleSwitchItem.ON)
public void switchReceivedOnUpdate(JRuleItemEvent event) {
- logInfo("received update: {}", event.getState().stringValue());
+ logInfo("received update: {}", event.getItem().getState().stringValue());
}
@JRuleName(NAME_SWITCH_ITEM_CHANGED)
@JRuleWhenItemChange(item = ITEM_RECEIVING_COMMAND_SWITCH)
public void switchItemChanged(JRuleItemEvent event) {
- logInfo("changed from '{}' to '{}'", event.getOldState(), event.getState());
+ logInfo("changed from '{}' to '{}'", event.getOldState(), event.getItem().getState());
}
@JRuleName(NAME_SWITCH_ITEM_CHANGED_TO_ON)
@JRuleWhenItemChange(item = ITEM_RECEIVING_COMMAND_SWITCH, from = JRuleSwitchItem.OFF, to = JRuleSwitchItem.ON)
public void switchReceivedChangedToOn(JRuleItemEvent event) {
- logInfo("changed: {}", event.getState().stringValue());
+ logInfo("changed: {}", event.getItem().getState().stringValue());
}
@JRuleName(NAME_INVOKE_MQTT_ACTION)
@@ -200,27 +200,29 @@ public void mqttThingChangedToOffline(JRuleThingEvent event) {
@JRuleName(NAME_MEMBER_OF_GROUP_RECEIVED_COMMAND)
@JRuleWhenItemReceivedCommand(item = ITEM_SWITCH_GROUP, memberOf = JRuleMemberOf.All)
public synchronized void memberOfGroupReceivedCommand(JRuleItemEvent event) {
- logInfo("Member of Group ({}) received command", event.getMemberName());
+ logInfo("Member of Group ({}) received command", event.getMemberItem().getName());
}
@JRuleName(NAME_MEMBER_OF_GROUP_RECEIVED_UPDATE)
@JRuleWhenItemReceivedUpdate(item = ITEM_SWITCH_GROUP, memberOf = JRuleMemberOf.All)
public synchronized void memberOfGroupReceivedUpdate(JRuleItemEvent event) {
- final String memberThatChangedStatus = event.getMemberName();
- logInfo("Member of Group ({}) received update", event.getMemberName());
+ final String memberThatChangedStatus = event.getMemberItem().getName();
+ logInfo("Member of Group ({}) received update", event.getMemberItem().getName());
+ logInfo("Member of Group ({}) received update value",
+ event.getMemberItem(JRuleSwitchItem.class).getStateAsOnOff());
}
@JRuleName(NAME_MEMBER_OF_GROUP_CHANGED)
@JRuleWhenItemChange(item = ITEM_SWITCH_GROUP, memberOf = JRuleMemberOf.All)
public synchronized void memberOfGroupChanged(JRuleItemEvent event) {
- final String memberThatChangedStatus = event.getMemberName();
- logInfo("Member of Group ({}) changed", event.getMemberName());
+ final String memberThatChangedStatus = event.getMemberItem().getName();
+ logInfo("Member of Group ({}) changed", event.getMemberItem().getName());
}
@JRuleName(NAME_PRECONDITION_LTE_AND_GTE_FOR_NUMBER)
@JRuleWhenItemChange(item = ITEM_NUMBER_CONDITION, condition = @JRuleCondition(lte = 20, gte = 18))
public synchronized void conditionLteAndGteForNumber(JRuleItemEvent event) {
- logInfo("trigger when between 18 and 20, current: {}", event.getState().stringValue());
+ logInfo("trigger when between 18 and 20, current: {}", event.getItem().getState().stringValue());
}
@JRuleName(NAME_CRON_EVERY_5_SEC)
diff --git a/src/test/java/org/openhab/binding/jrule/internal/rules/JRuleAbstractTest.java b/src/test/java/org/openhab/binding/jrule/internal/rules/JRuleAbstractTest.java
index 37f8717e..a9752851 100644
--- a/src/test/java/org/openhab/binding/jrule/internal/rules/JRuleAbstractTest.java
+++ b/src/test/java/org/openhab/binding/jrule/internal/rules/JRuleAbstractTest.java
@@ -82,7 +82,7 @@ protected void fireEvents(boolean async, List events) {
eventBus.fire(async, events);
}
- protected void setState(GenericItem item, State state) throws ItemNotFoundException {
+ protected void registerItem(GenericItem item, State state) throws ItemNotFoundException {
item.setState(state);
when(itemRegistry.getItem(item.getName())).thenReturn(item);
}
diff --git a/src/test/java/org/openhab/binding/jrule/internal/rules/delayed/JRuleDelayedTest.java b/src/test/java/org/openhab/binding/jrule/internal/rules/delayed/JRuleDelayedTest.java
index bd07d619..42e03327 100644
--- a/src/test/java/org/openhab/binding/jrule/internal/rules/delayed/JRuleDelayedTest.java
+++ b/src/test/java/org/openhab/binding/jrule/internal/rules/delayed/JRuleDelayedTest.java
@@ -49,7 +49,9 @@ public void cleanup() {
public void testDelayed() throws ItemNotFoundException, InterruptedException {
JRuleDelayedTestRules rule = initRule(JRuleDelayedTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleDelayedTestRules.TARGET_ITEM), UnDefType.UNDEF);
+
+ registerItem(new StringItem(JRuleDelayedTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleDelayedTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleDelayedTestRules.TARGET_ITEM, TargetItem.class);
ZonedDateTime fired = ZonedDateTime.now();
@@ -66,7 +68,8 @@ public void testDelayed() throws ItemNotFoundException, InterruptedException {
public void testDelayedNotWaiting() throws ItemNotFoundException, InterruptedException {
JRuleDelayedTestRules rule = initRule(JRuleDelayedTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleDelayedTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleDelayedTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleDelayedTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleDelayedTestRules.TARGET_ITEM, TargetItem.class);
ZonedDateTime fired = ZonedDateTime.now();
diff --git a/src/test/java/org/openhab/binding/jrule/internal/rules/timers/JRuleTimerTest.java b/src/test/java/org/openhab/binding/jrule/internal/rules/timers/JRuleTimerTest.java
index b9b59738..91a180cc 100644
--- a/src/test/java/org/openhab/binding/jrule/internal/rules/timers/JRuleTimerTest.java
+++ b/src/test/java/org/openhab/binding/jrule/internal/rules/timers/JRuleTimerTest.java
@@ -40,7 +40,8 @@ public class JRuleTimerTest extends JRuleAbstractTest {
public void testTimer() throws ItemNotFoundException, InterruptedException {
JRuleTimerTestRules rule = initRule(JRuleTimerTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM, TargetItem.class);
fireEvents(false, List.of(itemChangeEvent(JRuleTimerTestRules.TRIGGER_ITEM, "nothing", "timers")));
@@ -60,9 +61,10 @@ public void testTimer() throws ItemNotFoundException, InterruptedException {
public void testRepeatingTimer() throws ItemNotFoundException, InterruptedException {
JRuleTimerTestRules rule = initRule(JRuleTimerTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING), UnDefType.UNDEF);
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME), UnDefType.UNDEF);
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME_REPLACED), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME_REPLACED), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM_REPEATING, TargetItem.class);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME, TargetItem.class);
@@ -81,7 +83,7 @@ public void testRepeatingTimer() throws ItemNotFoundException, InterruptedExcept
public void testRepeatingTimerComplex() throws ItemNotFoundException, InterruptedException {
JRuleTimerTestRules rule = initRule(JRuleTimerTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME_REPLACED), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME_REPLACED), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM_REPEATING_WITH_NAME_REPLACED, TargetItem.class);
fireEvents(true, List.of(itemCommandEvent(JRuleTimerTestRules.TRIGGER_ITEM, "timers-repeating-complex")));
@@ -100,7 +102,8 @@ public void testRepeatingTimerComplex() throws ItemNotFoundException, Interrupte
public void testGetTimedLock() throws ItemNotFoundException, InterruptedException {
JRuleTimerTestRules rule = initRule(JRuleTimerTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM, TargetItem.class);
fireEvents(false, List.of(itemChangeEvent(JRuleTimerTestRules.TRIGGER_ITEM, "nothing", "locks")));
@@ -115,7 +118,8 @@ public void testGetTimedLock() throws ItemNotFoundException, InterruptedExceptio
public void testDebounce() throws ItemNotFoundException, InterruptedException {
JRuleTimerTestRules rule = initRule(JRuleTimerTestRules.class);
// Set item state in ItemRegistry
- setState(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TARGET_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleTimerTestRules.TRIGGER_ITEM), UnDefType.UNDEF);
JRuleItemRegistry.get(JRuleTimerTestRules.TARGET_ITEM, TargetItem.class);
fireEvents(false, List.of(itemChangeEvent(JRuleTimerTestRules.TRIGGER_ITEM, "nothing", "debounce")));
diff --git a/src/test/java/org/openhab/binding/jrule/internal/triggers/itemchange/JRuleGroupItemChangeTest.java b/src/test/java/org/openhab/binding/jrule/internal/triggers/itemchange/JRuleGroupItemChangeTest.java
index a550b817..06923b6e 100644
--- a/src/test/java/org/openhab/binding/jrule/internal/triggers/itemchange/JRuleGroupItemChangeTest.java
+++ b/src/test/java/org/openhab/binding/jrule/internal/triggers/itemchange/JRuleGroupItemChangeTest.java
@@ -34,6 +34,7 @@
import org.openhab.core.library.CoreItemFactory;
import org.openhab.core.library.items.StringItem;
import org.openhab.core.library.types.StringType;
+import org.openhab.core.types.UnDefType;
/**
* The {@link JRuleGroupItemChangeRules} contains tests for @JRuleWhenItemChange with memberOf=true trigger
@@ -79,6 +80,9 @@ public void testItemChange_no_from_to() throws ItemNotFoundException {
return stringItem;
});
+ registerItem(new StringItem(JRuleGroupItemChangeRules.GROUP_ITEM), UnDefType.UNDEF);
+ registerItem(new StringItem(JRuleGroupItemChangeRules.GROUP_ITEM_TO), UnDefType.UNDEF);
+
JRuleGroupItemChangeRules rule = initRule(JRuleGroupItemChangeRules.class);
// Only last event should trigger rule method
fireEvents(false, List.of(itemChangeEvent(OTHER_ITEM, "2", "1"), itemChangeEvent(MEMBER_ITEM, "2", "1")));
@@ -207,6 +211,8 @@ public void testItemChange_from() throws ItemNotFoundException {
return stringItem;
});
+ registerItem(new StringItem(GROUP_ITEM_FROM), UnDefType.UNDEF);
+
JRuleGroupItemChangeRules rule = initRule(JRuleGroupItemChangeRules.class);
// Only last event should trigger rule method
fireEvents(false, List.of(itemChangeEvent(MEMBER_ITEM, "2", "1"), itemChangeEvent(MEMBER_ITEM, "1", "2")));
@@ -277,6 +283,8 @@ public void testItemChange_to() throws ItemNotFoundException {
return stringItem;
});
+ registerItem(new StringItem(JRuleGroupItemChangeRules.GROUP_ITEM_TO), UnDefType.UNDEF);
+
JRuleGroupItemChangeRules rule = initRule(JRuleGroupItemChangeRules.class);
// Only last event should trigger rule method
fireEvents(false, List.of(itemChangeEvent(MEMBER_ITEM, "1", "2"), itemChangeEvent(MEMBER_ITEM, "2", "1")));
@@ -293,6 +301,8 @@ public void testItemChange_from_to() throws ItemNotFoundException {
return stringItem;
});
+ registerItem(new StringItem(JRuleGroupItemChangeRules.GROUP_ITEM_FROM_TO), UnDefType.UNDEF);
+
JRuleGroupItemChangeRules rule = initRule(JRuleGroupItemChangeRules.class);
// Only last event should trigger rule method
fireEvents(false, List.of(itemChangeEvent(MEMBER_ITEM, "2", "1"), itemChangeEvent(MEMBER_ITEM, "3", "2"),