diff --git a/eraser-base/src/main/jastadd/Group.jrag b/eraser-base/src/main/jastadd/Group.jrag deleted file mode 100644 index 2c973535da71974718c84cef24eb436ea7b6a280..0000000000000000000000000000000000000000 --- a/eraser-base/src/main/jastadd/Group.jrag +++ /dev/null @@ -1,5 +0,0 @@ -aspect Group { - eq Group.getItem().getEnclosingGroup() = this; - eq Group.getGroup().getEnclosingGroup() = this; - eq SmartHomeEntityModel.getGroup().getEnclosingGroup() = null; -} \ No newline at end of file diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag index 0ded5474bca071a4ba360e2491b8c633ba91df11..0ff309b6723e9c7ddfd15e7442cbaf25403ca417 100644 --- a/eraser-base/src/main/jastadd/Item.jrag +++ b/eraser-base/src/main/jastadd/Item.jrag @@ -21,7 +21,7 @@ aspect ItemHandling { eq ItemWithDoubleState.getStateAsString() = Double.toString(getState()); eq ItemWithStringState.getStateAsString() = getState(); - syn StateData Item.getStateData() = new StateData(); + syn LastChanged Item.getLastChanged() = new LastChanged(); //--- getStateAsDouble --- syn double Item.getStateAsDouble(); @@ -305,8 +305,8 @@ aspect ItemHandling { logger.catching(e); } } - if (this.getStateData().checkStateProcessingTime(relevantItemPerformance())) { - this.getStateData().afterStateChangeProcessed(); + if (this.getLastChanged().checkStateProcessingTime(relevantItemPerformance())) { + this.getLastChanged().afterStateChangeProcessed(); getItemObserver().apply(); } } diff --git a/eraser-base/src/main/jastadd/StateData.jrag b/eraser-base/src/main/jastadd/LastChanged.jrag similarity index 55% rename from eraser-base/src/main/jastadd/StateData.jrag rename to eraser-base/src/main/jastadd/LastChanged.jrag index e7d32a8af08a2edb9a4cfa29c2136aac19ff58fe..1650747439d0e15cc8a8d52d1db27437d802c2fd 100644 --- a/eraser-base/src/main/jastadd/StateData.jrag +++ b/eraser-base/src/main/jastadd/LastChanged.jrag @@ -1,14 +1,14 @@ -aspect StateData { - public void StateData.afterStateChangeProcessed() { - this.setLastChangeDate(Instant.now()); +aspect LastChanged { + public void LastChanged.afterStateChangeProcessed() { + this.setValue(Instant.now()); } - public boolean StateData.checkStateProcessingTime(ItemPerformance itemPerformance) { + public boolean LastChanged.checkStateProcessingTime(ItemPerformance itemPerformance) { if (itemPerformance==null) { return true; } double frequency = itemPerformance.getEventProcessingFrequency(); - Instant lastStateChange = this.getLastChangeDate(); + Instant lastStateChange = this.getValue(); if (lastStateChange==null) { return true; } diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag index 42fd1bf89ed8a972d68af4ab1e7ac1b5c956ef56..d12dc50b01de4ffec0b76dbf28a9f25d937896dd 100644 --- a/eraser-base/src/main/jastadd/Navigation.jrag +++ b/eraser-base/src/main/jastadd/Navigation.jrag @@ -11,6 +11,10 @@ aspect Navigation { return result; } + eq Group.getItem().enclosingGroup() = this; + eq Group.getGroup().enclosingGroup() = this; + eq SmartHomeEntityModel.getGroup().enclosingGroup() = null; + inh ItemPerformance Item.relevantItemPerformance(); inh ItemPerformance Group.relevantItemPerformance(); eq Group.getItem(int index).relevantItemPerformance() { @@ -24,7 +28,7 @@ aspect Navigation { return this.getItemPerformance(); } // recursively use enclosing group and use value from there, if any - Group parent = getEnclosingGroup(); + Group parent = enclosingGroup(); if (parent != null) { return parent.relevantItemPerformance(); } @@ -32,8 +36,8 @@ aspect Navigation { return null; } - inh Group Group.getEnclosingGroup(); - inh Group Item.getEnclosingGroup(); + inh Group Group.enclosingGroup(); + inh Group Item.enclosingGroup(); private void SmartHomeEntityModel.addItems(java.util.List<Item> result, JastAddList<Group> groups) { groups.forEach(group -> group.getItemList().forEach(item -> result.add(item))); diff --git a/eraser-base/src/main/jastadd/shem.relast b/eraser-base/src/main/jastadd/shem.relast index 250c5714daf2a79e6846b7f51bb8a4dfb662f332..0361ff590dcfe06193665503a71ffde82c307c1d 100644 --- a/eraser-base/src/main/jastadd/shem.relast +++ b/eraser-base/src/main/jastadd/shem.relast @@ -26,7 +26,7 @@ rel Channel.LinkedItem* <-> Item.Channel? ; Parameter : DescribableModelElement ::= <Type:ParameterValueType> [DefaultValue:ParameterDefaultValue] <Context:String> <Required:boolean> ; ParameterDefaultValue ::= <Value:String> ; -abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* /ItemObserver/ /StateData/; +abstract Item : LabelledModelElement ::= <_fetched_data:boolean> MetaData:ItemMetaData* /ItemObserver/ /LastChanged/; rel Item.Category? -> ItemCategory ; rel Item.ItemPerformance? -> ItemPerformance ; @@ -51,7 +51,7 @@ ItemMetaData ::= <Key:String> <Value:String> ; ItemCategory ::= <Name:String> ; -StateData ::= <LastChangeDate:Instant> ; +LastChanged ::= <Value:Instant> ; Group : LabelledModelElement ::= Group* Item* [AggregationFunction:GroupAggregationFunction] ; diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java index f5eeee1dac81c08d7f4bd4f7e686ca098b4726b2..372cdb969f601f8940518efc5f6042046ee1433c 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/parser/EraserParserHelper.java @@ -35,7 +35,7 @@ public class EraserParserHelper { private Map<Thing, Iterable<String>> missingChannelListMap = new HashMap<>(); private Map<Channel, Iterable<String>> missingItemLinkListMap = new HashMap<>(); - private Map<Item, Iterable<String>> missingControllingListMap = new HashMap<>(); + private Map<Group, Iterable<String>> missingSubGroupListMap = new HashMap<>(); private Map<Group, Iterable<String>> missingItemListMap = new HashMap<>(); private Map<ThingType, Iterable<String>> missingChannelTypeListMap = new HashMap<>(); @@ -98,7 +98,7 @@ public class EraserParserHelper { resolveList(itemMap, missingItemListMap, this::addItemToGroup); resolveList(channelTypeMap, missingChannelTypeListMap, ThingType::addChannelType); resolveList(parameterMap, missingParameterListMap, ThingType::addParameter); - resolveList(itemMap, missingControllingListMap, Item::addControlling); + createUnknownGroupIfNecessary(); createChannelCategories(); @@ -109,6 +109,7 @@ public class EraserParserHelper { } this.root.treeResolveAll(); + this.root.doFullTraversal(); } private void addItemToGroup(Group group, Item item) { @@ -321,7 +322,6 @@ public class EraserParserHelper { } moveMissingForRetype(itemWithCorrectType, prototype, missingTopicMap); - moveMissingForRetype(itemWithCorrectType, prototype, missingControllingListMap); moveMissingForRetype(itemWithCorrectType, prototype, missingItemCategoryMap); itemMap.put(prototype.getID(), itemWithCorrectType);