Skip to content
Snippets Groups Projects
Commit 22751792 authored by René Schöne's avatar René Schöne
Browse files

Extracting mqtt aspect for tiny template.

parent f8eb816f
No related tags found
No related merge requests found
Pipeline #6964 passed
...@@ -20,7 +20,7 @@ dependencies { ...@@ -20,7 +20,7 @@ dependencies {
implementation 'com.fasterxml.jackson.core:jackson-core:2.9.8' implementation 'com.fasterxml.jackson.core:jackson-core:2.9.8'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8' implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8'
// api 'org.jastadd:jastadd:2.3.4' // api 'org.jastadd:jastadd:2.3.4'
runtime 'org.jastadd:jastadd:2.3.4' implementation 'org.jastadd:jastadd:2.3.4'
api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11' api group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
} }
......
aspect Configuration { aspect Configuration {
public static boolean ASTNode.loggingEnabledForReads = false; public static boolean ASTNode.loggingEnabledForReads = false;
public static boolean ASTNode.loggingEnabledForWrites = false; public static boolean ASTNode.loggingEnabledForWrites = false;
protected static TypeDecl ASTNode.rootNode;
} }
...@@ -52,52 +52,38 @@ aspect AspectGeneration { ...@@ -52,52 +52,38 @@ aspect AspectGeneration {
public String Ros2Rag.generateAspect(String rootNodeName) { public String Ros2Rag.generateAspect(String rootNodeName) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
TypeDecl rootNode = getProgram().resolveTypeDecl(rootNodeName); rootNode = getProgram().resolveTypeDecl(rootNodeName);
generateMqttAspect(sb, rootNode); generateMqttAspect(sb);
generateGrammarExtension(sb); generateGrammarExtension(sb);
return sb.toString(); return sb.toString();
} }
public void Ros2Rag.generateMqttAspect(StringBuilder sb, TypeDecl rootNode) { public void Ros2Rag.generateMqttAspect(StringBuilder sb) {
String rootNodeName = rootNode.getName(); org.jastadd.tinytemplate.TinyTemplate tt;
sb.append("aspect MQTT {\n"); try {
sb.append(ind(1)).append("private MqttUpdater ").append(rootNodeName) tt = new org.jastadd.tinytemplate.TinyTemplate();
.append(".").append(mqttUpdaterField()).append(" = new MqttUpdater();\n"); tt.loadTemplates(Ros2Rag.class.getClassLoader().getResourceAsStream("mqtt.tt"));
} catch (org.jastadd.tinytemplate.TemplateParser.SyntaxError e) {
// mqttSetHost(String host) e.printStackTrace();
sb.append(ind(1)).append("public void ").append(rootNodeName).append(".") return;
.append(mqttSetHostMethod()).append("(String host) throws java.io.IOException {\n"); }
sb.append(ind(2)).append(mqttUpdaterField()).append(".setHost(host);\n"); org.jastadd.tinytemplate.SimpleContext context = new org.jastadd.tinytemplate.SimpleContext(tt, this);
sb.append(ind(1)).append("}\n"); context.bind("rootNodeName", rootNode.getName());
context.bind("RootTypeChildrenMqtt", emitRootTypeChildrenMqtt(tt));
// mqttSetHost(String host, int port) context.expand(context, "Ros2Rag.mqtt", sb);
sb.append(ind(1)).append("public void ").append(rootNodeName).append(".") }
.append(mqttSetHostMethod()).append("(String host, int port) throws java.io.IOException {\n");
sb.append(ind(2)).append(mqttUpdaterField()).append(".setHost(host, port);\n");
sb.append(ind(1)).append("}\n\n");
// mqttWaitUntilReady
sb.append(ind(1)).append("public boolean ").append(rootNodeName).append(".")
.append(mqttWaitUntilReadyMethod()).append("(long time, java.util.concurrent.TimeUnit unit) {\n");
sb.append(ind(2)).append("return ").append(mqttUpdaterField()).append(".waitUntilReady(time, unit);\n");
sb.append(ind(1)).append("}\n\n");
// mqttClose
sb.append(ind(1)).append("public void ").append(rootNodeName).append(".")
.append(mqttCloseMethod()).append("() {\n");
sb.append(ind(2)).append(mqttUpdaterField()).append(".close();\n");
sb.append(ind(1)).append("}\n\n");
// mqttUpdater public String Ros2Rag.emitRootTypeChildrenMqtt(org.jastadd.tinytemplate.TinyTemplate tt) {
sb.append(ind(1)).append("inh MqttUpdater ASTNode.").append(mqttUpdaterAttribute()).append("();\n"); StringBuilder sb = new StringBuilder();
org.jastadd.tinytemplate.SimpleContext context = new org.jastadd.tinytemplate.SimpleContext(tt, this);
context.bind("rootNodeName", rootNode.getName());
for (Component child : rootNode.getComponentList()) { for (Component child : rootNode.getComponentList()) {
if (child.isTypeComponent()) { if (child.isTypeComponent()) {
sb.append(ind(1)).append("eq ").append(rootNodeName) context.bind("Name", child.getName());
.append(".get").append(child.getName()).append("().") context.expand(context, "TypeComponent.mqtt", sb);
.append(mqttUpdaterAttribute()).append("() = ").append(mqttUpdaterField()).append(";\n");
} }
} }
sb.append("}\n\n"); return sb.toString();
} }
public void Ros2Rag.generateGrammarExtension(StringBuilder sb) { public void Ros2Rag.generateGrammarExtension(StringBuilder sb) {
......
Ros2Rag.mqtt [[
aspect MQTT {
private MqttUpdater $rootNodeName.#(mqttUpdaterField) = new MqttUpdater();
public void $rootNodeName.#(mqttSetHostMethod)(String host) throws java.io.IOException {
#(mqttUpdaterField).setHost(host);
}
public void $rootNodeName.#(mqttSetHostMethod)(String host, int port) throws java.io.IOException {
#(mqttUpdaterField).setHost(host, port);
}
public boolean $rootNodeName.#(mqttWaitUntilReadyMethod)(long time, java.util.concurrent.TimeUnit unit) {
return #(mqttUpdaterField).waitUntilReady(time, unit);
}
public void $rootNodeName.#(mqttCloseMethod)() {
#(mqttUpdaterField).close();
}
inh MqttUpdater ASTNode.#(mqttUpdaterAttribute)();
$RootTypeChildrenMqtt
}
]]
TypeComponent.mqtt [[
eq $rootNodeName.get$(Name)().#(mqttUpdaterAttribute)() = #(mqttUpdaterField);
]]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment