Skip to content

Commit 9a85af1

Browse files
committed
Merge branch 'dev-2.x' into add_non_regression_module_tests
# Conflicts: # application/src/test/java/org/opentripplanner/updater/trip/siri/SiriEtBuilder.java # application/src/test/java/org/opentripplanner/updater/trip/siri/moduletests/fuzzymatching/FuzzyTripMatchingTest.java # application/src/test/java/org/opentripplanner/updater/trip/siri/moduletests/update/QuayChangeTest.java
2 parents e021b97 + e72f02d commit 9a85af1

32 files changed

Lines changed: 844 additions & 110 deletions

application/src/main/java/org/opentripplanner/model/TripTimeOnDate.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,14 @@ public int getRealtimeDeparture() {
251251
* Returns the actual arrival time if available. Otherwise -1 is returned.
252252
*/
253253
public int getActualArrival() {
254-
return isRecordedStop() ? tripTimes.getArrivalTime(stopPosition) : UNDEFINED;
254+
return hasArrived() ? tripTimes.getArrivalTime(stopPosition) : UNDEFINED;
255255
}
256256

257257
/**
258258
* Returns the actual departure time if available. Otherwise -1 is returned.
259259
*/
260260
public int getActualDeparture() {
261-
return isRecordedStop() ? tripTimes.getDepartureTime(stopPosition) : UNDEFINED;
261+
return hasDeparted() ? tripTimes.getDepartureTime(stopPosition) : UNDEFINED;
262262
}
263263

264264
public int getArrivalDelay() {
@@ -305,12 +305,14 @@ public boolean isNoDataStop() {
305305
return tripTimes.isNoDataStop(stopPosition);
306306
}
307307

308-
/**
309-
* Is the real-time time a recorded time (i.e. has the vehicle already passed the stop).
310-
* This information is currently only available from SIRI feeds.
311-
*/
312-
public boolean isRecordedStop() {
313-
return tripTimes.isRecordedStop(stopPosition);
308+
/// True if there is realtime information indicating that the trip has arrived at the stop.
309+
public boolean hasArrived() {
310+
return tripTimes.hasArrived(stopPosition);
311+
}
312+
313+
/// True if there is realtime information indicating that the trip has departed from the stop.
314+
public boolean hasDeparted() {
315+
return tripTimes.hasDeparted(stopPosition);
314316
}
315317

316318
public RealTimeState getRealTimeState() {

application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModeFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class AllowMainAndSubModeFilter implements AllowTransitModeFilter {
2323
}
2424

2525
@Override
26-
public boolean isSubMode() {
26+
public boolean isModeSelective() {
2727
return true;
2828
}
2929

application/src/main/java/org/opentripplanner/model/modes/AllowMainAndSubModesFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class AllowMainAndSubModesFilter implements AllowTransitModeFilter {
2828
}
2929

3030
@Override
31-
public boolean isSubMode() {
31+
public boolean isModeSelective() {
3232
return true;
3333
}
3434

application/src/main/java/org/opentripplanner/model/modes/AllowMainModeFilter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ public boolean match(TransitMode transitMode, SubMode ignore) {
2121
return mainMode == transitMode;
2222
}
2323

24+
@Override
25+
public boolean isModeSelective() {
26+
return true;
27+
}
28+
2429
@Override
2530
public int hashCode() {
2631
return mainMode.hashCode() + 176393;

application/src/main/java/org/opentripplanner/model/modes/AllowMainModesFilter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public boolean match(TransitMode transitMode, SubMode ignore) {
2020
return mainModes.contains(transitMode);
2121
}
2222

23+
@Override
24+
public boolean isModeSelective() {
25+
return true;
26+
}
27+
2328
@Override
2429
public int hashCode() {
2530
return mainModes.hashCode() + 176393;

application/src/main/java/org/opentripplanner/model/modes/AllowTransitModeFilter.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,17 @@ static AllowTransitModeFilter of(Collection<MainAndSubMode> modes) {
1919
*/
2020
boolean match(TransitMode transitMode, SubMode netexSubMode);
2121

22-
default boolean isSubMode() {
22+
/**
23+
* Returns {@code true} if this filter is selective about which modes it allows, i.e. it does
24+
* not accept all modes. This is used to determine whether trip-level filtering is needed for
25+
* {@link org.opentripplanner.transit.model.network.TripPattern}s that contain trips with
26+
* different modes or submodes. For such multi-mode patterns, pattern-level filtering alone is
27+
* insufficient and each trip must be checked individually against the mode filter.
28+
* <p>
29+
* The default is {@code false}, which is appropriate for filters that accept all modes (like
30+
* {@link AllowAllModesFilter}). Selective filters should override this to return {@code true}.
31+
*/
32+
default boolean isModeSelective() {
2333
return false;
2434
}
2535
}

application/src/main/java/org/opentripplanner/model/modes/FilterCollection.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public boolean match(TransitMode transitMode, SubMode netexSubMode) {
3535
}
3636

3737
@Override
38-
public boolean isSubMode() {
39-
return filters.stream().anyMatch(AllowTransitModeFilter::isSubMode);
38+
public boolean isModeSelective() {
39+
return filters.stream().anyMatch(AllowTransitModeFilter::isModeSelective);
4040
}
4141
}

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/DefaultTransitDataProviderFilter.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class DefaultTransitDataProviderFilter implements TransitDataProviderFilt
3838

3939
private final Set<FeedScopedId> bannedTrips;
4040

41-
private final boolean hasSubModeFilters;
41+
private final boolean hasTripLevelModeFilters;
4242

4343
public DefaultTransitDataProviderFilter(DefaultTransitDataProviderFilterBuilder builder) {
4444
requireBikesAllowed = builder.requireBikesAllowed();
@@ -49,7 +49,7 @@ public DefaultTransitDataProviderFilter(DefaultTransitDataProviderFilterBuilder
4949
includeRealtimeCancellations = builder.includeRealtimeCancellations();
5050
bannedTrips = Set.copyOf(builder.bannedTrips());
5151
filters = builder.filters().toArray(TransitFilter[]::new);
52-
hasSubModeFilters = builder.filters().stream().anyMatch(TransitFilter::isSubModePredicate);
52+
hasTripLevelModeFilters = builder.filters().stream().anyMatch(TransitFilter::isModeSelective);
5353
}
5454

5555
public static DefaultTransitDataProviderFilterBuilder of() {
@@ -73,7 +73,8 @@ public static BikeAccess bikeAccessForTrip(Trip trip) {
7373
public Predicate<TripTimes> createTripFilter(TripPattern tripPattern) {
7474
for (TransitFilter filter : filters) {
7575
if (filter.matchTripPattern(tripPattern)) {
76-
var applyTripTimesFilters = hasSubModeFilters && tripPattern.getContainsMultipleModes();
76+
var applyTripTimesFilters =
77+
hasTripLevelModeFilters && tripPattern.getContainsMultipleModes();
7778
return tripTimes -> tripTimesPredicate(tripTimes, applyTripTimesFilters);
7879
}
7980
}

application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilter.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ public interface TransitFilter {
1414
*/
1515
boolean matchTripTimes(TripTimes trip);
1616

17-
default boolean isSubModePredicate() {
17+
/**
18+
* Returns {@code true} if this filter contains mode-selective constraints that may require
19+
* per-trip filtering on multi-mode patterns.
20+
*
21+
* @see org.opentripplanner.model.modes.AllowTransitModeFilter#isModeSelective()
22+
*/
23+
default boolean isModeSelective() {
1824
return false;
1925
}
2026
}

application/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitFilterRequest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ public static Builder of() {
4040
}
4141

4242
@Override
43-
public boolean isSubModePredicate() {
43+
public boolean isModeSelective() {
4444
for (var selectRequest : select) {
4545
if (
4646
selectRequest.transportModeFilter() != null &&
47-
selectRequest.transportModeFilter().isSubMode()
47+
selectRequest.transportModeFilter().isModeSelective()
4848
) {
4949
return true;
5050
}
@@ -53,7 +53,7 @@ public boolean isSubModePredicate() {
5353
for (var selectRequest : not) {
5454
if (
5555
selectRequest.transportModeFilter() != null &&
56-
selectRequest.transportModeFilter().isSubMode()
56+
selectRequest.transportModeFilter().isModeSelective()
5757
) {
5858
return true;
5959
}

0 commit comments

Comments
 (0)