diff --git a/eraser-base/src/main/jastadd/ExternalHost.jrag b/eraser-base/src/main/jastadd/ExternalHost.jrag new file mode 100644 index 0000000000000000000000000000000000000000..a72b775358368e67cebe1587e1b5b5c1bb28aae6 --- /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 0000000000000000000000000000000000000000..58c6cab74be46d25bf4f0f68945fca51076b3a04 --- /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 60d38ad92abbfa758397b0a6880c704ab2968de6..1c256a56aa32bddda86f65a5ce951afdaf87d206 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 a1f43ee2e435fa99bb008075023234baf5d2b6f3..00f966b85c41f697c26e46696caff3908df2423a 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 4973711b3538887294d15b91b9b09c3cd5247a8b..5dec6c937eb459ea7a5abbc0b26d395a8dd7ce44 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 573db220b47f183800a8a0b434900fd58d0a2735..4ec6b8faf1d8f4ac6c942e4ce77cf750886cc41e 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 6573bd4d688f173dd7020147f7db6e0a6cfd4ef3..76476f13ba5ae17824cc2f1a5d1e26a9622f1bfc 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 2741a0550c033d4abb4760c267aafc2426a04604..95dd53770199b461679960acd542f5ed0486681a 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 cf477ff72e303415e47f42c939afe26cdfc4ed54..9251c2483448050e25a7bdff4153119b47f212d1 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 53079a7a5728796442f79a52549d584742cbd3cc..a90b4b61ae80dec1e640b4e42170ea877a265301 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 04ffc791882a6218d6293de112f5dd4c4beb7616..7bfe873c38cfa72d907ab98d0eb28f2ba4edc195 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 eda55f454f27382f3c97d105eafa9a14f9861e9d..3d16a465d8bb2e67e47b4a7ae3fea0f3122791db 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");