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

Merge branch 'feature/java-backend' into 'fork-master'

Feature/java backend

See merge request jastadd/jastadd-ceti/ragconnect!1
parents ae2e1755 e4473f27
No related branches found
No related tags found
1 merge request!11Merge/dev to fork master merge
This commit is part of merge request !11. Comments created here will be created in the context of that merge request.
...@@ -3,7 +3,7 @@ variables: ...@@ -3,7 +3,7 @@ variables:
stages: stages:
- build - build
- publish # - publish
before_script: before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle - export GRADLE_USER_HOME=`pwd`/.gradle
...@@ -22,22 +22,22 @@ build: ...@@ -22,22 +22,22 @@ build:
paths: paths:
- "/builds/jastadd/ragconnect/build/libs/ragconnect-*.jar" - "/builds/jastadd/ragconnect/build/libs/ragconnect-*.jar"
publish: #publish:
image: openjdk:11 # image: openjdk:11
stage: publish # stage: publish
script: # script:
- "./gradlew publish" # - "./gradlew publish"
only: # only:
- master # - master
pages: #pages:
image: python:3.7-alpine # image: python:3.7-alpine
stage: publish # stage: publish
script: # script:
- pip install -U sphinx sphinx-rtd-theme recommonmark sphinxemoji sphinx-markdown-tables # - pip install -U sphinx sphinx-rtd-theme recommonmark sphinxemoji sphinx-markdown-tables
- sphinx-build -b html pages/ public # - sphinx-build -b html pages/ public
artifacts: # artifacts:
paths: # paths:
- public # - public
only: # only:
- master # - master
...@@ -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")
......
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
aspect JavaHandler {
/**
* Singleton class providing routing functionality for byte[] based message calls.
*/
public class JavaHandler {
public static JavaHandler JAVA_HANDLER_INSTANCE = null;
private final org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(JavaHandler.class);
private Map<String, List<Consumer<byte[]>>> callbackList = new ConcurrentHashMap<>();
private JavaHandler() {
}
public synchronized static JavaHandler getInstance() {
if(JAVA_HANDLER_INSTANCE == null) {
JAVA_HANDLER_INSTANCE = new JavaHandler();
}
return JAVA_HANDLER_INSTANCE;
}
public void registerCallback(String topic, Consumer<byte[]> callback) {
logger.debug("[JAVA_HANDLER] Registering new callback.");
List<Consumer<byte[]>> registeredCallbacks = getAllCallbacks().get(topic);
if(registeredCallbacks == null){
List<Consumer<byte[]>> newCallbackList = Collections.synchronizedList(new ArrayList<>());
newCallbackList.add(callback);
callbackList.put(topic, newCallbackList);
} else {
registeredCallbacks.add(callback);
}
}
public boolean push(String topic, byte[] data) {
logger.debug("[JAVA_HANDLER] Pushing a message.");
List<Consumer<byte[]>> callbacks = getAllCallbacks().get(topic);
if(callbacks == null){
logger.error("[JAVA_HANDLER] Could not publish message. No callback registered for topic " + topic);
return false;
}
for(Consumer<byte[]> callback : callbacks){
logger.debug("[JAVA_HANDLER] Calling callback: " + callback.toString());
callback.accept(data);
}
return true;
}
public Map<String, List<Consumer<byte[]>>> getAllCallbacks() {
return callbackList;
}
}
}
\ No newline at end of file
...@@ -11,8 +11,11 @@ public boolean {{parentTypeName}}.{{connectMethod}}(String {{connectParameterNam ...@@ -11,8 +11,11 @@ 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 "java": return {{restHandlerAttribute}}().newPUTConnection(uri, input -> {
consumer.accept(input.getBytes()); consumer.accept(input.getBytes());
}); });
{{/usesRest}} {{/usesRest}}
......
...@@ -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 "java":
final JavaHandler 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