diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag index acadcc8b1a9bec73378c33aea27dc95b9ee94ecb..8281266e2752f40aceba72cefc862956d40395a2 100644 --- a/eraser-base/src/main/jastadd/Navigation.jrag +++ b/eraser-base/src/main/jastadd/Navigation.jrag @@ -122,5 +122,4 @@ aspect Navigation { eq Root.getRule().getRoot() = this; eq Root.getUser().getRoot() = this; eq Root.getLocation().getRoot() = this; - eq Root.getFrequencySetting().getRoot() = this; } diff --git a/eraser-base/src/main/jastadd/Printing.jrag b/eraser-base/src/main/jastadd/Printing.jrag index 00f966b85c41f697c26e46696caff3908df2423a..60e77e3a00a122f60495df3f66216a08accfbdb2 100644 --- a/eraser-base/src/main/jastadd/Printing.jrag +++ b/eraser-base/src/main/jastadd/Printing.jrag @@ -41,6 +41,9 @@ aspect Printing { for (Channel c : channels()) { sb.append(c.prettyPrint()); } + for (FrequencySetting fs : getFrequencySettingList()) { + sb.append(fs.prettyPrint()); + } return sb.toString(); } @@ -180,6 +183,14 @@ aspect Printing { .addIds("links", getLinkedItems()) .build(); } + + // FrequencySetting: id="" procFrec=""; + eq FrequencySetting.prettyPrint() { + return new MemberPrinter("FrequencySetting") + .addNonDefault("id", getID()) + .addNonDefault("procFreq", String.valueOf(getEventProcessingFrequency())) + .build(); + } // ExternalHost: "hostName:port" syn String ExternalHost.prettyPrint() { diff --git a/eraser-base/src/main/jastadd/Resolving.jrag b/eraser-base/src/main/jastadd/Resolving.jrag index f93ac84b73cb0032a2eec15a0f949ee9a35c9e1b..f194a9f72348ede36fc56b6840a16b082880906c 100644 --- a/eraser-base/src/main/jastadd/Resolving.jrag +++ b/eraser-base/src/main/jastadd/Resolving.jrag @@ -116,7 +116,7 @@ aspect Resolving { return java.util.Optional.empty(); } - syn java.util.Optional<FrequencySetting> Root.resolveFrequencySetting(String performanceId) { + syn java.util.Optional<FrequencySetting> SmartHomeEntityModel.resolveFrequencySetting(String performanceId) { for (FrequencySetting performance : getFrequencySettingList()) { if (performance.getLabel().equals(performanceId)) { return java.util.Optional.of(performance); @@ -133,7 +133,7 @@ aspect Resolving { // _._ -> FrequencySetting refine RefResolverStubs eq ASTNode.globallyResolveFrequencySettingByToken(String id) { - return getRoot().resolveFrequencySetting(id).orElseThrow(() -> new RuntimeException("FrequencySetting '" + id + "' not found!")); + return getRoot().getSmartHomeEntityModel().resolveFrequencySetting(id).orElseThrow(() -> new RuntimeException("FrequencySetting '" + id + "' not found!")); } // Thing.Channel* -> Channel diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser index 4ec6b8faf1d8f4ac6c942e4ce77cf750886cc41e..0da0601d2136e5ed105eddd81751da9d38e848c8 100644 --- a/eraser-base/src/main/jastadd/eraser.parser +++ b/eraser-base/src/main/jastadd/eraser.parser @@ -127,7 +127,7 @@ Root root = | influx_root.ir root.r {: r.setInfluxRoot(ir); return r; :} | machine_learning_root.ml root.r {: r.setMachineLearningRoot(ml); return r; :} | rule.rule root.r {: r.addRule(rule); return r; :} - | frequency_setting.ip root.r {: r.addFrequencySetting(ip); return r; :} + | frequency_setting.ip root.r {: insertZero(r.getSmartHomeEntityModel().getFrequencySettingList(), ip); return r; :} | {: return Root.createEmptyRoot(); :} ; diff --git a/eraser-base/src/main/jastadd/main.relast b/eraser-base/src/main/jastadd/main.relast index 76476f13ba5ae17824cc2f1a5d1e26a9622f1bfc..98e9bfdb34ac886e3d4ef568b45cb373ae2bb80d 100644 --- a/eraser-base/src/main/jastadd/main.relast +++ b/eraser-base/src/main/jastadd/main.relast @@ -1,5 +1,5 @@ // ---------------- Main ------------------------------ -Root ::= SmartHomeEntityModel User* MqttRoot InfluxRoot MachineLearningRoot Rule* Location* FrequencySetting*; +Root ::= SmartHomeEntityModel User* MqttRoot InfluxRoot MachineLearningRoot Rule* Location* ; // ---------------- Users ------------------------------ User : LabelledModelElement ; diff --git a/eraser-base/src/main/jastadd/shem.relast b/eraser-base/src/main/jastadd/shem.relast index 165666746b6cd509b5046eeab257cd15289c5602..aa83375e5ca39d9e61f1dfeba1141bd722d90739 100644 --- a/eraser-base/src/main/jastadd/shem.relast +++ b/eraser-base/src/main/jastadd/shem.relast @@ -1,5 +1,5 @@ // ---------------- openHAB ------------------------------ -SmartHomeEntityModel ::= Thing* Group* ThingType* Parameter* ChannelType* Channel* ItemCategory* /ActivityItem:Item/ ; +SmartHomeEntityModel ::= Thing* Group* ThingType* Parameter* ChannelType* Channel* ItemCategory* /ActivityItem:Item/ FrequencySetting*; abstract ModelElement ::= <ID:String> ; 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 abb789b66118b14c609711de134de169e9cde565..c832b194ac9d7592d7ddb9e3c099b6f19a972f55 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 @@ -453,9 +453,9 @@ class EraserParserHelper { return result; } - public Root createRoot(FrequencySetting FrequencySetting) { + public Root createRoot(FrequencySetting frequencySetting) { Root result = createRoot(); - result.addFrequencySetting(FrequencySetting); + result.getSmartHomeEntityModel().addFrequencySetting(frequencySetting); return result; } diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java index b056ba020adc39a9d6bcf5c17a7563acf5da6184..a8c1f727a599a1f529173428dee1d11fa5974156 100644 --- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java +++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/RulesTest.java @@ -922,9 +922,9 @@ public class RulesTest { TestUtils.ModelAndItem mai = createModelAndItem(0); NumberItem numberItem = mai.item; - FrequencySetting itemPerformance = new FrequencySetting(); - itemPerformance.setEventProcessingFrequency(10); - numberItem.setFrequencySetting(itemPerformance); + FrequencySetting frequencySetting = new FrequencySetting(); + frequencySetting.setEventProcessingFrequency(10); + numberItem.setFrequencySetting(frequencySetting); Rule rule = new Rule(); CountingAction counter = new CountingAction(); diff --git a/eraser-base/src/test/resources/tests/ppc2/input.eraser b/eraser-base/src/test/resources/tests/ppc2/input.eraser index d53a7f32e5ed4a0f1ccf394458f9b5e3d786e25a..36fddab19dc562bbed3fe437c147016f64ef7eee 100644 --- a/eraser-base/src/test/resources/tests/ppc2/input.eraser +++ b/eraser-base/src/test/resources/tests/ppc2/input.eraser @@ -4,4 +4,5 @@ Group: id="my-group" items=["iris1_item"] ; ThingType: id="skywriter-hat" label="SkyWriterHAT" description="SkyWriterHAT Gesture Recognition" parameters=["brokername"] channelTypes=["flick-type"] ; ChannelType: id="flick-type" itemType="String" label="Last Flick" description="Last Flick detected (and its direction)" category="Motion" readOnly ; Parameter: id="brokername" type="text" required label="Broker Name" description="Name of the broker as defined in the <broker>.url in services/mqtt.cfg. See the MQTT Binding for more information on how to configure MQTT broker connections." context="service" default="mosquitto" ; +FrequencySetting: id="ip1" procFreq="10.0"; Influx: host="localhost" ; diff --git a/eraser-base/src/test/resources/tests/ppc2/output.eraser b/eraser-base/src/test/resources/tests/ppc2/output.eraser index e7371849cfb16b0f0228c800666b4145b0437544..9fec0c1fd2611dd05a1e7872899aecd21936ff89 100644 --- a/eraser-base/src/test/resources/tests/ppc2/output.eraser +++ b/eraser-base/src/test/resources/tests/ppc2/output.eraser @@ -3,5 +3,6 @@ Group: id="my-group" items=["iris1_item"] ; ThingType: id="skywriter-hat" label="SkyWriterHAT" description="SkyWriterHAT Gesture Recognition" parameters=["brokername"] channelTypes=["flick-type"] ; ChannelType: id="flick-type" label="Last Flick" description="Last Flick detected (and its direction)" itemType="String" category="Motion" readOnly ; Parameter: id="brokername" label="Broker Name" description="Name of the broker as defined in the <broker>.url in services/mqtt.cfg. See the MQTT Binding for more information on how to configure MQTT broker connections." type="Text" context="service" default="mosquitto" required ; +FrequencySetting: id="ip1" procFreq="10.0" ; Mqtt: incoming="ppc2/" outgoing="oh2/in/" host="localhost" ; Influx: host="localhost" ;