From 4bac5407b974362c34618fea40b80ab3d7ca5de0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Sch=C3=B6ne?= <rene.schoene@tu-dresden.de>
Date: Wed, 25 Jan 2023 15:50:01 +0100
Subject: [PATCH] Resolve ""error: variable handler is already defined" when
 using multiple protocols"

---
 pages/docs/changelog.md                       |  8 ++++++
 .../main/resources/sendDefinition.mustache    | 27 ++++++++++---------
 ragconnect.tests/build.gradle                 |  2 +-
 .../ragconnect/tests/AttributeTest.java       |  1 -
 .../tests/tree/AbstractTreeTest.java          |  1 -
 5 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/pages/docs/changelog.md b/pages/docs/changelog.md
index 79386ad..138ad9b 100644
--- a/pages/docs/changelog.md
+++ b/pages/docs/changelog.md
@@ -1,5 +1,13 @@
 # Changelog
 
+## 1.0.1 (dev)
+
+### Changes
+
+### Development Changes
+
+- Bugfix: "error: variable handler is already defined" when using multiple protocols [#58](https://git-st.inf.tu-dresden.de/jastadd/ragconnect/-/issues/58)
+
 ## 1.0.0
 
 ### Changes
diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache
index 9c7dac4..d976185 100644
--- a/ragconnect.base/src/main/resources/sendDefinition.mustache
+++ b/ragconnect.base/src/main/resources/sendDefinition.mustache
@@ -7,23 +7,24 @@ public boolean {{parentTypeName}}.{{connectMethodName}}(String {{connectParamete
   switch (scheme) {
   {{#javaHandler}}
   {{#InUse}}
-    case "java":
-    final JavaHandler handler = {{attributeName}}();
+    case "java": {
+      final JavaHandler handler = {{attributeName}}();
 
-    {{senderName}}.add(() -> {
-      handler.push(path, {{lastValueGetterCall}});
-    }{{#IndexBasedListAccess}}, index{{/IndexBasedListAccess}}, connectToken);
-    {{updateMethodName}}();
-    if (writeCurrentValue) {
-      {{writeMethodName}}({{#IndexBasedListAccess}}index, {{/IndexBasedListAccess}}connectToken);
+      {{senderName}}.add(() -> {
+        handler.push(path, {{lastValueGetterCall}});
+      }{{#IndexBasedListAccess}}, index{{/IndexBasedListAccess}}, connectToken);
+      {{updateMethodName}}();
+      if (writeCurrentValue) {
+        {{writeMethodName}}({{#IndexBasedListAccess}}index, {{/IndexBasedListAccess}}connectToken);
+      }
+      success = true;
+      break;
     }
-    success = true;
-    break;
   {{/InUse}}
   {{/javaHandler}}
   {{#mqttHandler}}
   {{#InUse}}
-    case "mqtt":
+    case "mqtt": {
       final MqttHandler handler = {{attributeName}}().resolveHandler(uri);
       final String topic = {{attributeName}}().extractTopic(uri);
       {{senderName}}.add(() -> {
@@ -45,16 +46,18 @@ public boolean {{parentTypeName}}.{{connectMethodName}}(String {{connectParamete
       }
       success = true;
       break;
+    }
   {{/InUse}}
   {{/mqttHandler}}
   {{#restHandler}}
   {{#InUse}}
-    case "rest":
+    case "rest": {
       success = {{attributeName}}().newGETConnection(connectToken, () -> {
         {{updateMethodName}}({{#IndexBasedListAccess}}index{{/IndexBasedListAccess}});
         return new String({{lastValueGetterCall}});
       });
       break;
+    }
   {{/InUse}}
   {{/restHandler}}
     default:
diff --git a/ragconnect.tests/build.gradle b/ragconnect.tests/build.gradle
index c5e6f13..fb5e710 100644
--- a/ragconnect.tests/build.gradle
+++ b/ragconnect.tests/build.gradle
@@ -244,7 +244,7 @@ task compileVia(type: RagConnectTest) {
         inputFiles = [file('src/test/01-input/via/Test.relast'),
                       file('src/test/01-input/via/Test.connect')]
         rootNode = 'A'
-        protocols = ['mqtt', 'rest']
+        protocols = ['mqtt', 'rest', 'java']
         extraOptions = defaultRagConnectOptionsAnd()
     }
     relast {
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AttributeTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AttributeTest.java
index 7073e6d..ee1b7e5 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AttributeTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/AttributeTest.java
@@ -26,7 +26,6 @@ import static org.junit.jupiter.api.Assertions.*;
  * @author rschoene - Initial contribution
  */
 @Tag("Incremental")
-@Tag("New")
 public class AttributeTest extends AbstractMqttTest {
 
   private static final String TOPIC_WILDCARD = "attr/#";
diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/tree/AbstractTreeTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/tree/AbstractTreeTest.java
index 9b2e18f..c8f87c1 100644
--- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/tree/AbstractTreeTest.java
+++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/tree/AbstractTreeTest.java
@@ -16,7 +16,6 @@ import static org.junit.jupiter.api.Assertions.*;
  * @author rschoene - Initial contribution
  */
 @Tag("Tree")
-@Tag("New")
 public abstract class AbstractTreeTest extends AbstractMqttTest {
   protected static final String TOPIC_ALFA = "alfa";
   protected ReceiverData data;
-- 
GitLab