From 5a7f81e3a49837fe94d052fde70e6fbbef8bd25b Mon Sep 17 00:00:00 2001
From: rschoene <rene.schoene@tu-dresden.de>
Date: Fri, 29 May 2020 16:35:44 +0200
Subject: [PATCH] Simple logging for reads and writes (untested).

---
 ros2rag.base/src/main/jastadd/backend/Configuration.jadd | 4 ++++
 ros2rag.base/src/main/jastadd/backend/Generation.jadd    | 9 +++++++++
 .../main/java/org/jastadd/ros2rag/compiler/Compiler.java | 8 +++++++-
 ros2rag.tests/build.gradle                               | 3 ++-
 4 files changed, 22 insertions(+), 2 deletions(-)
 create mode 100644 ros2rag.base/src/main/jastadd/backend/Configuration.jadd

diff --git a/ros2rag.base/src/main/jastadd/backend/Configuration.jadd b/ros2rag.base/src/main/jastadd/backend/Configuration.jadd
new file mode 100644
index 0000000..711ba25
--- /dev/null
+++ b/ros2rag.base/src/main/jastadd/backend/Configuration.jadd
@@ -0,0 +1,4 @@
+aspect Configuration {
+  public static boolean ASTNode.loggingEnabledForReads = false;
+  public static boolean ASTNode.loggingEnabledForWrites = false;
+}
diff --git a/ros2rag.base/src/main/jastadd/backend/Generation.jadd b/ros2rag.base/src/main/jastadd/backend/Generation.jadd
index e827c68..7a134ec 100644
--- a/ros2rag.base/src/main/jastadd/backend/Generation.jadd
+++ b/ros2rag.base/src/main/jastadd/backend/Generation.jadd
@@ -162,6 +162,11 @@ aspect AspectGeneration {
       .append(connectMethod()).append("(String topic) {\n");
     sb.append(ind(2)).append(mqttUpdaterAttribute()).append("().newConnection(topic, message -> {\n");
     String lastResult = generateMappingApplication(sb, 3, "message");
+    if (loggingEnabledForReads) {
+      sb.append(ind(3)).append("System.out.println(\"[Read] \" + topic + \" -> ")
+        .append(getToken().getName()).append(" = \" + ").append(lastResult)
+        .append(");\n");
+    }
     sb.append(ind(3)).append("set").append(getToken().getName()).append("(").append(lastResult).append(");\n");
     sb.append(ind(2)).append("});\n");
     sb.append(ind(1)).append("}\n\n");
@@ -198,6 +203,10 @@ aspect AspectGeneration {
     // write method
     sb.append(ind(1)).append("protected void ").append(parentTypeName).append(".")
       .append(writeMethod()).append("() {\n");
+    if (loggingEnabledForWrites) {
+      sb.append(ind(2)).append("System.out.println(\"[Write] ").append(getToken().getName())
+        .append(" = \" + ").append(lastValue()).append(" + \" -> ").append(writeTopic()).append("\");\n");
+    }
     // _mqttUpdater().publish(${writeTopic()}, ${lastValue()});
     sb.append(ind(2)).append(mqttUpdaterAttribute()).append("().publish(")
       .append(writeTopic()).append(", ").append(lastValue()).append(");\n");
diff --git a/ros2rag.base/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java b/ros2rag.base/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
index af1076e..ad4298d 100644
--- a/ros2rag.base/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
+++ b/ros2rag.base/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
@@ -25,6 +25,8 @@ public class Compiler {
   private StringOption optionInputRos2Rag;
   private FlagOption optionHelp;
   private FlagOption optionVerbose;
+  private FlagOption optionLogReads;
+  private FlagOption optionLogWrites;
 
   private ArrayList<Option<?>> options;
   private CommandLine commandLine;
@@ -143,7 +145,9 @@ public class Compiler {
     optionRootNode = addOption(new StringOption("rootNode", "root node in the base grammar."));
     optionInputRos2Rag = addOption(new StringOption("inputRos2Rag", "ros2rag definition file."));
     optionHelp = addOption(new FlagOption("help", "Print usage and exit."));
-    optionVerbose = addOption(new FlagOption("verbose", "Print more messages."));
+    optionVerbose = addOption(new FlagOption("verbose", "Print more messages while compiling."));
+    optionLogReads = addOption(new FlagOption("logReads", "Enable logging for every read."));
+    optionLogWrites = addOption(new FlagOption("logWrites", "Enable logging for every write."));
   }
 
   private <OptionType extends Option<?>> OptionType addOption(OptionType option) {
@@ -179,6 +183,8 @@ public class Compiler {
     }
     ros2Rag.treeResolveAll();
     ros2Rag.additionalRelations().forEach(inputGrammar::addDeclaration);
+    ASTNode.loggingEnabledForReads = optionLogReads.isSet();
+    ASTNode.loggingEnabledForWrites = optionLogWrites.isSet();
     return ros2Rag;
   }
 
diff --git a/ros2rag.tests/build.gradle b/ros2rag.tests/build.gradle
index 6c939f9..aacd38d 100644
--- a/ros2rag.tests/build.gradle
+++ b/ros2rag.tests/build.gradle
@@ -68,7 +68,8 @@ task preprocessExampleTest(type: JavaExec, group: 'verification') {
     args '--outputDir=src/test/02-after-ros2rag/example',
             '--inputGrammar=src/test/01-input/example/Example.relast',
             '--inputRos2Rag=src/test/01-input/example/Example.ros2rag',
-            '--rootNode=Model'
+            '--rootNode=Model',
+            '--logReads', '--logWrites'
 }
 
 task compileExampleTest(type: RelastTest) {
-- 
GitLab