From 20b86aea08cbc74654cd4fb3da1a68acaa99dd30 Mon Sep 17 00:00:00 2001 From: Johannes Mey <johannes.mey@tu-dresden.de> Date: Fri, 6 Jul 2018 15:53:05 +0200 Subject: [PATCH] update queries to new format, synchronize namelookup and optimized --- .../src/main/jastadd/Helpers.jrag | 1 + .../src/main/jastadd/TrainPrinting.jadd | 4 - .../src/main/jastadd/Helpers.jrag | 28 +------ .../src/main/jastadd/References.jadd | 17 ++++ .../src/main/jastadd/TreeNavigation.jrag | 81 ++++++++++--------- .../jastadd/queries/RouteSensorMatch.jrag | 3 +- .../jastadd/queries/SemaphoreNeighbors.jrag | 2 +- .../src/main/jastadd/train.ast | 28 ++++--- .../deserializer/ASTNodeDeserializer.java | 1 + ...TransformationInjectConnectedSegments.java | 16 ++-- ...astaddTransformationInjectRouteSensor.java | 23 ++---- ...ddTransformationInjectSwitchMonitored.java | 15 ++-- ...TransformationRepairConnectedSegments.java | 8 +- ...astaddTransformationRepairRouteSensor.java | 4 +- ...TransformationRepairSemaphoreNeighbor.java | 3 +- ...ddTransformationRepairSwitchMonitored.java | 11 ++- .../src/main/jastadd/Helpers.jrag | 28 +------ .../src/main/jastadd/References.jadd | 17 ++++ .../src/main/jastadd/TrainPrinting.jadd | 27 ------- .../src/main/jastadd/TreeNavigation.jrag | 60 ++++++++------ .../jastadd/queries/SwitchMonitoredMatch.jrag | 19 ++--- .../src/main/jastadd/train.ast | 33 ++++---- .../train/jastadd/driver/JastaddDriver.java | 2 +- .../deserializer/ASTNodeDeserializer.java | 8 +- ...TransformationInjectConnectedSegments.java | 14 ++-- ...ddTransformationInjectSwitchMonitored.java | 3 +- ...TransformationRepairConnectedSegments.java | 8 +- ...astaddTransformationRepairRouteSensor.java | 2 +- ...TransformationRepairSemaphoreNeighbor.java | 2 +- ...ddTransformationRepairSwitchMonitored.java | 10 ++- .../src/main/jastadd/Train.relast | 19 +++++ .../src/main/jastadd/TreeNavigation.jrag | 33 ++++++++ ...TransformationInjectConnectedSegments.java | 9 +-- .../build.gradle | 2 +- .../build.gradle | 2 +- 35 files changed, 264 insertions(+), 279 deletions(-) rename {trainbenchmark-tool-jastadd-specialized-base => trainbenchmark-tool-jastadd-base}/src/main/jastadd/Helpers.jrag (99%) rename {trainbenchmark-tool-jastadd-namelookup-base => trainbenchmark-tool-jastadd-base}/src/main/jastadd/TrainPrinting.jadd (86%) create mode 100644 trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/References.jadd create mode 100644 trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/References.jadd delete mode 100644 trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TrainPrinting.jadd create mode 100644 trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast diff --git a/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Helpers.jrag b/trainbenchmark-tool-jastadd-base/src/main/jastadd/Helpers.jrag similarity index 99% rename from trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Helpers.jrag rename to trainbenchmark-tool-jastadd-base/src/main/jastadd/Helpers.jrag index 875161e6d..d8c6010ab 100644 --- a/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Helpers.jrag +++ b/trainbenchmark-tool-jastadd-base/src/main/jastadd/Helpers.jrag @@ -24,4 +24,5 @@ aspect Helpers { inh RailwayContainer RailwayElement.getRoot(); eq RailwayContainer.getRoute(int i).getRoot() = this; eq RailwayContainer.getRegion(int i).getRoot() = this; + } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TrainPrinting.jadd b/trainbenchmark-tool-jastadd-base/src/main/jastadd/TrainPrinting.jadd similarity index 86% rename from trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TrainPrinting.jadd rename to trainbenchmark-tool-jastadd-base/src/main/jastadd/TrainPrinting.jadd index 19df865b8..2e7ffd3ff 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TrainPrinting.jadd +++ b/trainbenchmark-tool-jastadd-base/src/main/jastadd/TrainPrinting.jadd @@ -1,9 +1,5 @@ aspect TrainPrinting { - public String Name.getNodeTitle() { - return this.getClass().getSimpleName() + " " + getValue(); - } - public String Segment.getNodeTitle() { return this.getClass().getSimpleName() + " with length " + getLength(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/Helpers.jrag b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/Helpers.jrag index 417b3592d..0e0265411 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/Helpers.jrag +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/Helpers.jrag @@ -1,33 +1,7 @@ aspect Helpers { - - syn boolean TrackElement.isSwitch(); - eq Switch.isSwitch() = true; - eq Segment.isSwitch() = false; - - syn Switch TrackElement.asSwitch(); - eq Switch.asSwitch() = this; - eq Segment.asSwitch() = null; - - syn boolean TrackElement.isSegment(); - eq Switch.isSegment() = false; - eq Segment.isSegment() = true; - - syn Segment TrackElement.asSegment(); - eq Switch.asSegment() = null; - eq Segment.asSegment() = this; - - inh Region TrackElement.containingRegion(); - eq Region.getTrackElement(int i).containingRegion() = this; - - syn int RailwayElement.id() = getId().getValue(); - - inh RailwayContainer RailwayElement.getRoot(); - eq RailwayContainer.getRoute(int i).getRoot() = this; - eq RailwayContainer.getRegion(int i).getRoot() = this; - inh RailwayContainer Ref.getRoot(); syn boolean Ref.references(RailwayElement node) { - return this.getValue() == node.getId().getValue(); + return this.getValue() == node.getId(); } } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/References.jadd b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/References.jadd new file mode 100644 index 000000000..dda89d253 --- /dev/null +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/References.jadd @@ -0,0 +1,17 @@ +aspect RefGenerator { + public SensorRef Sensor.createRef() { + return new SensorRef(this.id()); + } + + public SemaphoreRef Semaphore.createRef() { + return new SemaphoreRef(this.id()); + } + + public SwitchRef Switch.createRef() { + return new SwitchRef(this.id()); + } + + public SegmentRef Segment.createRef() { + return new SegmentRef(this.id()); + } +} diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag index d7056b768..98f2240d5 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/TreeNavigation.jrag @@ -53,6 +53,16 @@ aspect TreeNavigation { return sensors; } + syn TrackElement TrackElementRef.getTrackElement(); + eq SwitchRef.getTrackElement() = getSwitch(); + eq SegmentRef.getTrackElement() = getSegment(); + + syn boolean TrackElementRef.isSwitchRef() = false; + eq SwitchRef.isSwitchRef() = true; + + syn boolean TrackElementRef.isSegmentRef() = false; + eq SegmentRef.isSegmentRef() = true; + // maps from ids to things syn Map<Integer, Switch> RailwayContainer.switchMap() { @@ -101,28 +111,19 @@ aspect TreeNavigation { // reference resolving - syn TrackElement Ref.asTrackElement() { - TrackElement result = getRoot().segmentMap().get(this.getValue()); - if (result == null) { - return getRoot().switchMap().get(this.getValue()); - } else { - return result; - } - } - - syn Segment Ref.asSegment() { + syn Segment TrackElementRef.getSegment() { return getRoot().segmentMap().get(this.getValue()); } - syn Switch Ref.asSwitch() { + syn Switch TrackElementRef.getSwitch() { return getRoot().switchMap().get(this.getValue()); } - syn Sensor Ref.asSensor() { + syn Sensor SensorRef.getSensor() { return getRoot().sensorMap().get(this.getValue()); } - syn Semaphore Ref.asSemaphore() { + syn Semaphore SemaphoreRef.getSemaphore() { return getRoot().semaphoreMap().get(this.getValue()); } @@ -131,16 +132,16 @@ aspect TreeNavigation { syn Collection<TrackElement> Sensor.monitoredElements() { java.util.List<TrackElement> trackElements = new ArrayList<>(); - for (Ref ref : getMonitoredElementList()) { - trackElements.add(ref.asTrackElement()); + for (TrackElementRef ref : getMonitoredElementList()) { + trackElements.add(ref.getTrackElement()); } return trackElements; } syn Collection<Segment> Sensor.monitoredSegments() { java.util.List<Segment> segments = new ArrayList<>(); - for (Ref ref : getMonitoredElementList()) { - Segment segment = ref.asSegment(); + for (TrackElementRef ref : getMonitoredElementList()) { + Segment segment = ref.getTrackElement().asSegment(); if (segment != null) { segments.add(segment); } @@ -150,8 +151,8 @@ aspect TreeNavigation { syn Collection<Switch> Sensor.monitoredSwitches() { java.util.List<Switch> switches = new ArrayList<>(); - for (Ref ref : getMonitoredElementList()) { - Switch sw = ref.asSwitch(); + for (TrackElementRef ref : getMonitoredElementList()) { + Switch sw = ref.getTrackElement().asSwitch(); if (sw != null) { switches.add(sw); } @@ -160,25 +161,25 @@ aspect TreeNavigation { } syn TrackElement Sensor.monitoredElement(int i) { - return getMonitoredElement(i).asTrackElement(); + return getMonitoredElement(i).getTrackElement(); } syn Sensor Route.requiredSensor(int i) { - return getRequiredSensor(i).asSensor(); + return getRequiredSensor(i).getSensor(); } syn Collection<TrackElement> TrackElement.connectsTos() { java.util.List<TrackElement> trackElements = new ArrayList<>(); - for (Ref teRef : getConnectsToList()) { - trackElements.add(teRef.asTrackElement()); + for (TrackElementRef teRef : getConnectedElementList()) { + trackElements.add(teRef.getTrackElement()); } return trackElements; } syn Collection<Segment> TrackElement.connectsToSegments() { java.util.List<Segment> segments = new ArrayList<>(); - for (Ref teRef : getConnectsToList()) { - Segment segment = teRef.asSegment(); + for (TrackElementRef teRef : getConnectedElementList()) { + Segment segment = teRef.getTrackElement().asSegment(); if (segment != null) { segments.add(segment); } @@ -188,15 +189,15 @@ aspect TreeNavigation { syn Collection<Sensor> Route.requiredSensors() { java.util.List<Sensor> sensors = new ArrayList<>(); - for (Ref sensorRef : getRequiredSensorList()) { - sensors.add(sensorRef.asSensor()); + for (SensorRef sensorRef : getRequiredSensorList()) { + sensors.add(sensorRef.getSensor()); } return sensors; } syn Semaphore Route.entry() { if (hasEntry()) { - return getEntry().asSemaphore(); + return getEntry().getSemaphore(); } else { return null; } @@ -204,34 +205,34 @@ aspect TreeNavigation { syn Semaphore Route.exit() { if (hasExit()) { - return getExit().asSemaphore(); + return getExit().getSemaphore(); } else { return null; } } syn Switch SwitchPosition.target() { - return getTarget().asSwitch(); + return getTarget().getSwitch(); } - syn Collection<Sensor> TrackElement.monitoringSensors() { - return getRoot().monitoringSensorsMap().get(this.id()); + syn Collection<Sensor> TrackElement.monitoredBy() { + return getRoot().monitoredByMap().get(this.id()); } - syn Map<Integer,Set<Sensor>> RailwayContainer.monitoringSensorsMap() { - Map<Integer,Set<Sensor>> sensorMap = new java.util.HashMap<Integer,Set<Sensor>>(); + syn Map<Integer,Set<Sensor>> RailwayContainer.monitoredByMap() { + Map<Integer,Set<Sensor>> sensorMap = new java.util.HashMap<>(); // fill the keys for (Region region: getRegionList()) { for (TrackElement trackElement: region.getTrackElementList()) { - sensorMap.put(trackElement.id(), new java.util.HashSet()); + sensorMap.put(trackElement.id(), new java.util.HashSet<>()); } } // update the values for (Sensor sensor : sensors()) { - for (Ref teRef : sensor.getMonitoredElementList()) { - sensorMap.get(teRef.getValue()).add(sensor); + for (TrackElementRef trackElementRef : sensor.getMonitoredElementList()) { + sensorMap.get(trackElementRef.getValue()).add(sensor); } } @@ -243,16 +244,16 @@ aspect TreeNavigation { } syn Map<Integer,Set<Route>> RailwayContainer.requiringRoutesMap() { - Map<Integer,Set<Route>> routeMap = new java.util.HashMap<Integer,Set<Route>>(); + Map<Integer,Set<Route>> routeMap = new java.util.HashMap<>(); // fill the keys for (Sensor sensor: sensors()) { - routeMap.put(sensor.id(), new java.util.HashSet()); + routeMap.put(sensor.id(), new java.util.HashSet<>()); } // update the values for (Route route : getRouteList()) { - for (Ref sensorRef : route.getRequiredSensorList()) { + for (SensorRef sensorRef : route.getRequiredSensorList()) { routeMap.get(sensorRef.getValue()).add(route); } } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/RouteSensorMatch.jrag b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/RouteSensorMatch.jrag index 64c6184a1..e0218601c 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/RouteSensorMatch.jrag +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/RouteSensorMatch.jrag @@ -15,8 +15,7 @@ aspect Queries { Collection<Sensor> requiredSensors = requiredSensors(); for (SwitchPosition sp : getSwitchPositionList()) { Switch sw = sp.target(); - java.util.Collection<Sensor> sensors = sw.monitoringSensors(); - for (Sensor sensor : sensors) { + for (Sensor sensor : sw.monitoredBy()) { boolean validSensor = false; for (Sensor sensor2 : requiredSensors) { if (sensor2 == sensor) { diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/SemaphoreNeighbors.jrag b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/SemaphoreNeighbors.jrag index e89eedc8e..48fde84b6 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/SemaphoreNeighbors.jrag +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/queries/SemaphoreNeighbors.jrag @@ -21,7 +21,7 @@ aspect Queries { for (Sensor sensor1 : this.requiredSensors()) { for (TrackElement te1 : sensor1.monitoredElements()) { for (TrackElement te2 : te1.connectsTos()) { - for (Sensor sensor2 : te2.monitoringSensors()) { + for (Sensor sensor2 : te2.monitoredBy()) { for (Route route2 : sensor2.requiringRoutes()) { if (this != route2) { if (!route2.hasEntry() || route2.getEntry().getValue() != exitRef.getValue()) { diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast index ee09488a2..e601961e5 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/jastadd/train.ast @@ -1,17 +1,19 @@ -// root: RailwayContainer ::= Route* Region* ; -abstract RailwayElement ::= Id ; -Region:RailwayElement ::= TrackElement* Sensor* ; -Semaphore:RailwayElement ::= <Signal:Signal> ; -Route:RailwayElement ::= <Active:boolean> SwitchPosition* RequiredSensor:Ref* [Entry:Ref] [Exit:Ref] ; -SwitchPosition:RailwayElement ::= <Position:Position> Target:Ref ; -Sensor:RailwayElement ::= MonitoredElement:Ref* ; +abstract RailwayElement ::= <Id:int>; +Region : RailwayElement ::= TrackElement* Sensor*; +Semaphore : RailwayElement ::= <Signal:Signal>; +Route : RailwayElement ::= <Active:boolean> SwitchPosition* RequiredSensor:SensorRef* [Entry:SemaphoreRef] [Exit:SemaphoreRef]; +SwitchPosition : RailwayElement ::= <Position:Position> Target:SwitchRef; +Sensor : RailwayElement ::= MonitoredElement:TrackElementRef*; -abstract TrackElement:RailwayElement ::= ConnectsTo:Ref* ; -Segment:TrackElement ::= <Length:int> Semaphore* ; -Switch:TrackElement ::= <CurrentPosition:Position> ; +abstract TrackElement:RailwayElement ::= ConnectedElement:TrackElementRef*; +Segment:TrackElement ::= <Length:int> Semaphore*; +Switch:TrackElement ::= <CurrentPosition:Position>; -abstract Name ::= <Value:int> ; -Id:Name ; -Ref:Name ; +abstract Ref ::= <Value:int> ; +SensorRef : Ref; +SemaphoreRef : Ref; +abstract TrackElementRef : Ref; +SwitchRef : TrackElementRef; +SegmentRef : TrackElementRef; \ No newline at end of file diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java index 4603893ef..7ad3c035e 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java @@ -63,6 +63,7 @@ public class ASTNodeDeserializer extends StdDeserializer<ASTNode> { // get the type we want to create String type = node.get("t").asText(); + Class typeClass; try { typeClass = Class.forName(packageName + "." + type); diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java index 61b4838c8..2d5edaa3b 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java @@ -19,26 +19,26 @@ public class JastaddTransformationInjectConnectedSegments<TJastaddDriver extends public void activate(final Collection<JastaddConnectedSegmentsInjectMatch> matches) { for (final JastaddConnectedSegmentsInjectMatch match : matches) { // create segment2 - List<Ref> connectedSegments = new List<>(); - connectedSegments.add(new Ref(match.getSegment3().id())); + List<TrackElementRef> connectedSegments = new List<>(); + connectedSegments.add(match.getSegment3().createRef()); List<Semaphore> semaphores = new List<>(); - Segment segment2 = new Segment(new Id(driver.nextId()), connectedSegments, TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH, semaphores); + Segment segment2 = new Segment(driver.nextId(), connectedSegments, TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH, semaphores); match.getSegment1().containingRegion().addTrackElement(segment2); // have the sensor monitor the segment - match.getSensor().addMonitoredElement(new Ref(segment2.id())); + match.getSensor().addMonitoredElement(segment2.createRef()); // remove the connection of segment1 to segment3 - for (int i = 0; i < match.getSegment1().getConnectsToList().getNumChild(); i++) { - if (match.getSegment1().getConnectsTo(i).getValue() == match.getSegment3().id()) { - match.getSegment1().getConnectsToList().removeChild(i); + for (int i = 0; i < match.getSegment1().getConnectedElementList().getNumChild(); i++) { + if (match.getSegment1().getConnectedElement(i).getValue() == match.getSegment3().id()) { + match.getSegment1().getConnectedElementList().removeChild(i); break; } } // connect segment1 to segment2 - match.getSegment1().addConnectsTo(new Ref(segment2.id())); + match.getSegment1().addConnectedElement(segment2.createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectRouteSensor.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectRouteSensor.java index 353357648..4dbfb86bd 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectRouteSensor.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectRouteSensor.java @@ -1,6 +1,6 @@ package de.tudresden.inf.st.train.jastadd.transformations.inject; -import de.tudresden.inf.st.train.jastadd.ast.Ref; +import de.tudresden.inf.st.train.jastadd.ast.SensorRef; import de.tudresden.inf.st.train.jastadd.ast.Sensor; import de.tudresden.inf.st.train.jastadd.ast.List; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; @@ -17,32 +17,21 @@ public class JastaddTransformationInjectRouteSensor<TJastaddDriver extends Jasta public JastaddTransformationInjectRouteSensor(final TJastaddDriver driver) { super(driver); -// for (int i = 0; i<10; i++) { -// try -// { -// Thread.sleep(1000); -// } -// catch(InterruptedException ex) -// { -// Thread.currentThread().interrupt(); -// } -// System.out.println("waiting..."); -// } - } @Override public void activate(final Collection<JastaddRouteSensorInjectMatch> matches) { - java.util.List<Ref> refsToBeRemoved = new ArrayList<>(); + java.util.List<SensorRef> refsToBeRemoved = new ArrayList<>(); + for (final JastaddRouteSensorInjectMatch match : matches) { - for (Ref ref : match.getRoute().getRequiredSensors()) { - if (ref.asSensor() == match.getSensor()) { + for (SensorRef ref : match.getRoute().getRequiredSensors()) { + if (ref.getSensor() == match.getSensor()) { refsToBeRemoved.add(ref); } } } - for(Ref ref : refsToBeRemoved) { + for(SensorRef ref : refsToBeRemoved) { ref.removeSelf(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java index 0c0fe833c..af55f7ceb 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java @@ -1,8 +1,7 @@ package de.tudresden.inf.st.train.jastadd.transformations.inject; import de.tudresden.inf.st.train.jastadd.ast.Sensor; -import de.tudresden.inf.st.train.jastadd.ast.Switch; -import de.tudresden.inf.st.train.jastadd.ast.Ref; +import de.tudresden.inf.st.train.jastadd.ast.TrackElementRef; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; import de.tudresden.inf.st.train.jastadd.matches.JastaddSwitchMonitoredInjectMatch; import de.tudresden.inf.st.train.jastadd.transformations.JastaddTransformation; @@ -19,19 +18,19 @@ public class JastaddTransformationInjectSwitchMonitored<TJastaddDriver extends J @Override public void activate(final Collection<JastaddSwitchMonitoredInjectMatch> matches) { - java.util.List<Ref> refsToBeRemoved = new ArrayList<>(); + java.util.List<TrackElementRef> refsToBeRemoved = new ArrayList<>(); for (final JastaddSwitchMonitoredInjectMatch match : matches) { - for (final Sensor sensor : match.getSw().monitoringSensors()) { - for (Ref swRef : sensor.getMonitoredElements()) { - if (swRef.asSwitch() == match.getSw()) { - refsToBeRemoved.add(swRef); + for (final Sensor sensor : match.getSw().monitoredBy()) { + for (TrackElementRef trackElementRef : sensor.getMonitoredElements()) { + if (trackElementRef.getTrackElement() == match.getSw()) { + refsToBeRemoved.add(trackElementRef); } } } } - for(Ref ref : refsToBeRemoved) { + for(TrackElementRef ref : refsToBeRemoved) { ref.removeSelf(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java index f7bbd94a5..929ae4da3 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java @@ -31,9 +31,9 @@ public class JastaddTransformationRepairConnectedSegments<TJastaddDriver extends } } for (TrackElement element : region.getTrackElementList()) { - for (int i = element.getConnectsToList().getNumChild() - 1; i >= 0; i--) { - if (element.getConnectsTo(i).getValue() == segment2.id()) { - element.getConnectsTo(i).removeSelf(); + for (int i = element.getConnectedElementList().getNumChild() - 1; i >= 0; i--) { + if (element.getConnectedElement(i).getValue() == segment2.id()) { + element.getConnectedElement(i).removeSelf(); } } } @@ -42,7 +42,7 @@ public class JastaddTransformationRepairConnectedSegments<TJastaddDriver extends segment2.removeSelf(); // connect segment1 to segment3 - match.getSegment1().addConnectsTo(new Ref(match.getSegment3().id())); + match.getSegment1().addConnectedElement(match.getSegment3().createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java index cc9b43226..4cd868703 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java @@ -1,6 +1,6 @@ package de.tudresden.inf.st.train.jastadd.transformations.repair; -import de.tudresden.inf.st.train.jastadd.ast.Ref; +import de.tudresden.inf.st.train.jastadd.ast.SensorRef; import de.tudresden.inf.st.train.jastadd.ast.Route; import de.tudresden.inf.st.train.jastadd.ast.Sensor; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; @@ -21,7 +21,7 @@ public class JastaddTransformationRepairRouteSensor<TJastaddDriver extends Jasta for (final JastaddRouteSensorMatch rsm : matches) { final Route route = rsm.getRoute(); final Sensor sensor = rsm.getSensor(); - route.getRequiredSensorList().add(new Ref(sensor.id())); + route.getRequiredSensorList().add(sensor.createRef()); driver.flushCache(); } } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java index f49de86b0..35ccd29e3 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java @@ -1,6 +1,5 @@ package de.tudresden.inf.st.train.jastadd.transformations.repair; -import de.tudresden.inf.st.train.jastadd.ast.Ref; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; import de.tudresden.inf.st.train.jastadd.matches.JastaddSemaphoreNeighborMatch; import de.tudresden.inf.st.train.jastadd.transformations.JastaddTransformation; @@ -17,7 +16,7 @@ public class JastaddTransformationRepairSemaphoreNeighbor<TJastaddDriver extends @Override public void activate(final Collection<JastaddSemaphoreNeighborMatch> matches) { for (final JastaddSemaphoreNeighborMatch match : matches) { - match.getRoute2().setEntry(new Ref(match.getSemaphore().id())); + match.getRoute2().setEntry(match.getSemaphore().createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java index 37f77351c..0e10e69a9 100644 --- a/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java +++ b/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java @@ -1,9 +1,8 @@ package de.tudresden.inf.st.train.jastadd.transformations.repair; - -import de.tudresden.inf.st.train.jastadd.ast.Id; import de.tudresden.inf.st.train.jastadd.ast.List; -import de.tudresden.inf.st.train.jastadd.ast.Ref; +import de.tudresden.inf.st.train.jastadd.ast.SwitchRef; +import de.tudresden.inf.st.train.jastadd.ast.TrackElementRef; import de.tudresden.inf.st.train.jastadd.ast.Sensor; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; import de.tudresden.inf.st.train.jastadd.matches.JastaddSwitchMonitoredMatch; @@ -23,9 +22,9 @@ public class JastaddTransformationRepairSwitchMonitored<TJastaddDriver extends J for (final JastaddSwitchMonitoredMatch ssnm : matches) { // gather the stuff we need to create a sensor: - Id id = new Id(driver.nextId()); - List<Ref> refList = new List<>(); - refList.add(new Ref(ssnm.getSw().id())); + int id = driver.nextId(); + List<TrackElementRef> refList = new List<>(); + refList.add(ssnm.getSw().createRef()); Sensor sensor = new Sensor(id, refList); diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/Helpers.jrag b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/Helpers.jrag index 417b3592d..0e0265411 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/Helpers.jrag +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/Helpers.jrag @@ -1,33 +1,7 @@ aspect Helpers { - - syn boolean TrackElement.isSwitch(); - eq Switch.isSwitch() = true; - eq Segment.isSwitch() = false; - - syn Switch TrackElement.asSwitch(); - eq Switch.asSwitch() = this; - eq Segment.asSwitch() = null; - - syn boolean TrackElement.isSegment(); - eq Switch.isSegment() = false; - eq Segment.isSegment() = true; - - syn Segment TrackElement.asSegment(); - eq Switch.asSegment() = null; - eq Segment.asSegment() = this; - - inh Region TrackElement.containingRegion(); - eq Region.getTrackElement(int i).containingRegion() = this; - - syn int RailwayElement.id() = getId().getValue(); - - inh RailwayContainer RailwayElement.getRoot(); - eq RailwayContainer.getRoute(int i).getRoot() = this; - eq RailwayContainer.getRegion(int i).getRoot() = this; - inh RailwayContainer Ref.getRoot(); syn boolean Ref.references(RailwayElement node) { - return this.getValue() == node.getId().getValue(); + return this.getValue() == node.getId(); } } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/References.jadd b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/References.jadd new file mode 100644 index 000000000..f68ed8f07 --- /dev/null +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/References.jadd @@ -0,0 +1,17 @@ +aspect RefGenerator { + public SensorRef Sensor.createRef() { + return new SensorRef(this.id(), this); + } + + public SemaphoreRef Semaphore.createRef() { + return new SemaphoreRef(this.id(), this); + } + + public SwitchRef Switch.createRef() { + return new SwitchRef(this.id(), this); + } + + public SegmentRef Segment.createRef() { + return new SegmentRef(this.id(), this); + } +} diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TrainPrinting.jadd b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TrainPrinting.jadd deleted file mode 100644 index 19df865b8..000000000 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TrainPrinting.jadd +++ /dev/null @@ -1,27 +0,0 @@ -aspect TrainPrinting { - - public String Name.getNodeTitle() { - return this.getClass().getSimpleName() + " " + getValue(); - } - - public String Segment.getNodeTitle() { - return this.getClass().getSimpleName() + " with length " + getLength(); - } - - public String Route.getNodeTitle() { - return this.getClass().getSimpleName() + (getActive() ? " is active" : " is inactive"); - } - - public String Switch.getNodeTitle() { - return this.getClass().getSimpleName() + " is in position " + getCurrentPosition().name(); - } - - public String Semaphore.getNodeTitle() { - return this.getClass().getSimpleName() + " is in position " + getSignal().name(); - } - - public String SwitchPosition.getNodeTitle() { - return this.getClass().getSimpleName() + " is " + getPosition().name(); - } - -} diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TreeNavigation.jrag b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TreeNavigation.jrag index 41d9c7c42..d4f1f8f4a 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TreeNavigation.jrag +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/TreeNavigation.jrag @@ -53,6 +53,16 @@ aspect TreeNavigation { return sensors; } + syn TrackElement TrackElementRef.getTrackElement(); + eq SwitchRef.getTrackElement() = getSwitch(); + eq SegmentRef.getTrackElement() = getSegment(); + + syn boolean TrackElementRef.isSwitchRef() = false; + eq SwitchRef.isSwitchRef() = true; + + syn boolean TrackElementRef.isSegmentRef() = false; + eq SegmentRef.isSegmentRef() = true; + // more reference resolving syn Collection<TrackElement> Sensor.monitoredElements() { @@ -95,7 +105,7 @@ aspect TreeNavigation { syn Collection<TrackElement> TrackElement.connectsTos() { java.util.List<TrackElement> trackElements = new ArrayList<>(); - for (TrackElementRef teRef : getConnectsToList()) { + for (TrackElementRef teRef : getConnectedElementList()) { trackElements.add(teRef.getTrackElement()); } return trackElements; @@ -103,7 +113,7 @@ aspect TreeNavigation { syn Collection<Segment> TrackElement.connectsToSegments() { java.util.List<Segment> segments = new ArrayList<>(); - for (TrackElementRef teRef : getConnectsToList()) { + for (TrackElementRef teRef : getConnectedElementList()) { Segment segment = teRef.getTrackElement().asSegment(); if (segment != null) { segments.add(segment); @@ -140,52 +150,50 @@ aspect TreeNavigation { return getTarget().getSwitch(); } - syn Collection<Route> Sensor.requiringRoutes() { - return getRoot().requiringRoutesMap().get(this.id()); + syn Collection<Sensor> TrackElement.monitoredBy() { + return getRoot().monitoredByMap().get(this.id()); } - syn Map<Integer,Set<Route>> RailwayContainer.requiringRoutesMap() { - Map<Integer,Set<Route>> routeMap = new java.util.HashMap<>(); + syn Map<Integer,Set<Sensor>> RailwayContainer.monitoredByMap() { + Map<Integer,Set<Sensor>> sensorMap = new java.util.HashMap<>(); // fill the keys - for (Sensor sensor: sensors()) { - routeMap.put(sensor.id(), new java.util.HashSet<>()); + for (Region region: getRegionList()) { + for (TrackElement trackElement: region.getTrackElementList()) { + sensorMap.put(trackElement.id(), new java.util.HashSet<>()); + } } // update the values - for (Route route : getRouteList()) { - for (SensorRef sensorRef : route.getRequiredSensorList()) { - routeMap.get(sensorRef.getValue()).add(route); + for (Sensor sensor : sensors()) { + for (TrackElementRef trackElementRef : sensor.getMonitoredElementList()) { + sensorMap.get(trackElementRef.getValue()).add(sensor); } } - return routeMap; + return sensorMap; } - syn Collection<Sensor> TrackElement.monitoredBy() { - return getRoot().monitoredByMap().get(this.id()); + syn Collection<Route> Sensor.requiringRoutes() { + return getRoot().requiringRoutesMap().get(this.id()); } - syn Map<Integer, Set<Sensor>> RailwayContainer.monitoredByMap() { - Map<Integer, Set<Sensor>> result = new java.util.HashMap<>(); + syn Map<Integer,Set<Route>> RailwayContainer.requiringRoutesMap() { + Map<Integer,Set<Route>> routeMap = new java.util.HashMap<>(); // fill the keys - for (Region region : getRegionList()) { - for (TrackElement trackElement : region.getTrackElementList()) { - result.put(trackElement.id(), new java.util.HashSet<>()); - } + for (Sensor sensor: sensors()) { + routeMap.put(sensor.id(), new java.util.HashSet<>()); } // update the values - for (Region region : getRegionList()) { - for (Sensor sensor : region.getSensorList()) { - for (TrackElementRef trackElementRef : sensor.getMonitoredElementList()) { - result.get(trackElementRef.getValue()).add(sensor); - } + for (Route route : getRouteList()) { + for (SensorRef sensorRef : route.getRequiredSensorList()) { + routeMap.get(sensorRef.getValue()).add(route); } } - return result; + return routeMap; } } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries/SwitchMonitoredMatch.jrag b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries/SwitchMonitoredMatch.jrag index b58c43ff7..8ac3cd176 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries/SwitchMonitoredMatch.jrag +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/queries/SwitchMonitoredMatch.jrag @@ -1,21 +1,14 @@ aspect Queries { syn java.util.Collection<Switch> RailwayContainer.switchMonitoredMatches() { - java.util.List<Switch> matches = new java.util.ArrayList<>(); - for (Region region: getRegionList()) { - matches.addAll(region.switchMonitoredMatches()); - } - return matches; - } - - syn java.util.Collection<Switch> Region.switchMonitoredMatches() { - java.util.List<Switch> matches = new java.util.ArrayList<>(); - for (Switch sw : switches()) { - if (sw.monitoredBy().size() == 0) { - matches.add(sw); + java.util.Set<Switch> switches = new java.util.HashSet<>(); + switches.addAll(switches()); + for (Sensor sensor : sensors()) { + for (Switch sw : sensor.monitoredSwitches()) { + switches.remove(sw); } } - return matches; + return switches; } syn java.util.Collection<Switch> RailwayContainer.switchMonitoredInjectMatches() { diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast index 8ea87e495..6d1b86d55 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/jastadd/train.ast @@ -1,22 +1,19 @@ -// root: RailwayContainer ::= Route* Region* ; -abstract RailwayElement ::= Id ; -Region:RailwayElement ::= TrackElement* Sensor* ; -Semaphore:RailwayElement ::= <Signal:Signal> ; -Route:RailwayElement ::= <Active:boolean> SwitchPosition* RequiredSensor:SensorRef* [Entry:SemaphoreRef] [Exit:SemaphoreRef] ; -SwitchPosition:RailwayElement ::= <Position:Position> Target:SwitchRef ; -Sensor:RailwayElement ::= MonitoredElement:TrackElementRef* ; +abstract RailwayElement ::= <Id:int>; +Region : RailwayElement ::= TrackElement* Sensor*; +Semaphore : RailwayElement ::= <Signal:Signal>; +Route : RailwayElement ::= <Active:boolean> SwitchPosition* RequiredSensor:SensorRef* [Entry:SemaphoreRef] [Exit:SemaphoreRef]; +SwitchPosition : RailwayElement ::= <Position:Position> Target:SwitchRef; +Sensor : RailwayElement ::= MonitoredElement:TrackElementRef*; -abstract TrackElement:RailwayElement ::= ConnectsTo:TrackElementRef* ; -Segment:TrackElement ::= <Length:int> Semaphore* ; -Switch:TrackElement ::= <CurrentPosition:Position> ; +abstract TrackElement:RailwayElement ::= ConnectedElement:TrackElementRef*; +Segment:TrackElement ::= <Length:int> Semaphore*; +Switch:TrackElement ::= <CurrentPosition:Position>; -abstract Name ::= <Value:int> ; -Id:Name ; -abstract Ref:Name ; -SensorRef:Ref ::= <Sensor:Sensor> ; -SemaphoreRef:Ref ::= <Semaphore:Semaphore> ; -TrackElementRef:Ref ::= <TrackElement:TrackElement> ; -SwitchRef:Ref ::= <Switch:Switch> ; -SegmentRef:Ref ::= <Segment:Segment> ; +abstract Ref ::= <Value:int> ; +SensorRef : Ref ::= <Sensor:Sensor>; +SemaphoreRef : Ref ::= <Semaphore:Semaphore>; +abstract TrackElementRef : Ref; +SwitchRef : TrackElementRef ::= <Switch:Switch> ; +SegmentRef : TrackElementRef ::= <Segment:Segment> ; \ No newline at end of file diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java index 2e7648ea8..47e998c7c 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java @@ -55,7 +55,7 @@ public class JastaddDriver extends Driver { @Override public String getPostfix() { - return "-ag-ref.json"; + return "-ag.json"; } public void flushCache() { diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java index 2e4720e73..7ab20e193 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/deserializer/ASTNodeDeserializer.java @@ -48,9 +48,6 @@ public class ASTNodeDeserializer extends StdDeserializer<ASTNode> { for (SemaphoreRef ref : semaphoreRefList) { ref.setSemaphore((Semaphore) idMap.get(ref.getValue())); } - for (TrackElementRef ref : trackElementRefList) { - ref.setTrackElement((TrackElement) idMap.get(ref.getValue())); - } for (SwitchRef ref : switchRefList) { ref.setSwitch((Switch) idMap.get(ref.getValue())); } @@ -173,16 +170,13 @@ public class ASTNodeDeserializer extends StdDeserializer<ASTNode> { // check if the instance is of type RailwayElement if (instance instanceof RailwayElement) { RailwayElement re = (RailwayElement) instance; - this.idMap.put(re.getId().getValue(), re); + this.idMap.put(re.getId(), re); } else if (instance instanceof SensorRef) { SensorRef r = (SensorRef) instance; this.sensorRefList.add(r); } else if (instance instanceof SemaphoreRef) { SemaphoreRef r = (SemaphoreRef) instance; this.semaphoreRefList.add(r); - } else if (instance instanceof TrackElementRef) { - TrackElementRef r = (TrackElementRef) instance; - this.trackElementRefList.add(r); } else if (instance instanceof SwitchRef) { SwitchRef r = (SwitchRef) instance; this.switchRefList.add(r); diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java index 78eab3ecd..2d5edaa3b 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java @@ -20,25 +20,25 @@ public class JastaddTransformationInjectConnectedSegments<TJastaddDriver extends for (final JastaddConnectedSegmentsInjectMatch match : matches) { // create segment2 List<TrackElementRef> connectedSegments = new List<>(); - connectedSegments.add(new TrackElementRef(match.getSegment3().id(), match.getSegment3())); + connectedSegments.add(match.getSegment3().createRef()); List<Semaphore> semaphores = new List<>(); - Segment segment2 = new Segment(new Id(driver.nextId()), connectedSegments, TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH, semaphores); + Segment segment2 = new Segment(driver.nextId(), connectedSegments, TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH, semaphores); match.getSegment1().containingRegion().addTrackElement(segment2); // have the sensor monitor the segment - match.getSensor().addMonitoredElement(new TrackElementRef(segment2.id(), segment2)); + match.getSensor().addMonitoredElement(segment2.createRef()); // remove the connection of segment1 to segment3 - for (int i = 0; i < match.getSegment1().getConnectsToList().getNumChild(); i++) { - if (match.getSegment1().getConnectsTo(i).getValue() == match.getSegment3().id()) { - match.getSegment1().getConnectsToList().removeChild(i); + for (int i = 0; i < match.getSegment1().getConnectedElementList().getNumChild(); i++) { + if (match.getSegment1().getConnectedElement(i).getValue() == match.getSegment3().id()) { + match.getSegment1().getConnectedElementList().removeChild(i); break; } } // connect segment1 to segment2 - match.getSegment1().addConnectsTo(new TrackElementRef(segment2.id(), segment2)); + match.getSegment1().addConnectedElement(segment2.createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java index 973b4146f..af55f7ceb 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectSwitchMonitored.java @@ -1,6 +1,6 @@ package de.tudresden.inf.st.train.jastadd.transformations.inject; -import de.tudresden.inf.st.train.jastadd.ast.*; +import de.tudresden.inf.st.train.jastadd.ast.Sensor; import de.tudresden.inf.st.train.jastadd.ast.TrackElementRef; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; import de.tudresden.inf.st.train.jastadd.matches.JastaddSwitchMonitoredInjectMatch; @@ -34,7 +34,6 @@ public class JastaddTransformationInjectSwitchMonitored<TJastaddDriver extends J ref.removeSelf(); } - driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java index 44a1ee72a..929ae4da3 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairConnectedSegments.java @@ -31,9 +31,9 @@ public class JastaddTransformationRepairConnectedSegments<TJastaddDriver extends } } for (TrackElement element : region.getTrackElementList()) { - for (int i = element.getConnectsToList().getNumChild() - 1; i >= 0; i--) { - if (element.getConnectsTo(i).getValue() == segment2.id()) { - element.getConnectsTo(i).removeSelf(); + for (int i = element.getConnectedElementList().getNumChild() - 1; i >= 0; i--) { + if (element.getConnectedElement(i).getValue() == segment2.id()) { + element.getConnectedElement(i).removeSelf(); } } } @@ -42,7 +42,7 @@ public class JastaddTransformationRepairConnectedSegments<TJastaddDriver extends segment2.removeSelf(); // connect segment1 to segment3 - match.getSegment1().addConnectsTo(new TrackElementRef(match.getSegment3().id(), match.getSegment3())); + match.getSegment1().addConnectedElement(match.getSegment3().createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java index 6a62ee4af..4cd868703 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairRouteSensor.java @@ -21,7 +21,7 @@ public class JastaddTransformationRepairRouteSensor<TJastaddDriver extends Jasta for (final JastaddRouteSensorMatch rsm : matches) { final Route route = rsm.getRoute(); final Sensor sensor = rsm.getSensor(); - route.getRequiredSensorList().add(new SensorRef(sensor.id(), sensor)); + route.getRequiredSensorList().add(sensor.createRef()); driver.flushCache(); } } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java index 4026ffe81..3e55f7047 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSemaphoreNeighbor.java @@ -17,7 +17,7 @@ public class JastaddTransformationRepairSemaphoreNeighbor<TJastaddDriver extends @Override public void activate(final Collection<JastaddSemaphoreNeighborMatch> matches) { for (final JastaddSemaphoreNeighborMatch match : matches) { - match.getRoute2().setEntry(new SemaphoreRef(match.getSemaphore().id(), match.getSemaphore())); + match.getRoute2().setEntry(match.getSemaphore().createRef()); } driver.flushCache(); } diff --git a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java index 7943e1af3..0e10e69a9 100644 --- a/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java +++ b/trainbenchmark-tool-jastadd-optimized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/repair/JastaddTransformationRepairSwitchMonitored.java @@ -1,7 +1,9 @@ package de.tudresden.inf.st.train.jastadd.transformations.repair; - -import de.tudresden.inf.st.train.jastadd.ast.*; +import de.tudresden.inf.st.train.jastadd.ast.List; +import de.tudresden.inf.st.train.jastadd.ast.SwitchRef; +import de.tudresden.inf.st.train.jastadd.ast.TrackElementRef; +import de.tudresden.inf.st.train.jastadd.ast.Sensor; import de.tudresden.inf.st.train.jastadd.driver.JastaddDriver; import de.tudresden.inf.st.train.jastadd.matches.JastaddSwitchMonitoredMatch; import de.tudresden.inf.st.train.jastadd.transformations.JastaddTransformation; @@ -20,9 +22,9 @@ public class JastaddTransformationRepairSwitchMonitored<TJastaddDriver extends J for (final JastaddSwitchMonitoredMatch ssnm : matches) { // gather the stuff we need to create a sensor: - Id id = new Id(driver.nextId()); + int id = driver.nextId(); List<TrackElementRef> refList = new List<>(); - refList.add(new TrackElementRef(ssnm.getSw().id(), ssnm.getSw())); + refList.add(ssnm.getSw().createRef()); Sensor sensor = new Sensor(id, refList); diff --git a/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast b/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast new file mode 100644 index 000000000..57956fbbb --- /dev/null +++ b/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/Train.relast @@ -0,0 +1,19 @@ +RailwayContainer ::= Route* Region*; + +abstract RailwayElement ::= <Id:int>; +Region : RailwayElement ::= TrackElement* Sensor*; +Semaphore : RailwayElement ::= <Signal:Signal>; +Route : RailwayElement ::= <Active:boolean> SwitchPosition*; +SwitchPosition : RailwayElement ::= <Position:Position>; +Sensor : RailwayElement; + +abstract TrackElement : RailwayElement; +Segment : TrackElement ::= <Length:int> Semaphore*; +Switch : TrackElement ::= <CurrentPosition:Position>; + +rel Route.requires* -> Sensor; +rel Route.entry? -> Semaphore; +rel Route.exit? -> Semaphore; +rel Sensor.monitors* <-> TrackElement.monitoredBy*; +rel TrackElement.connectsTo* -> TrackElement; +rel SwitchPosition.target <-> Switch.positions*; \ No newline at end of file diff --git a/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TreeNavigation.jrag b/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TreeNavigation.jrag index 70f2ee27c..3265ab429 100644 --- a/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TreeNavigation.jrag +++ b/trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/TreeNavigation.jrag @@ -1,5 +1,18 @@ aspect TreeNavigation { + // collections of things + + syn Collection<Segment> RailwayContainer.segments() { + java.util.List<Segment> segments = new ArrayList<>(); + for (Region region : getRegionList()) { + for (TrackElement trackElement : region.getTrackElementList()) { + Segment segment = trackElement.asSegment(); + if (segment != null) segments.add(segment); + } + } + return segments; + } + syn Collection<Switch> RailwayContainer.switches() { java.util.List<Switch> switches = new ArrayList<>(); for (Region region : getRegionList()) { @@ -20,6 +33,26 @@ aspect TreeNavigation { return switches; } + syn Collection<Semaphore> RailwayContainer.semaphores() { + java.util.List<Semaphore> semaphores = new ArrayList<>(); + for (Segment segment : segments()) { + for (Semaphore semaphore : segment.getSemaphoreList()) { + semaphores.add(semaphore); + } + } + return semaphores; + } + + syn Collection<Sensor> RailwayContainer.sensors() { + java.util.List<Sensor> sensors = new ArrayList<>(); + for (Region region : getRegionList()) { + for (Sensor sensor : region.getSensorList()){ + sensors.add(sensor); + } + } + return sensors; + } + syn Collection<Segment> Sensor.monitoredSegments() { java.util.List<Segment> segments = new ArrayList<>(); for (TrackElement trackElement : getMonitoredElementList()) { diff --git a/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java b/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java index bd762b99b..dbbb435cb 100644 --- a/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java +++ b/trainbenchmark-tool-jastadd-specialized-base/src/main/java/de/tudresden/inf/st/train/jastadd/transformations/inject/JastaddTransformationInjectConnectedSegments.java @@ -19,11 +19,10 @@ public class JastaddTransformationInjectConnectedSegments<TJastaddDriver extends public void activate(final Collection<JastaddConnectedSegmentsInjectMatch> matches) { for (final JastaddConnectedSegmentsInjectMatch match : matches) { // create segment2 - RefList<TrackElement> connectedSegments = new RefList<>(); - connectedSegments.add(match.getSegment3()); - RefList<Sensor> monitoredBy = new RefList<>(); - RefList<Semaphore> semaphores = new RefList<>(); - Segment segment2 = new Segment(driver.nextId(), monitoredBy, connectedSegments, TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH, semaphores); + Segment segment2 = new Segment(); + segment2.setId(driver.nextId()); + segment2.addConnectsTo(match.getSegment3()); + segment2.setLength(TrainBenchmarkConstants.DEFAULT_SEGMENT_LENGTH); match.getSegment1().containingRegion().addTrackElement(segment2); diff --git a/trainbenchmark-tool-jastadd-specialized-incremental/build.gradle b/trainbenchmark-tool-jastadd-specialized-incremental/build.gradle index 0c0812b98..e67381f99 100644 --- a/trainbenchmark-tool-jastadd-specialized-incremental/build.gradle +++ b/trainbenchmark-tool-jastadd-specialized-incremental/build.gradle @@ -17,7 +17,7 @@ task jastadd(type: JavaExec) { "--package=de.tudresden.inf.st.train.jastadd.ast", "--o=src/main/java-gen", "--tracing=api", - ] + fileTree("../trainbenchmark-tool-jastadd-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized-incremental/src/main/jastadd/") + ] + fileTree("../trainbenchmark-tool-jastadd-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/").matching {exclude "*.relast"} + fileTree("../trainbenchmark-tool-jastadd-specialized-incremental/src/main/jastadd/") doFirst { delete fileTree('src/main/java-gen') } diff --git a/trainbenchmark-tool-jastadd-specialized/build.gradle b/trainbenchmark-tool-jastadd-specialized/build.gradle index ee3c32e2b..8d98175b8 100644 --- a/trainbenchmark-tool-jastadd-specialized/build.gradle +++ b/trainbenchmark-tool-jastadd-specialized/build.gradle @@ -15,7 +15,7 @@ task jastadd(type: JavaExec) { "--package=de.tudresden.inf.st.train.jastadd.ast", "--o=src/main/java-gen", "--tracing=api", - ] + fileTree("../trainbenchmark-tool-jastadd-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized/src/main/jastadd/") + ] + fileTree("../trainbenchmark-tool-jastadd-base/src/main/jastadd/") + fileTree("../trainbenchmark-tool-jastadd-specialized-base/src/main/jastadd/").matching {exclude "*.relast"} + fileTree("../trainbenchmark-tool-jastadd-specialized/src/main/jastadd/") doFirst { delete fileTree('src/main/java-gen') } -- GitLab