From ed94e814ab3049a2c55dd4c8ff2fe326daa28ed4 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).

---
 src/main/jastadd/backend/Configuration.jadd              | 4 ++++
 src/main/jastadd/backend/Generation.jadd                 | 9 +++++++++
 src/main/java/org/jastadd/ros2rag/compiler/Compiler.java | 8 +++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 src/main/jastadd/backend/Configuration.jadd

diff --git a/src/main/jastadd/backend/Configuration.jadd b/src/main/jastadd/backend/Configuration.jadd
new file mode 100644
index 0000000..711ba25
--- /dev/null
+++ b/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/src/main/jastadd/backend/Generation.jadd b/src/main/jastadd/backend/Generation.jadd
index e827c68..7a134ec 100644
--- a/src/main/jastadd/backend/Generation.jadd
+++ b/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/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java b/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
index af1076e..ad4298d 100644
--- a/src/main/java/org/jastadd/ros2rag/compiler/Compiler.java
+++ b/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;
   }
 
-- 
GitLab