Skip to content
Snippets Groups Projects
Commit 5dd8f4f6 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

integration of java backend

parent 52b7b1df
No related branches found
No related tags found
1 merge request!11Merge/dev to fork master merge
...@@ -4,4 +4,5 @@ aspect Configuration { ...@@ -4,4 +4,5 @@ aspect Configuration {
public static TypeDecl ASTNode.rootNode; public static TypeDecl ASTNode.rootNode;
public static boolean ASTNode.usesMqtt; public static boolean ASTNode.usesMqtt;
public static boolean ASTNode.usesRest; public static boolean ASTNode.usesRest;
public static boolean ASTNode.usesJava;
} }
...@@ -15,6 +15,9 @@ aspect AttributesForMustache { ...@@ -15,6 +15,9 @@ aspect AttributesForMustache {
syn String MRagConnect.restHandlerAttribute() = "_restHandler"; syn String MRagConnect.restHandlerAttribute() = "_restHandler";
syn String MRagConnect.restHandlerField() = "_restHandler"; syn String MRagConnect.restHandlerField() = "_restHandler";
syn String MRagConnect.javaHandlerAttribute() = "_javaHandler";
syn String MRagConnect.javaHandlerField() = "_javaHandler";
// --- MEndpointDefinition --- // --- MEndpointDefinition ---
syn String MEndpointDefinition.preemptiveExpectedValue(); syn String MEndpointDefinition.preemptiveExpectedValue();
syn String MEndpointDefinition.preemptiveReturn(); syn String MEndpointDefinition.preemptiveReturn();
...@@ -141,6 +144,8 @@ aspect AttributesForMustache { ...@@ -141,6 +144,8 @@ aspect AttributesForMustache {
result.mqttHandlerAttribute(), result.mqttHandlerField(), usesMqtt)); result.mqttHandlerAttribute(), result.mqttHandlerField(), usesMqtt));
result.addHandler(new MHandler("RestServerHandler", "new RestServerHandler(\"RagConnectREST\")", result.addHandler(new MHandler("RestServerHandler", "new RestServerHandler(\"RagConnectREST\")",
result.restHandlerAttribute(), result.restHandlerField(), usesRest)); result.restHandlerAttribute(), result.restHandlerField(), usesRest));
result.addHandler(new MHandler("JavaHandler", "JavaHandler.getInstance()",
result.javaHandlerAttribute(), result.javaHandlerField(), usesJava));
return result; return result;
} }
......
...@@ -6,11 +6,17 @@ aspect MustacheNodesToYAML { ...@@ -6,11 +6,17 @@ aspect MustacheNodesToYAML {
root.put("closeMethod", closeMethod()); root.put("closeMethod", closeMethod());
root.put("usesMqtt", usesMqtt); root.put("usesMqtt", usesMqtt);
root.put("usesRest", usesRest); root.put("usesRest", usesRest);
root.put("usesJava", usesJava);
// mqtt // mqtt
root.put("mqttHandlerField", mqttHandlerField()); root.put("mqttHandlerField", mqttHandlerField());
root.put("mqttHandlerAttribute", mqttHandlerAttribute()); root.put("mqttHandlerAttribute", mqttHandlerAttribute());
root.put("mqttSetupWaitUntilReadyMethod", mqttSetupWaitUntilReadyMethod()); root.put("mqttSetupWaitUntilReadyMethod", mqttSetupWaitUntilReadyMethod());
// java
root.put("javaHandlerField", javaHandlerField());
root.put("javaHandlerAttribute", javaHandlerAttribute());
// rootTypeComponents // rootTypeComponents
ListElement rootTypeComponents = new ListElement(); ListElement rootTypeComponents = new ListElement();
for (MTypeComponent comp : getRootTypeComponentList()) { for (MTypeComponent comp : getRootTypeComponentList()) {
......
...@@ -28,6 +28,7 @@ public class Compiler extends AbstractCompiler { ...@@ -28,6 +28,7 @@ public class Compiler extends AbstractCompiler {
private static final String OPTION_PROTOCOL_MQTT = "mqtt"; private static final String OPTION_PROTOCOL_MQTT = "mqtt";
private static final String OPTION_PROTOCOL_REST = "rest"; private static final String OPTION_PROTOCOL_REST = "rest";
private static final String OPTION_PROTOCOL_JAVA = "java";
public Compiler() { public Compiler() {
super("ragconnect", true); super("ragconnect", true);
...@@ -81,6 +82,9 @@ public class Compiler extends AbstractCompiler { ...@@ -81,6 +82,9 @@ public class Compiler extends AbstractCompiler {
if (ASTNode.usesMqtt) { if (ASTNode.usesMqtt) {
handlers.add("MqttHandler.jadd"); handlers.add("MqttHandler.jadd");
} }
if (ASTNode.usesJava) {
handlers.add("JavaHandler.jadd");
}
if (ASTNode.usesRest) { if (ASTNode.usesRest) {
handlers.add("RestHandler.jadd"); handlers.add("RestHandler.jadd");
} }
...@@ -158,8 +162,9 @@ public class Compiler extends AbstractCompiler { ...@@ -158,8 +162,9 @@ public class Compiler extends AbstractCompiler {
optionProtocols = addOption( optionProtocols = addOption(
new ValueOption("protocols", "Protocols to enable") new ValueOption("protocols", "Protocols to enable")
.acceptMultipleValues(true) .acceptMultipleValues(true)
.addDefaultValue(OPTION_PROTOCOL_MQTT, "Enable MQTT") .addDefaultValue(OPTION_PROTOCOL_JAVA, "Enable Java")
.addAcceptedValue(OPTION_PROTOCOL_REST, "Enable REST") .addAcceptedValue(OPTION_PROTOCOL_REST, "Enable REST")
.addAcceptedValue(OPTION_PROTOCOL_MQTT, "Enable MQTT")
); );
optionPrintYaml = addOption( optionPrintYaml = addOption(
new BooleanOption("printYaml", "Print out YAML instead of generating files") new BooleanOption("printYaml", "Print out YAML instead of generating files")
......
...@@ -10,28 +10,28 @@ aspect JavaHandler { ...@@ -10,28 +10,28 @@ aspect JavaHandler {
/** /**
* Singleton class providing routing functionality for byte[] based message calls. * 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 Map<String, List<Consumer<byte[]>>> callbackList = new ConcurrentHashMap<>();
private CallBackRouter() { private JavaHandler() {
} }
public synchronized static org.jastadd.ragconnect.jrouter.CallBackRouter getInstance() { public synchronized static JavaHandler getInstance() {
if(ROUTER_INSTANCE == null) { if(JAVA_HANDLER_INSTANCE == null) {
ROUTER_INSTANCE = new org.jastadd.ragconnect.jrouter.CallBackRouter(); 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); List<Consumer<byte[]>> registeredCallbacks = getAllCallbacks().get(topic);
...@@ -46,17 +46,17 @@ aspect JavaHandler { ...@@ -46,17 +46,17 @@ aspect JavaHandler {
public boolean push(String topic, byte[] data) { 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); List<Consumer<byte[]>> callbacks = getAllCallbacks().get(topic);
if(callbacks == null){ 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; return false;
} }
for(Consumer<byte[]> callback : callbacks){ for(Consumer<byte[]> callback : callbacks){
logger.debug("[ROUTER] Calling callback: " + callback.toString()); logger.debug("[JAVA_HANDLER] Calling callback: " + callback.toString());
callback.accept(data); callback.accept(data);
} }
......
...@@ -11,6 +11,9 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam ...@@ -11,6 +11,9 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam
{{#usesMqtt}} {{#usesMqtt}}
case "mqtt": return {{mqttHandlerAttribute}}().newConnection(uri, consumer); case "mqtt": return {{mqttHandlerAttribute}}().newConnection(uri, consumer);
{{/usesMqtt}} {{/usesMqtt}}
{{#usesJava}}
case "mqtt": return {{javaHandlerAttribute}}().registerCallback(uri, consumer);
{{/usesJava}}
{{#usesRest}} {{#usesRest}}
case "rest": return {{restHandlerAttribute}}().newPUTConnection(uri, input -> { case "rest": return {{restHandlerAttribute}}().newPUTConnection(uri, input -> {
consumer.accept(input.getBytes()); consumer.accept(input.getBytes());
......
...@@ -20,6 +20,22 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam ...@@ -20,6 +20,22 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam
} }
break; break;
{{/usesMqtt}} {{/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}} {{#usesRest}}
case "rest": case "rest":
{{restHandlerAttribute}}().newGETConnection(uri, () -> { {{restHandlerAttribute}}().newGETConnection(uri, () -> {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment