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
Branches
No related tags found
No related merge requests found
Showing
with 163 additions and 214 deletions
......@@ -24,4 +24,5 @@ aspect Helpers {
inh RailwayContainer RailwayElement.getRoot();
eq RailwayContainer.getRoute(int i).getRoot() = this;
eq RailwayContainer.getRegion(int i).getRoot() = this;
}
aspect TrainPrinting {
public String Name.getNodeTitle() {
return this.getClass().getSimpleName() + " " + getValue();
}
public String Segment.getNodeTitle() {
return this.getClass().getSimpleName() + " with length " + getLength();
}
......
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();
}
}
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());
}
}
......@@ -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);
}
}
......
......@@ -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) {
......
......@@ -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()) {
......
// 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:Ref* [Entry:Ref] [Exit:Ref] ;
SwitchPosition:RailwayElement ::= <Position:Position> Target:Ref ;
Sensor:RailwayElement ::= MonitoredElement:Ref* ;
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* ;
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
......@@ -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);
......
......@@ -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();
}
......
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();
}
......
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();
}
......
......@@ -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();
}
......
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();
}
}
......
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();
}
......
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);
......
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();
}
}
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);
}
}
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();
}
}
......@@ -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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment