MATSIM
PersonRouteCheck.java
Go to the documentation of this file.
1 package org.matsim.core.population.algorithms;
2 
8 
9 public class PersonRouteCheck implements PersonAlgorithm{
10  private final Network network;
11 
12  public PersonRouteCheck(Network network) {
13  this.network = network;
14  }
15 
16  @Override
17  public void run(Person person) {
18  person.getPlans().stream()
19  .flatMap(p -> p.getPlanElements().stream())
20  .filter(pe -> pe instanceof Leg)
21  .map(pe -> (Leg) pe)
22  .forEach(this::resetRouteIfInconsistentModes);
23  }
24 
25  private void resetRouteIfInconsistentModes(Leg leg) {
26  Route route = leg.getRoute();
27  if (route == null) {
28  return;
29  }
30 
31  if (!(route instanceof NetworkRoute netRoute)) {
32  return;
33  }
34 
35  boolean allLinksHaveLegMode = netRoute.getLinkIds().stream()
36  .map(id -> network.getLinks().get(id))
37  .allMatch(link -> link.getAllowedModes().contains(leg.getMode()));
38 
39  if (!allLinksHaveLegMode) {
40  leg.setRoute(null);
41  }
42  }
43 }
Map< Id< Link >, ? extends Link > getLinks()
abstract List<? extends T > getPlans()