From 5dd8f4f6d0438a6ea479719e30a7814893df8720 Mon Sep 17 00:00:00 2001 From: SebastianEbert <sebastian.ebert@tu-dresden.de> Date: Fri, 22 Jan 2021 16:22:15 +0100 Subject: [PATCH] integration of java backend --- .../src/main/jastadd/Configuration.jadd | 1 + .../main/jastadd/intermediate/Generation.jadd | 5 ++++ .../MustacheNodesToYAML.jrag | 6 +++++ .../jastadd/ragconnect/compiler/Compiler.java | 7 ++++- .../src/main/resources/JavaHandler.jadd | 26 +++++++++---------- .../main/resources/receiveDefinition.mustache | 3 +++ .../main/resources/sendDefinition.mustache | 16 ++++++++++++ 7 files changed, 50 insertions(+), 14 deletions(-) diff --git a/ragconnect.base/src/main/jastadd/Configuration.jadd b/ragconnect.base/src/main/jastadd/Configuration.jadd index 8d3b16c..32f13d4 100644 --- a/ragconnect.base/src/main/jastadd/Configuration.jadd +++ b/ragconnect.base/src/main/jastadd/Configuration.jadd @@ -4,4 +4,5 @@ aspect Configuration { public static TypeDecl ASTNode.rootNode; public static boolean ASTNode.usesMqtt; public static boolean ASTNode.usesRest; + public static boolean ASTNode.usesJava; } diff --git a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd index 607f960..06d223e 100644 --- a/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd +++ b/ragconnect.base/src/main/jastadd/intermediate/Generation.jadd @@ -15,6 +15,9 @@ aspect AttributesForMustache { syn String MRagConnect.restHandlerAttribute() = "_restHandler"; syn String MRagConnect.restHandlerField() = "_restHandler"; + syn String MRagConnect.javaHandlerAttribute() = "_javaHandler"; + syn String MRagConnect.javaHandlerField() = "_javaHandler"; + // --- MEndpointDefinition --- syn String MEndpointDefinition.preemptiveExpectedValue(); syn String MEndpointDefinition.preemptiveReturn(); @@ -141,6 +144,8 @@ aspect AttributesForMustache { result.mqttHandlerAttribute(), result.mqttHandlerField(), usesMqtt)); result.addHandler(new MHandler("RestServerHandler", "new RestServerHandler(\"RagConnectREST\")", result.restHandlerAttribute(), result.restHandlerField(), usesRest)); + result.addHandler(new MHandler("JavaHandler", "JavaHandler.getInstance()", + result.javaHandlerAttribute(), result.javaHandlerField(), usesJava)); return result; } diff --git a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag index 337527d..4688e99 100644 --- a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag +++ b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag @@ -6,11 +6,17 @@ aspect MustacheNodesToYAML { root.put("closeMethod", closeMethod()); root.put("usesMqtt", usesMqtt); root.put("usesRest", usesRest); + root.put("usesJava", usesJava); + // mqtt root.put("mqttHandlerField", mqttHandlerField()); root.put("mqttHandlerAttribute", mqttHandlerAttribute()); root.put("mqttSetupWaitUntilReadyMethod", mqttSetupWaitUntilReadyMethod()); + // java + root.put("javaHandlerField", javaHandlerField()); + root.put("javaHandlerAttribute", javaHandlerAttribute()); + // rootTypeComponents ListElement rootTypeComponents = new ListElement(); for (MTypeComponent comp : getRootTypeComponentList()) { diff --git a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java index 28a3f20..8c649c4 100644 --- a/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java +++ b/ragconnect.base/src/main/java/org/jastadd/ragconnect/compiler/Compiler.java @@ -28,6 +28,7 @@ public class Compiler extends AbstractCompiler { private static final String OPTION_PROTOCOL_MQTT = "mqtt"; private static final String OPTION_PROTOCOL_REST = "rest"; + private static final String OPTION_PROTOCOL_JAVA = "java"; public Compiler() { super("ragconnect", true); @@ -81,6 +82,9 @@ public class Compiler extends AbstractCompiler { if (ASTNode.usesMqtt) { handlers.add("MqttHandler.jadd"); } + if (ASTNode.usesJava) { + handlers.add("JavaHandler.jadd"); + } if (ASTNode.usesRest) { handlers.add("RestHandler.jadd"); } @@ -158,8 +162,9 @@ public class Compiler extends AbstractCompiler { optionProtocols = addOption( new ValueOption("protocols", "Protocols to enable") .acceptMultipleValues(true) - .addDefaultValue(OPTION_PROTOCOL_MQTT, "Enable MQTT") + .addDefaultValue(OPTION_PROTOCOL_JAVA, "Enable Java") .addAcceptedValue(OPTION_PROTOCOL_REST, "Enable REST") + .addAcceptedValue(OPTION_PROTOCOL_MQTT, "Enable MQTT") ); optionPrintYaml = addOption( new BooleanOption("printYaml", "Print out YAML instead of generating files") diff --git a/ragconnect.base/src/main/resources/JavaHandler.jadd b/ragconnect.base/src/main/resources/JavaHandler.jadd index 86a81b7..44ac211 100644 --- a/ragconnect.base/src/main/resources/JavaHandler.jadd +++ b/ragconnect.base/src/main/resources/JavaHandler.jadd @@ -10,28 +10,28 @@ aspect JavaHandler { /** * Singleton class providing routing functionality for byte[] based message calls. */ - public class CallBackRouter { + public class JavaHandler { - public static org.jastadd.ragconnect.jrouter.CallBackRouter ROUTER_INSTANCE = null; + public static JavaHandler JAVA_HANDLER_INSTANCE = null; - private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(org.jastadd.ragconnect.jrouter.CallBackRouter.class); + private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(avaHandler.class); private Map<String, List<Consumer<byte[]>>> callbackList = new ConcurrentHashMap<>(); - private CallBackRouter() { + private JavaHandler() { } - public synchronized static org.jastadd.ragconnect.jrouter.CallBackRouter getInstance() { - if(ROUTER_INSTANCE == null) { - ROUTER_INSTANCE = new org.jastadd.ragconnect.jrouter.CallBackRouter(); + public synchronized static JavaHandler getInstance() { + if(JAVA_HANDLER_INSTANCE == null) { + JAVA_HANDLER_INSTANCE = new JavaHandler(); } - return ROUTER_INSTANCE; + return JAVA_HANDLER_INSTANCE; } - public void registerCallback(Consumer<byte[]> callback, String topic) { + public void registerCallback(String topic, Consumer<byte[]> callback) { - logger.debug("[ROUTER] Registering new callback."); + logger.debug("[JAVA_HANDLER] Registering new callback."); List<Consumer<byte[]>> registeredCallbacks = getAllCallbacks().get(topic); @@ -46,17 +46,17 @@ aspect JavaHandler { public boolean push(String topic, byte[] data) { - logger.debug("[ROUTER] Pushing a message."); + logger.debug("[JAVA_HANDLER] Pushing a message."); List<Consumer<byte[]>> callbacks = getAllCallbacks().get(topic); if(callbacks == null){ - logger.error("[ROUTER] Could not publish message. No callback registered for topic " + topic); + logger.error("[JAVA_HANDLER] Could not publish message. No callback registered for topic " + topic); return false; } for(Consumer<byte[]> callback : callbacks){ - logger.debug("[ROUTER] Calling callback: " + callback.toString()); + logger.debug("[JAVA_HANDLER] Calling callback: " + callback.toString()); callback.accept(data); } diff --git a/ragconnect.base/src/main/resources/receiveDefinition.mustache b/ragconnect.base/src/main/resources/receiveDefinition.mustache index 1dd0e0d..4abe2cb 100644 --- a/ragconnect.base/src/main/resources/receiveDefinition.mustache +++ b/ragconnect.base/src/main/resources/receiveDefinition.mustache @@ -11,6 +11,9 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam {{#usesMqtt}} case "mqtt": return {{mqttHandlerAttribute}}().newConnection(uri, consumer); {{/usesMqtt}} + {{#usesJava}} + case "mqtt": return {{javaHandlerAttribute}}().registerCallback(uri, consumer); + {{/usesJava}} {{#usesRest}} case "rest": return {{restHandlerAttribute}}().newPUTConnection(uri, input -> { consumer.accept(input.getBytes()); diff --git a/ragconnect.base/src/main/resources/sendDefinition.mustache b/ragconnect.base/src/main/resources/sendDefinition.mustache index 60f5efc..56fde1d 100644 --- a/ragconnect.base/src/main/resources/sendDefinition.mustache +++ b/ragconnect.base/src/main/resources/sendDefinition.mustache @@ -20,6 +20,22 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam } break; {{/usesMqtt}} + {{#usesJava}} + case "mqtt": + final MqttHandler handler = {{javaHandlerAttribute}}().resolveHandler(uri); + final String topic = {{javaHandlerAttribute}}().extractTopic(uri); + {{sender}} = () -> { + {{#loggingEnabledForWrites}} + System.out.println("[Send] {{tokenName}} = " + get{{tokenName}}() + " -> " + {{connectParameterName}}); + {{/loggingEnabledForWrites}} + handler.publish(topic, {{lastValue}}); + }; + {{updateMethod}}(); + if (writeCurrentValue) { + {{writeMethod}}(); + } + break; + {{/usesJava}} {{#usesRest}} case "rest": {{restHandlerAttribute}}().newGETConnection(uri, () -> { -- GitLab