Skip to content
Snippets Groups Projects

Partly resolves "Implement state copy in AST"

Merged Manuel Krombholz requested to merge 30-implement-state-copy-in-ast into dev
All threads resolved!
9 files
+ 44
33
Compare changes
  • Side-by-side
  • Inline
Files
9
@@ -290,7 +290,6 @@ aspect ItemHandling {
* <li>Send the new state via MQTT</li>
* <li>Send the new state to Influx DB</li>
* <li>Notify the attached {@link ItemObserver}, if any</li>
* <li>Update state of controlled items</li>
* </ul>
* @param shouldSendState whether to send the new state (currently affects MQTT and Influx)
*/
@@ -306,9 +305,6 @@ aspect ItemHandling {
if (hasItemObserver()) {
getItemObserver().apply();
}
for (Item controlled : getControllingList()) {
doUpdateFor(controlled);
}
}
//--- sendState ---
@@ -388,22 +384,49 @@ aspect ItemHandling {
syn DateTimeItem Item.asDateTimeItem() = (DateTimeItem) this;
syn DateTimeItem DateTimeItem.asDateTimeItem() = this;
//--- doUpdateFor ---
protected abstract void Item.doUpdateFor(Item controlling);
protected void ItemWithBooleanState.doUpdateFor(Item controlling) {
controlling.setStateFromBoolean(this.getState());
//--- State Copy ---
public void Item.addControlling(Item controlledItem) {
getRoot().addRule(createControllerRule(this,controlledItem));
}
public void Item.addControlledBy(Item controllerItem) {
getRoot().addRule(createControllerRule(controllerItem,this));
}
private Rule Item.createControllerRule(Item controllerItem, Item controlledItem) {
Rule rule = new Rule();
ItemStateChangeCondition condition = new ItemStateChangeCondition();
condition.setItem(controllerItem);
rule.addCondition(condition);
SetStateFromTriggeringItemAction action = new SetStateFromTriggeringItemAction();
action.setAffectedItem(controlledItem);
rule.addAction(action);
return rule;
}
//--- copyStateTo ---
protected abstract void Item.copyStateTo(Item stateReceiver);
protected void ItemWithBooleanState.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromBoolean(this.getState());
}
protected void ItemWithStringState.doUpdateFor(Item controlling) {
controlling.setStateFromString(this.getState());
protected void ItemWithStringState.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromString(this.getState());
}
protected void ItemWithDoubleState.doUpdateFor(Item controlling) {
controlling.setStateFromDouble(this.getState());
protected void ItemWithDoubleState.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromDouble(this.getState());
}
protected void ColorItem.doUpdateFor(Item controlling) {
controlling.setStateFromColor(this.getState());
protected void ColorItem.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromColor(this.getState());
}
protected void DateTimeItem.doUpdateFor(Item controlling) {
controlling.setStateFromInstant(this.getState());
protected void DateTimeItem.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromInstant(this.getState());
}
private void ColorItem.setBrightness(int value) {
@@ -415,18 +438,12 @@ aspect ItemHandling {
public void ItemUpdateColor.apply() {
getItem().setStateFromColor(getNewHSB());
getItem().freeze();
for (Item controller : getItem().getControlledByList()) {
controller.setStateFromColor(getNewHSB());
}
getItem().unfreeze();
}
//--- ItemUpdate.apply ---
public void ItemUpdateDouble.apply() {
getItem().setStateFromDouble(getNewValue());
getItem().freeze();
for (Item controller : getItem().getControlledByList()) {
controller.setStateFromDouble(getNewValue());
}
getItem().unfreeze();
}
Loading