Skip to content
Snippets Groups Projects
Commit 65ee4852 authored by René Schöne's avatar René Schöne
Browse files

Merge branch 'dev' into 33-create-pages-documentation

parents abffaecc 33924f8d
No related branches found
No related tags found
1 merge request!7Resolve "Create pages documentation"
Pipeline #8790 failed
Showing
with 97 additions and 66 deletions
aspect ItemHandling { aspect ItemHandling {
protected boolean Item.isFrozen = false;
public void Item.freeze() { isFrozen = true; }
public void Item.unfreeze() { isFrozen = false; }
public final boolean Item.isFrozen() { return isFrozen; }
protected boolean Item.sendState = true; protected boolean Item.sendState = true;
public void Item.disableSendState() { sendState = false; } public void Item.disableSendState() { sendState = false; }
public void Item.enableSendState() { sendState = true; } public void Item.enableSendState() { sendState = true; }
...@@ -142,6 +137,9 @@ aspect ItemHandling { ...@@ -142,6 +137,9 @@ aspect ItemHandling {
//--- setStateFromBoolean --- //--- setStateFromBoolean ---
public abstract void Item.setStateFromBoolean(boolean value); public abstract void Item.setStateFromBoolean(boolean value);
public void ColorItem.setStateFromBoolean(boolean value) { public void ColorItem.setStateFromBoolean(boolean value) {
if (getState()!=null && getState().getBrightness()!=0 && value) {
return;
}
setBrightness(value ? 100 : 0); setBrightness(value ? 100 : 0);
} }
public void DateTimeItem.setStateFromBoolean(boolean value) { public void DateTimeItem.setStateFromBoolean(boolean value) {
...@@ -254,31 +252,31 @@ aspect ItemHandling { ...@@ -254,31 +252,31 @@ aspect ItemHandling {
//--- setState(value,shouldSendState) --- //--- setState(value,shouldSendState) ---
public void ItemWithBooleanState.setState(boolean value, boolean shouldSendState) { public void ItemWithBooleanState.setState(boolean value, boolean shouldSendState) {
if (isFrozen || stateEquals(value)) { return; } if (stateEquals(value)) { return; }
set_state(value); set_state(value);
stateUpdated(shouldSendState); stateUpdated(shouldSendState);
} }
public void ItemWithStringState.setState(String value, boolean shouldSendState) { public void ItemWithStringState.setState(String value, boolean shouldSendState) {
if (isFrozen || stateEquals(value)) { return; } if (stateEquals(value)) { return; }
set_state(value); set_state(value);
stateUpdated(shouldSendState); stateUpdated(shouldSendState);
} }
public void ItemWithDoubleState.setState(double value, boolean shouldSendState) { public void ItemWithDoubleState.setState(double value, boolean shouldSendState) {
if (isFrozen || stateEquals(value)) { return; } if (stateEquals(value)) { return; }
set_state(value); set_state(value);
stateUpdated(shouldSendState); stateUpdated(shouldSendState);
} }
public void ColorItem.setState(TupleHSB value, boolean shouldSendState) { public void ColorItem.setState(TupleHSB value, boolean shouldSendState) {
if (isFrozen || stateEquals(value)) { return; } if (stateEquals(value)) { return; }
set_state(value); set_state(value);
stateUpdated(shouldSendState); stateUpdated(shouldSendState);
} }
public void DateTimeItem.setState(Instant value, boolean shouldSendState) { public void DateTimeItem.setState(Instant value, boolean shouldSendState) {
if (isFrozen || stateEquals(value)) { return; } if (stateEquals(value)) { return; }
set_state(value); set_state(value);
stateUpdated(shouldSendState); stateUpdated(shouldSendState);
} }
...@@ -290,7 +288,6 @@ aspect ItemHandling { ...@@ -290,7 +288,6 @@ aspect ItemHandling {
* <li>Send the new state via MQTT</li> * <li>Send the new state via MQTT</li>
* <li>Send the new state to Influx DB</li> * <li>Send the new state to Influx DB</li>
* <li>Notify the attached {@link ItemObserver}, if any</li> * <li>Notify the attached {@link ItemObserver}, if any</li>
* <li>Update state of controlled items</li>
* </ul> * </ul>
* @param shouldSendState whether to send the new state (currently affects MQTT and Influx) * @param shouldSendState whether to send the new state (currently affects MQTT and Influx)
*/ */
...@@ -306,9 +303,6 @@ aspect ItemHandling { ...@@ -306,9 +303,6 @@ aspect ItemHandling {
if (hasItemObserver()) { if (hasItemObserver()) {
getItemObserver().apply(); getItemObserver().apply();
} }
for (Item controlled : getControllingList()) {
doUpdateFor(controlled);
}
} }
//--- sendState --- //--- sendState ---
...@@ -388,22 +382,56 @@ aspect ItemHandling { ...@@ -388,22 +382,56 @@ aspect ItemHandling {
syn DateTimeItem Item.asDateTimeItem() = (DateTimeItem) this; syn DateTimeItem Item.asDateTimeItem() = (DateTimeItem) this;
syn DateTimeItem DateTimeItem.asDateTimeItem() = this; syn DateTimeItem DateTimeItem.asDateTimeItem() = this;
//--- doUpdateFor ---
protected abstract void Item.doUpdateFor(Item controlling); //--- State Copy ---
protected void ItemWithBooleanState.doUpdateFor(Item controlling) { public void Item.addControlling(Item controlledItem) {
controlling.setStateFromBoolean(this.getState()); getRoot().addRule(createControllerRule(this,controlledItem));
}
public void Item.addControlledBy(Item controllerItem) {
getRoot().addRule(createControllerRule(controllerItem,this));
}
public void Item.synchronizeWith(Item item) {
addControlledBy(item);
addControlling(item);
}
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);
rule.activateFor(controllerItem);
return rule;
} }
protected void ItemWithStringState.doUpdateFor(Item controlling) {
controlling.setStateFromString(this.getState());
//--- copyStateTo ---
protected abstract void Item.copyStateTo(Item stateReceiver);
protected void ItemWithBooleanState.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromBoolean(this.getState());
}
protected void ItemWithStringState.copyStateTo(Item stateReceiver) {
stateReceiver.setStateFromString(this.getState());
} }
protected void ItemWithDoubleState.doUpdateFor(Item controlling) { protected void ItemWithDoubleState.copyStateTo(Item stateReceiver) {
controlling.setStateFromDouble(this.getState()); stateReceiver.setStateFromDouble(this.getState());
} }
protected void ColorItem.doUpdateFor(Item controlling) { protected void ColorItem.copyStateTo(Item stateReceiver) {
controlling.setStateFromColor(this.getState()); stateReceiver.setStateFromColor(this.getState());
} }
protected void DateTimeItem.doUpdateFor(Item controlling) { protected void DateTimeItem.copyStateTo(Item stateReceiver) {
controlling.setStateFromInstant(this.getState()); stateReceiver.setStateFromInstant(this.getState());
} }
private void ColorItem.setBrightness(int value) { private void ColorItem.setBrightness(int value) {
...@@ -414,20 +442,10 @@ aspect ItemHandling { ...@@ -414,20 +442,10 @@ aspect ItemHandling {
public abstract void ItemUpdate.apply(); public abstract void ItemUpdate.apply();
public void ItemUpdateColor.apply() { public void ItemUpdateColor.apply() {
getItem().setStateFromColor(getNewHSB()); getItem().setStateFromColor(getNewHSB());
getItem().freeze();
for (Item controller : getItem().getControlledByList()) {
controller.setStateFromColor(getNewHSB());
}
getItem().unfreeze();
} }
//--- ItemUpdate.apply --- //--- ItemUpdate.apply ---
public void ItemUpdateDouble.apply() { public void ItemUpdateDouble.apply() {
getItem().setStateFromDouble(getNewValue()); getItem().setStateFromDouble(getNewValue());
getItem().freeze();
for (Item controller : getItem().getControlledByList()) {
controller.setStateFromDouble(getNewValue());
}
getItem().unfreeze();
} }
//--- ItemUpdate.describe --- //--- ItemUpdate.describe ---
......
...@@ -49,7 +49,7 @@ aspect Printing { ...@@ -49,7 +49,7 @@ aspect Printing {
.build(); .build();
} }
//ITEM_TYPE Item: id="" label="" state="" category="" topic="" controls=["ITEM_ID", "ITEM_ID"]; //ITEM_TYPE Item: id="" label="" state="" category="" topic="";
syn String Item.prettyPrint() { syn String Item.prettyPrint() {
return new MemberPrinter(prettyPrintType()) return new MemberPrinter(prettyPrintType())
.addRequired("id", getID()) .addRequired("id", getID())
...@@ -57,7 +57,6 @@ aspect Printing { ...@@ -57,7 +57,6 @@ aspect Printing {
.addRequired("state", getStateAsString()) .addRequired("state", getStateAsString())
.addOptional("category", hasCategory(), () -> getCategory().getName()) .addOptional("category", hasCategory(), () -> getCategory().getName())
.addOptional("topic", hasTopic(), () -> getTopic().getTopicString()) .addOptional("topic", hasTopic(), () -> getTopic().getTopicString())
.addIds("controls", getControllingList())
.addNodes("metaData", getNumMetaData(), getMetaDataList(), .addNodes("metaData", getNumMetaData(), getMetaDataList(),
md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"", md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"",
MemberPrinter.ListBracketType.CURLY) MemberPrinter.ListBracketType.CURLY)
...@@ -86,7 +85,6 @@ aspect Printing { ...@@ -86,7 +85,6 @@ aspect Printing {
.addNonDefault("label", getLabel()) .addNonDefault("label", getLabel())
.addOptional("category", hasCategory(), () -> getCategory().getName()) .addOptional("category", hasCategory(), () -> getCategory().getName())
.addOptional("topic", hasTopic(), () -> getTopic().getTopicString()) .addOptional("topic", hasTopic(), () -> getTopic().getTopicString())
.addIds("controls", getControllingList())
.addNodes("metaData", getNumMetaData(), getMetaDataList(), .addNodes("metaData", getNumMetaData(), getMetaDataList(),
md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"", md -> "\"" + md.getKey() + "\":\"" + md.getValue() + "\"",
MemberPrinter.ListBracketType.CURLY) MemberPrinter.ListBracketType.CURLY)
......
...@@ -79,6 +79,7 @@ aspect Rules { ...@@ -79,6 +79,7 @@ aspect Rules {
syn boolean Condition.holdsFor(Item item); syn boolean Condition.holdsFor(Item item);
eq ItemStateCheckCondition.holdsFor(Item item) = getItemStateCheck().holdsFor(item); eq ItemStateCheckCondition.holdsFor(Item item) = getItemStateCheck().holdsFor(item);
eq ExpressionCondition.holdsFor(Item item) = getLogicalExpression().eval(); eq ExpressionCondition.holdsFor(Item item) = getLogicalExpression().eval();
eq ItemStateChangeCondition.holdsFor(Item item) = getItem() == item;
// --- Action.applyFor --- // --- Action.applyFor ---
public abstract void Action.applyFor(Item item); public abstract void Action.applyFor(Item item);
...@@ -101,7 +102,7 @@ aspect Rules { ...@@ -101,7 +102,7 @@ aspect Rules {
getAffectedItem().setStateFromString(getNewStateProvider().get()); getAffectedItem().setStateFromString(getNewStateProvider().get());
} }
public void SetStateFromTriggeringItemAction.applyFor(Item item) { public void SetStateFromTriggeringItemAction.applyFor(Item item) {
item.doUpdateFor(getAffectedItem()); item.copyStateTo(getAffectedItem());
} }
public void SetStateFromItemsAction.applyFor(Item item) { public void SetStateFromItemsAction.applyFor(Item item) {
getAffectedItem().setStateFromString(getCombinator().apply(getSourceItems())); getAffectedItem().setStateFromString(getCombinator().apply(getSourceItems()));
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
Rule ::= Condition* Action* ; Rule ::= Condition* Action* ;
abstract Condition ; abstract Condition ;
ItemStateCheckCondition : Condition ::= ItemStateCheck ; ItemStateCheckCondition : Condition ::= ItemStateCheck ;
ItemStateChangeCondition : Condition ::= Item;
ExpressionCondition : Condition ::= LogicalExpression ; ExpressionCondition : Condition ::= LogicalExpression ;
abstract Action ; abstract Action ;
NoopAction : Action ; NoopAction : Action ;
......
...@@ -77,7 +77,6 @@ Comment = "//" [^\n\r]+ ...@@ -77,7 +77,6 @@ Comment = "//" [^\n\r]+
"channels" { return sym(Terminals.CHANNELS); } "channels" { return sym(Terminals.CHANNELS); }
"channelTypes" { return sym(Terminals.CHANNEL_TYPES); } "channelTypes" { return sym(Terminals.CHANNEL_TYPES); }
"context" { return sym(Terminals.CONTEXT); } "context" { return sym(Terminals.CONTEXT); }
"controls" { return sym(Terminals.CONTROLS); }
"dbName" { return sym(Terminals.DB_NAME); } "dbName" { return sym(Terminals.DB_NAME); }
"default" { return sym(Terminals.DEFAULT); } "default" { return sym(Terminals.DEFAULT); }
"description" { return sym(Terminals.DESCRIPTION); } "description" { return sym(Terminals.DESCRIPTION); }
......
...@@ -125,15 +125,13 @@ Item item = ...@@ -125,15 +125,13 @@ Item item =
| ITEM COLON item_body.ib SEMICOLON {: return eph.retype(new DefaultItem(), ib); :} | ITEM COLON item_body.ib SEMICOLON {: return eph.retype(new DefaultItem(), ib); :}
; ;
// ITEM_TYPE Item: id="" label="" state="" category="" topic="" controls=["ITEM_ID"] metaData={"key":"value"} ; // ITEM_TYPE Item: id="" label="" state="" category="" topic="" metaData={"key":"value"} ;
Item item_body = Item item_body =
ID EQUALS TEXT.n item_body.i {: return eph.setID(i, n); :} ID EQUALS TEXT.n item_body.i {: return eph.setID(i, n); :}
| LABEL EQUALS TEXT.n item_body.i {: i.setLabel(n); return i; :} | LABEL EQUALS TEXT.n item_body.i {: i.setLabel(n); return i; :}
| STATE EQUALS TEXT.n item_body.i {: i.setStateFromString(n); return i; :} | STATE EQUALS TEXT.n item_body.i {: i.setStateFromString(n); return i; :}
| TOPIC EQUALS TEXT.n item_body.i {: return eph.setTopic(i, n); :} | TOPIC EQUALS TEXT.n item_body.i {: return eph.setTopic(i, n); :}
| CATEGORY EQUALS TEXT.n item_body.i {: return eph.setCategory(i, n); :} | CATEGORY EQUALS TEXT.n item_body.i {: return eph.setCategory(i, n); :}
| CONTROLS EQUALS string_list.controlling item_body.i
{: return eph.setControlling(i, controlling); :}
| META_DATA EQUALS string_map.md item_body.i | META_DATA EQUALS string_map.md item_body.i
{: return eph.setMetaData(i, md); :} {: return eph.setMetaData(i, md); :}
| {: return eph.createItem(); :} | {: return eph.createItem(); :}
......
...@@ -27,7 +27,6 @@ ParameterDefaultValue ::= <Value:String> ; ...@@ -27,7 +27,6 @@ ParameterDefaultValue ::= <Value:String> ;
abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* [ItemObserver] ; abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* [ItemObserver] ;
rel Item.Category? -> ItemCategory ; rel Item.Category? -> ItemCategory ;
rel Item.Controlling* <-> Item.ControlledBy* ;
abstract ItemWithBooleanState : Item ::= <_state:boolean> ; abstract ItemWithBooleanState : Item ::= <_state:boolean> ;
abstract ItemWithStringState : Item ::= <_state:String> ; abstract ItemWithStringState : Item ::= <_state:String> ;
......
...@@ -102,10 +102,10 @@ public class ControllingItemTest { ...@@ -102,10 +102,10 @@ public class ControllingItemTest {
assertEquals("30,20,10", stringItem.getState()); assertEquals("30,20,10", stringItem.getState());
assertEquals(TupleHSB.of(30, 20, 10), target.getState(), "Item was not controlled correctly"); assertEquals(TupleHSB.of(30, 20, 10), target.getState(), "Item was not controlled correctly");
// boolean true -> set brightness to full (100) // boolean true -> brightness should still be 10 because it's already turned on
booleanItem.setState(true); booleanItem.setState(true);
assertTrue(booleanItem.getState()); assertTrue(booleanItem.getState());
assertEquals(TupleHSB.of(30, 20, 100), target.getState(), "Item was not controlled correctly"); assertEquals(TupleHSB.of(30, 20, 10), target.getState(), "Item was not controlled correctly");
// color (33,33,33) -> set brightness to (33,33,33) // color (33,33,33) -> set brightness to (33,33,33)
colorItem.setState(TupleHSB.of(33, 33, 33)); colorItem.setState(TupleHSB.of(33, 33, 33));
...@@ -125,4 +125,25 @@ public class ControllingItemTest { ...@@ -125,4 +125,25 @@ public class ControllingItemTest {
item.enableSendState(); item.enableSendState();
return item; return item;
} }
@Test
public void testCircularControlling() {
ModelAndItem mai = TestUtils.createModelAndItem(0, true);
NumberItem item1 = mai.item;
NumberItem item2 = TestUtils.addItemTo(mai.model, 4, true);
item1.addControlling(item2);
item2.addControlling(item1);
assertEquals(0, item1.getState(), DELTA);
assertEquals(4, item2.getState(), DELTA);
item1.setState(5);
assertEquals(5, item1.getState(), DELTA, "Item was not controlled correctly");
assertEquals(5, item2.getState(), DELTA, "Item was not controlled correctly");
item2.setState(3);
assertEquals(3, item1.getState(), DELTA, "Item was not controlled correctly");
assertEquals(3, item2.getState(), DELTA, "Item was not controlled correctly");
}
} }
...@@ -9,14 +9,14 @@ Group: id="my-empty-group" ; ...@@ -9,14 +9,14 @@ Group: id="my-empty-group" ;
Color Item : id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state"; Color Item : id="color1" label="a Color Item" state="1,2,3" topic="item/hsb/color1/state";
DateTime Item : id="datetime1" label="a DateTime Item" state="1543415826" topic="item/date/datetime1/state"; DateTime Item : id="datetime1" label="a DateTime Item" state="1543415826" topic="item/date/datetime1/state";
Contact Item : id="contact1" label="a Contact Item" state="CLOSED" topic="item/bool/contact1/state"; Contact Item : id="contact1" label="a Contact Item" state="CLOSED" topic="item/bool/contact1/state";
Dimmer Item : id="dimmer1" label="a Dimmer Item" state="123" topic="item/double/dimmer1/state" controls=["color1", "datetime1"]; Dimmer Item : id="dimmer1" label="a Dimmer Item" state="123" topic="item/double/dimmer1/state";
Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image1/state" controls=[]; Image Item : id="image1" label="an Image Item" state="def" topic="item/str/image1/state" ;
Location Item : id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state"; Location Item : id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state";
Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state" controls=["string1"]; Number Item : id="number1" label="a Number Item" state="456" topic="item/double/number1/state" ;
Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state"; Player Item : id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state";
RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="0" topic="item/str/rs1/state"; RollerShutter Item : id="rollerShutter1" label="a RollerShutter Item" state="0" topic="item/str/rs1/state";
Activity Item: id="activity"; Activity Item: id="activity";
String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state"; String Item : id="string1" label="a String Item" state="mno" topic="item/str/string1/state";
Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state" controls=["rollerShutter1"]; Switch Item : id="switch1" label="a Switch Item" state="true" topic="item/bool/switch1/state";
Item : id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state"; Item : id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state";
Influx: host="localhost" ; Influx: host="localhost" ;
...@@ -4,13 +4,13 @@ Image Item: id="image1" label="an Image Item" state="def" topic="item/str/image1 ...@@ -4,13 +4,13 @@ Image Item: id="image1" label="an Image Item" state="def" topic="item/str/image1
Location Item: id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state" ; Location Item: id="location1" label="a Location Item" state="ghi" topic="item/str/location1/state" ;
DateTime Item: id="datetime1" label="a DateTime Item" state="1970-01-18T20:43:35.826Z" topic="item/date/datetime1/state" ; DateTime Item: id="datetime1" label="a DateTime Item" state="1970-01-18T20:43:35.826Z" topic="item/date/datetime1/state" ;
Item: id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state" ; Item: id="default1" label="a Default Item" state="pqr" topic="item/str/default1/state" ;
Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" controls=["color1", "datetime1"] ; Dimmer Item: id="dimmer1" label="a Dimmer Item" state="123.0" topic="item/double/dimmer1/state" ;
Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state" ; Player Item: id="player1" label="a Player Item" state="jkl" topic="item/str/player1/state" ;
Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" controls=["string1"] ; Number Item: id="number1" label="a Number Item" state="456.0" topic="item/double/number1/state" ;
RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="0.0" topic="item/str/rs1/state" ; RollerShutter Item: id="rollerShutter1" label="a RollerShutter Item" state="0.0" topic="item/str/rs1/state" ;
Activity Item: id="activity" ; Activity Item: id="activity" ;
String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ; String Item: id="string1" label="a String Item" state="mno" topic="item/str/string1/state" ;
Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" controls=["rollerShutter1"] ; Switch Item: id="switch1" label="a Switch Item" state="ON" topic="item/bool/switch1/state" ;
Group: id="my-first-group" items=["color1", "contact1", "image1", "location1"] aggregation="AND" ("ON", "OFF") ; Group: id="my-first-group" items=["color1", "contact1", "image1", "location1"] aggregation="AND" ("ON", "OFF") ;
Group: id="my-second-group" items=["datetime1", "default1"] ; Group: id="my-second-group" items=["datetime1", "default1"] ;
Group: id="my-third-group" items=["dimmer1", "player1"] ; Group: id="my-third-group" items=["dimmer1", "player1"] ;
......
...@@ -11,7 +11,7 @@ Group: items=["min-item", "max-item"] id="max-group" groups=["min-group"] aggreg ...@@ -11,7 +11,7 @@ Group: items=["min-item", "max-item"] id="max-group" groups=["min-group"] aggreg
Number Item: id="min-item" ; // state will be set to default value Number Item: id="min-item" ; // state will be set to default value
Switch Item: topic="items/max" Switch Item: topic="items/max"
controls=["min-item"] id="max-item" state="true" label="Item with all members set" category="not used" id="max-item" state="true" label="Item with all members set" category="not used"
metaData={"one":"true", "zero":"false"} ; metaData={"one":"true", "zero":"false"} ;
// Parameters will get sorted alphabetically in output // Parameters will get sorted alphabetically in output
......
Thing: id="min-thing" type="min-thing-type" ; Thing: id="min-thing" type="min-thing-type" ;
Thing: id="max-thing" label="Max Thing" type="max-thing-type" channels=["min-channel", "max-channel"] ; Thing: id="max-thing" label="Max Thing" type="max-thing-type" channels=["min-channel", "max-channel"] ;
Number Item: id="min-item" state="0.0" ; Number Item: id="min-item" state="0.0" ;
Switch Item: id="max-item" label="Item with all members set" state="ON" category="not used" topic="items/max" controls=["min-item"] metaData={"one":"true", "zero":"false"} ; Switch Item: id="max-item" label="Item with all members set" state="ON" category="not used" topic="items/max" metaData={"one":"true", "zero":"false"} ;
Group: id="min-group" ; Group: id="min-group" ;
Group: id="max-group" groups=["min-group"] items=["min-item", "max-item"] aggregation="AND" ("one", "two") ; Group: id="max-group" groups=["min-group"] items=["min-item", "max-item"] aggregation="AND" ("one", "two") ;
ThingType: id="min-thing-type" ; ThingType: id="min-thing-type" ;
......
...@@ -241,9 +241,7 @@ public class Application { ...@@ -241,9 +241,7 @@ public class Application {
return SimpleItem.of(item.getID(), return SimpleItem.of(item.getID(),
item.getLabel(), item.getLabel(),
item.getTopic() != null ? item.getTopic().getTopicString() : null, item.getTopic() != null ? item.getTopic().getTopicString() : null,
item.isFrozen(),
item.isSendState(), item.isSendState(),
item.getControllingList().stream().map(Item::getID).collect(Collectors.toList()),
wrapMetaData(item.getMetaDataList())); wrapMetaData(item.getMetaDataList()));
} }
......
...@@ -15,8 +15,6 @@ public class SimpleItem { ...@@ -15,8 +15,6 @@ public class SimpleItem {
public final String ID; public final String ID;
public final String label; public final String label;
public final String topic; public final String topic;
public final boolean frozen;
public final boolean sendState; public final boolean sendState;
public final List<String> controlling;
public final Map<String, String> metaData; public final Map<String, String> metaData;
} }
...@@ -31,7 +31,7 @@ public class ExecuteImplTest { ...@@ -31,7 +31,7 @@ public class ExecuteImplTest {
lamp.enableSendState(); lamp.enableSendState();
TestUtils.getDefaultGroup(model).addItem(lamp); TestUtils.getDefaultGroup(model).addItem(lamp);
numberItem.addControlling(lamp); numberItem.synchronizeWith(lamp);
Execute execute = new ExecuteImpl(); Execute execute = new ExecuteImpl();
execute.setKnowledgeBase(model.getRoot()); execute.setKnowledgeBase(model.getRoot());
...@@ -62,7 +62,7 @@ public class ExecuteImplTest { ...@@ -62,7 +62,7 @@ public class ExecuteImplTest {
lamp.enableSendState(); lamp.enableSendState();
TestUtils.getDefaultGroup(model).addItem(lamp); TestUtils.getDefaultGroup(model).addItem(lamp);
button.addControlling(lamp); button.synchronizeWith(lamp);
Execute execute = new ExecuteImpl(); Execute execute = new ExecuteImpl();
execute.setKnowledgeBase(model.getRoot()); execute.setKnowledgeBase(model.getRoot());
...@@ -103,10 +103,10 @@ public class ExecuteImplTest { ...@@ -103,10 +103,10 @@ public class ExecuteImplTest {
lamp.enableSendState(); lamp.enableSendState();
TestUtils.getDefaultGroup(model).addItem(lamp); TestUtils.getDefaultGroup(model).addItem(lamp);
lamp.addControlledBy(numberItem); lamp.synchronizeWith(numberItem);
lamp.addControlledBy(stringItem); lamp.synchronizeWith(stringItem);
lamp.addControlledBy(booleanItem); lamp.synchronizeWith(booleanItem);
lamp.addControlledBy(colorItem); lamp.synchronizeWith(colorItem);
Execute execute = new ExecuteImpl(); Execute execute = new ExecuteImpl();
execute.setKnowledgeBase(model.getRoot()); execute.setKnowledgeBase(model.getRoot());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment