Skip to content
Snippets Groups Projects
Commit 20b86aea authored by Johannes Mey's avatar Johannes Mey
Browse files

update queries to new format, synchronize namelookup and optimized

parent 4c08ceab
No related branches found
No related tags found
No related merge requests found
Showing
with 101 additions and 65 deletions
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());
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;
}
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);
}
}
return matches;
return switches;
}
syn java.util.Collection<Switch> RailwayContainer.switchMonitoredInjectMatches() {
......
// root:
RailwayContainer ::= Route* Region* ;
abstract RailwayElement ::= Id ;
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* ;
abstract TrackElement:RailwayElement ::= ConnectedElement:TrackElementRef*;
Segment:TrackElement ::= <Length:int> Semaphore*;
Switch:TrackElement ::= <CurrentPosition:Position>;
abstract Name ::= <Value:int> ;
Id:Name ;
abstract Ref:Name ;
abstract Ref ::= <Value:int> ;
SensorRef : Ref ::= <Sensor:Sensor>;
SemaphoreRef : Ref ::= <Semaphore:Semaphore>;
TrackElementRef:Ref ::= <TrackElement:TrackElement> ;
SwitchRef:Ref ::= <Switch:Switch> ;
SegmentRef:Ref ::= <Segment:Segment> ;
abstract TrackElementRef : Ref;
SwitchRef : TrackElementRef ::= <Switch:Switch> ;
SegmentRef : TrackElementRef ::= <Segment:Segment> ;
\ No newline at end of file
......@@ -55,7 +55,7 @@ public class JastaddDriver extends Driver {
@Override
public String getPostfix() {
return "-ag-ref.json";
return "-ag.json";
}
public void flushCache() {
......
......@@ -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);
......
......@@ -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();
}
......
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();
}
......
......@@ -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();
}
......
......@@ -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();
}
}
......
......@@ -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();
}
......
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);
......
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
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()) {
......
......@@ -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);
......
......@@ -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')
}
......
......@@ -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')
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment