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 875161e6dca0b6d14b67a28abaca3ec2224faf5f..d8c6010ab7042bbf451dbd34676624adafa99cea 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 19df865b8dcc6b36b964496fd75990ef8d3e74b1..2e7ffd3ff26e84b1824a03383fdecc45f3d8e98d 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 417b3592d1f238248a2aabb8cb120d8c474fe43a..0e02654110fff033dd2162a05872e58aa14207ff 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 0000000000000000000000000000000000000000..dda89d253afba94b65bdde8f1156a458a9a3306c --- /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 d7056b768b2deea400f5fab201c5b84a4f58b2e5..98f2240d55a8d0ec2714149151e02ca6930a653c 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 64c6184a195a161cfb563b937e1497e5a7b01bde..e0218601c07ed21b099eb711e3d377e99f856039 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 e89eedc8ec3efd7e5d734456efbffdada7ff3245..48fde84b69f1af5cf55d8440ad703f64eb81ef42 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 ee09488a2b30b2a9f1625be3b4cb0d588401344b..e601961e5890b3a308103050506a9429607b5043 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 4603893ef5c6aec2cc1c5265ea120136b4653e0f..7ad3c035ed70d4b0ada7135b57a1ed66b94ad0cd 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 61b4838c8a500832006ece0550ff62bf84cdc08d..2d5edaa3b1853246e689f72be52dcaf4defbd79f 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 353357648770f583f35a1c985d6043f29af2f001..4dbfb86bdf6bdaa77032a3599af2a58e6c2df182 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 0c0fe833c53b5f34a83b7cc41d7cc14228004038..af55f7ceb861cb9a201841d63115b46e338302b6 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 f7bbd94a5bac55864d75953cbdc5f60b6d11d7c9..929ae4da36a442fadd93990fe19293ad6e604e0c 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 cc9b4322609e74d11d877fb7fd57e5adb36f42fe..4cd8687035f7775fd933274cd97cb9759aa44281 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 f49de86b0b06fe78350b1d07c11e97389ac11cfa..35ccd29e3910bb69567fbbe450834d965ffdebb6 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 37f77351c3490fc5bfe7b9559ce0d8834280fa22..0e10e69a9c011d9567b85cb4ee0cef3ac8c07675 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 417b3592d1f238248a2aabb8cb120d8c474fe43a..0e02654110fff033dd2162a05872e58aa14207ff 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 0000000000000000000000000000000000000000..f68ed8f073323925dd540f27eb7cf24150e1a923 --- /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 19df865b8dcc6b36b964496fd75990ef8d3e74b1..0000000000000000000000000000000000000000 --- 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 41d9c7c4289b6385df0fd6166c38967896fd6069..d4f1f8f4a180247c2e86e76eb3cbcf01960edce3 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 b58c43ff7b392593e6aea56984eb5873f34b8772..8ac3cd1763d23bd53ef8c4833ee989ed1c7a026f 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 8ea87e495773e8707610a14e4c213b45a0e16d3b..6d1b86d55402564adac6f9509483b0ae82f7dbb0 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 2e7648ea8e7aa878de85ead7662c596b7594a03e..47e998c7cc3a2e600696667a54fdade244db0067 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 2e4720e73c1fad09cba6593790aa68352aa1df67..7ab20e193787dbae3768c0273ff34958db9da2b9 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 78eab3ecdbeb304aa45dca7bb1d51947bf97347c..2d5edaa3b1853246e689f72be52dcaf4defbd79f 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 973b4146faa59962163bb8ef2654e34bd5dc2481..af55f7ceb861cb9a201841d63115b46e338302b6 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 44a1ee72a5ab2957bf9db158762c40144ea6ad9f..929ae4da36a442fadd93990fe19293ad6e604e0c 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 6a62ee4af9f65854e3b632b6747629ab1d395288..4cd8687035f7775fd933274cd97cb9759aa44281 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 4026ffe81d1d70f5de8d289b80a19f5389b179ba..3e55f70474e284ff15abab1145223e0baedf58f8 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 7943e1af32fd1c891f68ac5f7b9f3ec3899666b5..0e10e69a9c011d9567b85cb4ee0cef3ac8c07675 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 0000000000000000000000000000000000000000..57956fbbbf7ff6fed859535dafc83719e8cb9f5c --- /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 70f2ee27c1115b158d70cd137825b5eb1f4ce7f0..3265ab429ba2f87290646d3742f03fcee6cc5112 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 bd762b99b9270fd0af84f763ed0593adc0e07bf5..dbbb435cbcb76e134e9cd041523d2f961fa8f455 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 0c0812b98b1b193b96b64efd7fa273c1c0f510e8..e67381f998b77a9a0d1f79a5e477b995899e5b7f 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 ee3c32e2ba4cff772dcf525fa31be201f6ff5e30..8d98175b8c8d32ddd1ed897c5d3eaad0680196be 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') }