diff --git a/eraser-base/src/main/jastadd/Location.jrag b/eraser-base/src/main/jastadd/Location.jrag new file mode 100644 index 0000000000000000000000000000000000000000..b61b260c998e15a89712e00f3e2c2a44eb84759b --- /dev/null +++ b/eraser-base/src/main/jastadd/Location.jrag @@ -0,0 +1,10 @@ +aspect Location { + syn Optional<Location> Item.myLocation() { + if (this.hasLocation()) { + return Optional.of(this.getLocation()); + } else { + return JavaUtils.ifPresentOrElseReturn(linkedThing(), + thing -> thing.hasLocation() ? Optional.of(thing.getLocation()) : Optional.empty(), () -> Optional.empty()); + } + } +} diff --git a/eraser-base/src/main/jastadd/Location.relast b/eraser-base/src/main/jastadd/Location.relast new file mode 100644 index 0000000000000000000000000000000000000000..3cdf199776adc6eaa575b31f867a16bae891e8d5 --- /dev/null +++ b/eraser-base/src/main/jastadd/Location.relast @@ -0,0 +1,3 @@ +Location ::= <Label:String> SubLocation:Location ; +rel Location.Thing* <-> Thing.Location? ; +rel Location.Item* <-> Item.Location? ; diff --git a/eraser-base/src/main/jastadd/Navigation.jrag b/eraser-base/src/main/jastadd/Navigation.jrag index e75f39c8fa19496dc362f2f38625024691e01e76..9aadd37e8d5ed064a1b28ede6244f5746030a652 100644 --- a/eraser-base/src/main/jastadd/Navigation.jrag +++ b/eraser-base/src/main/jastadd/Navigation.jrag @@ -124,6 +124,16 @@ aspect Navigation { inh NeuralNetworkRoot OutputLayer.containingNeuralNetwork(); eq NeuralNetworkRoot.getOutputLayer().containingNeuralNetwork() = this; + //--- linkedThing --- + syn Optional<Thing> Item.linkedThing() { + if (!this.hasChannel()) { + return Optional.empty(); + } + Channel channel = this.getChannel(); + Thing thing = channel.containingThing(); + return Optional.of(thing); + } + //--- getRoot --- inh Root ASTNode.getRoot(); eq Root.getChannelCategory().getRoot() = this; diff --git a/eraser-base/src/main/jastadd/main.relast b/eraser-base/src/main/jastadd/main.relast index f9601870ae5ee144306040e355a5bdaf4017fd72..45dd621af675e7233511a2179baeb2fa54c29b25 100644 --- a/eraser-base/src/main/jastadd/main.relast +++ b/eraser-base/src/main/jastadd/main.relast @@ -1,6 +1,6 @@ // ---------------- Main ------------------------------ Root ::= Thing* Group* ThingType* ChannelType* ChannelCategory* ItemCategory* User* MqttRoot InfluxRoot - MachineLearningRoot Rule* ; + MachineLearningRoot Rule* Location* ; // ---------------- Users ------------------------------ User : LabelledModelElement ;