From 4937e1c89568fb16300bc758b2fc5f7b211cc628 Mon Sep 17 00:00:00 2001
From: Manuel Krombholz <s3866577@msx.tu-dresden.de>
Date: Tue, 15 Jun 2021 03:42:15 +0200
Subject: [PATCH] Finished FrquencySetting and added parsing to test

---
 eraser-base/src/main/jastadd/Navigation.jrag          |  1 -
 eraser-base/src/main/jastadd/Printing.jrag            | 11 +++++++++++
 eraser-base/src/main/jastadd/Resolving.jrag           |  4 ++--
 eraser-base/src/main/jastadd/eraser.parser            |  2 +-
 eraser-base/src/main/jastadd/main.relast              |  2 +-
 eraser-base/src/main/jastadd/shem.relast              |  2 +-
 .../inf/st/eraser/parser/EraserParserHelper.java      |  4 ++--
 .../java/de/tudresden/inf/st/eraser/RulesTest.java    |  6 +++---
 .../src/test/resources/tests/ppc2/input.eraser        |  1 +
 .../src/test/resources/tests/ppc2/output.eraser       |  1 +
 10 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag
index acadcc8b..8281266e 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 00f966b8..60e77e3a 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 f93ac84b..f194a9f7 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 4ec6b8fa..0da0601d 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 76476f13..98e9bfdb 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 16566674..aa83375e 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 abb789b6..c832b194 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 b056ba02..a8c1f727 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 d53a7f32..36fddab1 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 &lt;broker&gt;.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 e7371849..9fec0c1f 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 &lt;broker&gt;.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" ;
-- 
GitLab