From 438f3df14df63a5843421d4a3405563265bdec0d Mon Sep 17 00:00:00 2001 From: Manuel Krombholz <s3866577@msx.tu-dresden.de> Date: Mon, 7 Jun 2021 02:20:38 +0200 Subject: [PATCH] ExternalHost computed in InfluxRoot and MQTTRoot --- .../src/main/jastadd/ExternalHost.jrag | 6 ++++ eraser-base/src/main/jastadd/InfluxRoot.jrag | 3 ++ eraser-base/src/main/jastadd/ItemHistory.jrag | 9 +++-- eraser-base/src/main/jastadd/Printing.jrag | 4 +-- eraser-base/src/main/jastadd/Util.jrag | 34 ------------------- eraser-base/src/main/jastadd/eraser.parser | 12 +++---- eraser-base/src/main/jastadd/main.relast | 2 +- eraser-base/src/main/jastadd/mqtt.jrag | 7 +++- eraser-base/src/main/jastadd/mqtt.relast | 2 +- .../tudresden/inf/st/eraser/InfluxTest.java | 3 +- .../de/tudresden/inf/st/eraser/MqttTests.java | 4 +-- .../eraser/integration/IntegrationMain.java | 4 +-- 12 files changed, 34 insertions(+), 56 deletions(-) create mode 100644 eraser-base/src/main/jastadd/ExternalHost.jrag create mode 100644 eraser-base/src/main/jastadd/InfluxRoot.jrag diff --git a/eraser-base/src/main/jastadd/ExternalHost.jrag b/eraser-base/src/main/jastadd/ExternalHost.jrag new file mode 100644 index 00000000..a72b7753 --- /dev/null +++ b/eraser-base/src/main/jastadd/ExternalHost.jrag @@ -0,0 +1,6 @@ +aspect ExternalHost { + syn boolean ExternalHost.exists() = getHostName()!=null && !getHostName().isEmpty(); + public ExternalHost ExternalHost.copyFrom(ExternalHost host) { + return setHostName(host.getHostName()).setPort(host.getPort()).setUserName(host.getUserName()).setPassword(host.getPassword()); + } +} \ No newline at end of file diff --git a/eraser-base/src/main/jastadd/InfluxRoot.jrag b/eraser-base/src/main/jastadd/InfluxRoot.jrag new file mode 100644 index 00000000..58c6cab7 --- /dev/null +++ b/eraser-base/src/main/jastadd/InfluxRoot.jrag @@ -0,0 +1,3 @@ +aspect InfluxRoot { + syn ExternalHost InfluxRoot.getHost() = new ExternalHost(); +} \ No newline at end of file diff --git a/eraser-base/src/main/jastadd/ItemHistory.jrag b/eraser-base/src/main/jastadd/ItemHistory.jrag index 60d38ad9..1c256a56 100644 --- a/eraser-base/src/main/jastadd/ItemHistory.jrag +++ b/eraser-base/src/main/jastadd/ItemHistory.jrag @@ -8,10 +8,7 @@ aspect ItemHistory { public static final InfluxRoot InfluxRoot.createDefault() { InfluxRoot result = new InfluxRoot(); - ExternalHost eh = new ExternalHost(); - eh.setUserName(DEFAULT_USER); - eh.setPassword(DEFAULT_PASSWORD); - result.setHost(eh); + result.getHost().setUserName(DEFAULT_USER).setPassword(DEFAULT_PASSWORD); result.setDbName(DEFAULT_DB_NAME); @@ -22,7 +19,7 @@ aspect ItemHistory { cache InfluxRoot.influxAdapter(); syn InfluxAdapter InfluxRoot.influxAdapter() { InfluxAdapter result; - if (hasHost()) { + if (getHost().exists()) { result = new InfluxAdapterImpl(); } else { result = new InfluxAdapterStub(); @@ -106,6 +103,8 @@ aspect ItemHistory { getRoot().getInfluxRoot().influxAdapter().write(pointFromState()); } + + //--- pointFromState --- protected abstract AbstractItemPoint Item.pointFromState(); protected AbstractItemPoint ItemWithBooleanState.pointFromState() { diff --git a/eraser-base/src/main/jastadd/Printing.jrag b/eraser-base/src/main/jastadd/Printing.jrag index a1f43ee2..00f966b8 100644 --- a/eraser-base/src/main/jastadd/Printing.jrag +++ b/eraser-base/src/main/jastadd/Printing.jrag @@ -195,7 +195,7 @@ aspect Printing { return new MemberPrinter("Mqtt") .addNonDefault("incoming", getIncomingPrefix()) .addNonDefault("outgoing", getOutgoingPrefix()) - .addOptional("host", hasHost() && !host.getHostName().isEmpty(), () -> host.prettyPrint()) + .addOptional("host", host.exists(), () -> host.prettyPrint()) .build(); } @@ -206,7 +206,7 @@ aspect Printing { .addNonDefault("user", host.getUserName(), DEFAULT_USER) .addNonDefault("password", host.getPassword(), DEFAULT_PASSWORD) .addNonDefault("dbName", getDbName(), DEFAULT_DB_NAME) - .addOptional("host", hasHost() && !host.getHostName().isEmpty(), () -> host.prettyPrint()) + .addOptional("host", host.exists(), () -> host.prettyPrint()) .build(); } diff --git a/eraser-base/src/main/jastadd/Util.jrag b/eraser-base/src/main/jastadd/Util.jrag index 4973711b..5dec6c93 100644 --- a/eraser-base/src/main/jastadd/Util.jrag +++ b/eraser-base/src/main/jastadd/Util.jrag @@ -4,40 +4,6 @@ aspect Util { // public static ExternalHost ExternalHost.createByName(String hostName) { // return new ExternalHost(hostName, 1883); // } - public void MqttRoot.updateHost(String hostName, int port, String username, String password) { - if (getHost()==null) { - setHost(new ExternalHost()); - } - if (hostName!=null) { - getHost().setHostName(hostName); - } - if (port>0) { - getHost().setPort(port); - } - if (username!=null) { - getHost().setUserName(username); - } - if (password!=null) { - getHost().setPassword(password); - } - flushCache(); - } - - - public void InfluxRoot.updateHost(String hostName, String username, String password) { - if (getHost()==null) { - setHost(new ExternalHost()); - } - if (hostName!=null) { - getHost().setHostName(hostName); - } - if (username!=null) { - getHost().setUserName(username); - } - if (password!=null) { - getHost().setPassword(password); - } - } public static ExternalHost ExternalHost.of(String hostName, int defaultPort) { return ExternalHost.of(hostName,defaultPort,null,null); diff --git a/eraser-base/src/main/jastadd/eraser.parser b/eraser-base/src/main/jastadd/eraser.parser index 573db220..4ec6b8fa 100644 --- a/eraser-base/src/main/jastadd/eraser.parser +++ b/eraser-base/src/main/jastadd/eraser.parser @@ -331,9 +331,9 @@ MqttRoot mqtt_root = MqttRoot mqtt_root_body = INCOMING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setIncomingPrefix(ensureTrailingSlash(n)); return mrb; :} | OUTGOING EQUALS TEXT.n mqtt_root_body.mrb {: mrb.setOutgoingPrefix(ensureTrailingSlash(n)); return mrb; :} - | HOST EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(n,0,null,null); return mrb; :} - | USER EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(null,0,n,null); return mrb; :} - | PASSWORD EQUALS TEXT.n mqtt_root_body.mrb {: mrb.updateHost(null,0,null,n); return mrb; :} + | HOST EQUALS TEXT.n mqtt_root_body.mrb {: mrb.getHost().setHostName(n); return mrb; :} + | USER EQUALS TEXT.n mqtt_root_body.mrb {: mrb.getHost().setUserName(n); return mrb; :} + | PASSWORD EQUALS TEXT.n mqtt_root_body.mrb {: mrb.getHost().setPassword(n); return mrb; :} | {: return new MqttRoot(); :} ; @@ -345,10 +345,10 @@ InfluxRoot influx_root = // Influx: user="" password="" dbName="" host="" ; InfluxRoot influx_root_body = - USER EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(null,n,null); return irb; :} - | PASSWORD EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(null,null,n); return irb; :} + USER EQUALS TEXT.n influx_root_body.irb {: irb.getHost().setUserName(n); return irb; :} + | PASSWORD EQUALS TEXT.n influx_root_body.irb {: irb.getHost().setPassword(n); return irb; :} | DB_NAME EQUALS TEXT.n influx_root_body.irb {: irb.setDbName(n); return irb; :} - | HOST EQUALS TEXT.n influx_root_body.irb {: irb.updateHost(n,null,null); return irb; :} + | HOST EQUALS TEXT.n influx_root_body.irb {: irb.getHost().setHostName(n);; return irb; :} | {: return InfluxRoot.createDefault(); :} ; diff --git a/eraser-base/src/main/jastadd/main.relast b/eraser-base/src/main/jastadd/main.relast index 6573bd4d..76476f13 100644 --- a/eraser-base/src/main/jastadd/main.relast +++ b/eraser-base/src/main/jastadd/main.relast @@ -9,4 +9,4 @@ rel Root.CurrentUser? -> User ; ExternalHost ::= <HostName:String> <Port:int> <UserName:String> <Password:String>; // ---------------- InfluxDB ------------------------------ -InfluxRoot ::= <DbName:String> [Host:ExternalHost] ; +InfluxRoot ::= <DbName:String> /Host:ExternalHost/ ; diff --git a/eraser-base/src/main/jastadd/mqtt.jrag b/eraser-base/src/main/jastadd/mqtt.jrag index 2741a055..95dd5377 100644 --- a/eraser-base/src/main/jastadd/mqtt.jrag +++ b/eraser-base/src/main/jastadd/mqtt.jrag @@ -33,6 +33,7 @@ aspect MQTT { } } + //--- getIncomingTopic --- syn String MqttTopic.getIncomingTopic() = getMqttRoot().getIncomingPrefix() + getTopicString(); @@ -43,7 +44,7 @@ aspect MQTT { cache MqttRoot.getMqttSender(); syn MQTTSender MqttRoot.getMqttSender() { MQTTSender result; - if (hasHost()) { + if (getHost().exists()) { result = new MQTTSenderImpl(); } else { result = new MQTTSenderStub(); @@ -80,6 +81,8 @@ aspect MQTT { item.setTopic(getRoot().getMqttRoot().getOrCreateMqttTopic(item.getTopic().getTopicString())); } + + public MqttTopic MqttRoot.getOrCreateMqttTopic(String topicString) { return resolveTopicSuffix(topicString).orElseGet(() -> { MqttTopic result = new MqttTopic(); @@ -89,4 +92,6 @@ aspect MQTT { }); } +syn ExternalHost MqttRoot.getHost() = new ExternalHost(); + } diff --git a/eraser-base/src/main/jastadd/mqtt.relast b/eraser-base/src/main/jastadd/mqtt.relast index cf477ff7..9251c248 100644 --- a/eraser-base/src/main/jastadd/mqtt.relast +++ b/eraser-base/src/main/jastadd/mqtt.relast @@ -1,4 +1,4 @@ // ---------------- MQTT ------------------------------ -MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> [Host:ExternalHost] ; +MqttRoot ::= Topic:MqttTopic* <IncomingPrefix:String> <OutgoingPrefix:String> /Host:ExternalHost/ ; MqttTopic ::= <TopicString:String> ; rel Item.Topic? <-> MqttTopic.Item* ; diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java index 53079a7a..a90b4b61 100644 --- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java +++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/InfluxTest.java @@ -162,7 +162,6 @@ public class InfluxTest { InfluxRoot influxRoot; if (useStub) { influxRoot = InfluxRoot.createDefault(); - influxRoot.setHostOpt(new Opt<>()); // now a SenderStub is being used ((InfluxAdapterStub) influxRoot.influxAdapter()).setCallback( point -> points.add((DoubleStatePoint) point)); @@ -170,7 +169,7 @@ public class InfluxTest { influxRoot = InfluxRoot.createDefault(); // use container running influx influxRoot.setDbName(InfluxTest.class.getSimpleName()); - influxRoot.setHost(new ExternalHost().setHostName(getInfluxHost())); + influxRoot.getHost().setHostName(getInfluxHost()); } mai.model.getRoot().setInfluxRoot(influxRoot); assumeTrue(influxRoot.influxAdapter().isConnected()); diff --git a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java index 04ffc791..7bfe873c 100644 --- a/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java +++ b/eraser-base/src/test/java/de/tudresden/inf/st/eraser/MqttTests.java @@ -175,11 +175,11 @@ public class MqttTests { mqttRoot.setIncomingPrefix("inc"); mqttRoot.setOutgoingPrefix(outgoingPrefix); if (useStub) { - mqttRoot.setHostOpt(new Opt<>()); + // now a SenderStub is being used ((MQTTSenderStub) mqttRoot.getMqttSender()).setCallback(((topic, message, qos) -> messages.add(message))); } else { - mqttRoot.setHost(ExternalHost.of(getMqttHost(), 1883)); + mqttRoot.getHost().setHostName(getMqttHost()).setPort(1883); } MqttTopic a = createAndAddMqttTopic(mqttRoot, firstPart); MqttTopic ab = createAndAddMqttTopic(mqttRoot, firstPart + "/" + secondPart); diff --git a/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java b/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java index eda55f45..3d16a465 100644 --- a/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java +++ b/integration/src/main/java/de/tudresden/inf/st/eraser/integration/IntegrationMain.java @@ -47,7 +47,7 @@ public class IntegrationMain { InputStream inputStream = IntegrationMain.class.getResourceAsStream(filename); String host = "localhost"; MqttRoot mqttRoot = new MqttRoot(); - mqttRoot.setHost(new ExternalHost().setHostName(host)); + mqttRoot.getHost().setHostName(host); // columns: time,topic,qos,message try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream); CSVReader reader = new CSVReaderBuilder(inputStreamReader) @@ -90,7 +90,7 @@ public class IntegrationMain { // Root model = importFromLocalFile(); logger.debug("Got model: {}", model.getSmartHomeEntityModel().description()); MqttRoot mqttRoot = new MqttRoot(); - mqttRoot.updateHost("localhost",-1,null,null); + mqttRoot.getHost().setHostName("localhost"); mqttRoot.setIncomingPrefix("oh2/out/"); MqttTopic irisStateTopic = new MqttTopic(); irisStateTopic.setTopicString("iris1_item/state"); -- GitLab