From c221cdeb93b807fd0fa9da6fefb95279b4d98fb8 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Tue, 30 Apr 2019 16:25:37 +0200 Subject: [PATCH] Begin with Location tree. --- eraser-base/src/main/jastadd/Location.jrag | 10 ++++++++++ eraser-base/src/main/jastadd/Location.relast | 3 +++ eraser-base/src/main/jastadd/Navigation.jrag | 10 ++++++++++ eraser-base/src/main/jastadd/main.relast | 2 +- 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 eraser-base/src/main/jastadd/Location.jrag create mode 100644 eraser-base/src/main/jastadd/Location.relast diff --git a/eraser-base/src/main/jastadd/Location.jrag b/eraser-base/src/main/jastadd/Location.jrag new file mode 100644 index 00000000..b61b260c --- /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 00000000..3cdf1997 --- /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 e75f39c8..9aadd37e 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 f9601870..45dd621a 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 ; -- GitLab