From b9c399cb09c19451ed6c3b2fcff574adee5e21e2 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Mon, 2 May 2022 18:47:49 +0200 Subject: [PATCH] fixed errors in JavaHandler --- .../src/main/resources/JavaHandler.mustache | 67 ++++++++----------- .../main/resources/receiveDefinition.mustache | 5 +- .../main/resources/sendDefinition.mustache | 1 + ragconnect.tests/build.gradle | 7 ++ .../tests/relation/RelationTest.java | 1 - 5 files changed, 40 insertions(+), 41 deletions(-) diff --git a/ragconnect.base/src/main/resources/JavaHandler.mustache b/ragconnect.base/src/main/resources/JavaHandler.mustache index bc73c91..9efd0ba 100644 --- a/ragconnect.base/src/main/resources/JavaHandler.mustache +++ b/ragconnect.base/src/main/resources/JavaHandler.mustache @@ -3,7 +3,8 @@ */ public class JavaHandler { public static JavaHandler JAVA_HANDLER_INSTANCE = null; - private java.util.Map<String, java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>>> callbackList = new java.util.concurrent.ConcurrentHashMap<>(); + private java.util.Map<String, java.util.List<java.util.function.BiConsumer<String, byte[]>>> callbackList = new java.util.concurrent.ConcurrentHashMap<>(); + private final java.util.Map<RagConnectToken, java.util.function.BiConsumer<String, byte[]>> tokensForRemoval = new java.util.HashMap<>(); private String name; private JavaHandler() { @@ -21,68 +22,58 @@ public class JavaHandler { return JAVA_HANDLER_INSTANCE; } - public String registerCallback(String topic, java.util.function.BiConsumer<String, byte[]> callback) { - {{logInfo}}("[JAVA_HANDLER] Registering new callback for {{log_}}.", topic); + private static String extractPath(java.net.URI uri) { + String path = uri.getPath(); + if (path.charAt(0) == '/') { + path = path.substring(1); + } + return path; + } + - String callbackUUID = java.util.UUID.randomUUID().toString(); + public boolean registerCallback(RagConnectToken connectToken, java.util.function.BiConsumer<String, byte[]> callback) { + String path = extractPath(connectToken.uri); + {{logInfo}}("[JAVA_HANDLER] Registering new callback for {{log_}}.", path); - java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> registeredCallbacks = getAllCallbacks().get(topic); + java.util.List<java.util.function.BiConsumer<String, byte[]>> registeredCallbacks = callbackList.get(path); if (registeredCallbacks == null) { - java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> newCallbackList = java.util.Collections.synchronizedList(new java.util.ArrayList<>()); - newCallbackList.add(new Pair<>(callbackUUID, callback)); - callbackList.put(topic, newCallbackList); - } else { - registeredCallbacks.add(new Pair<>(callbackUUID, callback)); + registeredCallbacks = java.util.Collections.synchronizedList(new java.util.ArrayList<>()); + callbackList.put(path, registeredCallbacks); } + registeredCallbacks.add(callback); + tokensForRemoval.put(connectToken, callback); - return callbackUUID; + return true; } - public boolean unregisterCallback(String path, String uuid) { - {{logInfo}}("[JAVA_HANDLER] Unregistering callback with uuid: {{log_}}", uuid + " on path: {{log_}}", path); - - java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(path); + public boolean unregisterCallback(RagConnectToken connectToken) { + String path = extractPath(connectToken.uri); + java.util.function.BiConsumer<String, byte[]> callback = tokensForRemoval.get(connectToken); + {{logInfo}}("[JAVA_HANDLER] Unregistering callback with uuid: on path: {{log_}}", path); - int count = 0; - - if (callbacks != null) { - for (Pair<String, java.util.function.BiConsumer<String, byte[]>> callbackPair : callbacks) { - if (callbackPair._1.equals(uuid)) { - callbacks.remove(count); - return true; - } else { - count++; - } - } - } - return false; + return callbackList.get(path).remove(callback); } public void close() { } - public boolean push(String topic, byte[] data) { + public boolean push(String path, byte[] data) { {{logDebug}}("[JAVA_HANDLER] Pushing a message."); String dataString = new String(data); {{logDebug}}("[JAVA_HANDLER] Data: {{log_}}", dataString); - java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>> callbacks = getAllCallbacks().get(topic); + java.util.List<java.util.function.BiConsumer<String, byte[]>> callbacks = callbackList.get(path); if (callbacks == null) { - {{logError}}("[JAVA_HANDLER] Could not publish message. No callback registered for topic {{log_}}", topic); + {{logError}}("[JAVA_HANDLER] Could not publish message. No callback registered for path {{log_}}", path); return false; } - for (Pair<String, java.util.function.BiConsumer<String, byte[]>> callbackPair : callbacks) { - {{logDebug}}("[JAVA_HANDLER] Calling callback: {{log_}}", callbackPair._1); - callbackPair._2.accept(topic, data); + for (java.util.function.BiConsumer<String, byte[]> callback : callbacks) { + callback.accept(path, data); } return true; } - - public java.util.Map<String, java.util.List<Pair<String, java.util.function.BiConsumer<String, byte[]>>>> getAllCallbacks() { - return callbackList; - } } diff --git a/ragconnect.base/src/main/resources/receiveDefinition.mustache b/ragconnect.base/src/main/resources/receiveDefinition.mustache index c4f070c..28a9bb5 100644 --- a/ragconnect.base/src/main/resources/receiveDefinition.mustache +++ b/ragconnect.base/src/main/resources/receiveDefinition.mustache @@ -96,7 +96,7 @@ private boolean {{parentTypeName}}.{{internalConnectMethodName}}(String {{connec {{#javaHandler}} {{#InUse}} case "java": - success = {{attributeName}}().registerCallback(path, consumer, connectToken); + success = {{attributeName}}().registerCallback(connectToken, consumer); break; {{/InUse}} {{/javaHandler}} @@ -139,7 +139,8 @@ public boolean {{parentTypeName}}.{{disconnectMethodName}}(String {{connectParam switch (scheme) { {{#javaHandler}} {{#InUse}} - case "java": return {{attributeName}}().unregisterCallback(uri.getPath(), connectTokens.get(this).get(uri).globalId); + case "java": disconnectingMethod = {{attributeName}}()::unregisterCallback; + break; {{/InUse}} {{/javaHandler}} {{#mqttHandler}} diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache index 1485c17..fae0fd2 100644 --- a/ragconnect.base/src/main/resources/sendDefinition.mustache +++ b/ragconnect.base/src/main/resources/sendDefinition.mustache @@ -17,6 +17,7 @@ public boolean {{parentTypeName}}.{{connectMethodName}}(String {{connectParamete if (writeCurrentValue) { {{writeMethodName}}({{#IndexBasedListAccess}}index, {{/IndexBasedListAccess}}connectToken); } + success = true; break; {{/InUse}} {{/javaHandler}} diff --git a/ragconnect.tests/build.gradle b/ragconnect.tests/build.gradle index d41a73c..5a2a82a 100644 --- a/ragconnect.tests/build.gradle +++ b/ragconnect.tests/build.gradle @@ -691,7 +691,14 @@ task compileJavaIncremental(type: RagConnectTest) { // --- Task order --- classes.dependsOn(':ragconnect.base:jar') +// TODO remove special handling of compileJavaIncremental once finished +compileJavaIncremental { + doFirst { + fileTree(dir: 'src/test/java-gen/javaInc/ast/', exclude: '.gitignore') + } +} compileJavaIncremental.outputs.upToDateWhen { false } +compileJavaIncremental.dependsOn(':ragconnect.base:assemble') // --- Misc --- static ArrayList<String> defaultRagConnectOptionsAnd(ArrayList<String> options = []) { diff --git a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java index a88f97f..d9c4979 100644 --- a/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java +++ b/ragconnect.tests/src/test/java/org/jastadd/ragconnect/tests/relation/RelationTest.java @@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.*; * @author rschoene - Initial contribution */ @Tag("Incremental") -@Tag("New") public class RelationTest extends AbstractMqttTest { private static final String TOPIC_WILDCARD = "rel/#"; -- GitLab