Skip to content

Commit 36ef65d

Browse files
committed
1 parent b6646f7 commit 36ef65d

File tree

2 files changed

+45
-13
lines changed

2 files changed

+45
-13
lines changed

application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@ public DataFetcher<Iterable<TransitAlert>> alerts() {
104104
.anyMatch(entity ->
105105
(
106106
entity instanceof EntitySelector.StopAndRoute stopAndRoute &&
107-
stopAndRoute.routeId().equals(getRoute(environment).getId())
107+
stopAndRoute.routeId().equals(getRoute(environment).getId())
108108
) ||
109-
(
110-
entity instanceof EntitySelector.StopAndTrip stopAndTrip &&
111-
stopAndTrip.tripId().equals(getSource(environment).getId())
112-
)
109+
(
110+
entity instanceof EntitySelector.StopAndTrip stopAndTrip &&
111+
stopAndTrip.tripId().equals(getSource(environment).getId())
112+
)
113113
)
114114
)
115115
.toList()
@@ -143,7 +143,7 @@ public DataFetcher<TripTimeOnDate> arrivalStoptime() {
143143
}
144144
}
145145

146-
TripPattern tripPattern = getTripPattern(environment);
146+
TripPattern tripPattern = getTripPattern(environment, serviceDate);
147147
if (tripPattern == null) {
148148
return null;
149149
}
@@ -176,7 +176,7 @@ public DataFetcher<TripTimeOnDate> departureStoptime() {
176176
}
177177
}
178178

179-
TripPattern tripPattern = getTripPattern(environment);
179+
TripPattern tripPattern = getTripPattern(environment, serviceDate);
180180
if (tripPattern == null) {
181181
return null;
182182
}
@@ -301,7 +301,7 @@ public DataFetcher<Iterable<TripTimeOnDate>> stoptimesForDate() {
301301
? ServiceDateUtils.parseString(args.getGraphQLServiceDate())
302302
: LocalDate.now(timeZone);
303303

304-
TripPattern tripPattern = transitService.getPatternForTrip(trip, serviceDate);
304+
TripPattern tripPattern = getTripPattern(environment, serviceDate);
305305
// no matching pattern found
306306
if (tripPattern == null) {
307307
return List.of();
@@ -376,6 +376,15 @@ private TripPattern getTripPattern(DataFetchingEnvironment environment) {
376376
return getTransitService(environment).getPatternForTrip(environment.getSource());
377377
}
378378

379+
private TripPattern getTripPattern(
380+
DataFetchingEnvironment environment,
381+
@Nullable LocalDate date
382+
) {
383+
return date == null
384+
? getTripPattern(environment)
385+
: getTransitService(environment).getPatternForTrip(environment.getSource(), date);
386+
}
387+
379388
private TransitService getTransitService(DataFetchingEnvironment environment) {
380389
return environment.<GraphQLRequestContext>getContext().transitService();
381390
}
@@ -389,17 +398,28 @@ private TripTimeOnDate getStoptimeAtIndex(
389398
@Nullable LocalDate serviceDate,
390399
int stopIndex
391400
) {
392-
var tripPattern = getTripPattern(environment);
401+
var tripPattern = getTripPattern(environment, serviceDate);
402+
var transitService = getTransitService(environment);
403+
var timetable = serviceDate != null
404+
? transitService.getTimetableForTripPattern(tripPattern, serviceDate)
405+
: tripPattern.getScheduledTimetable();
406+
if (timetable == null) {
407+
return null;
408+
}
409+
410+
var tripTimes = timetable.getTripTimes(getSource(environment));
411+
if (tripTimes == null) {
412+
return null;
413+
}
414+
393415
return new TripTimeOnDate(
394-
tripPattern.getScheduledTimetable().getTripTimes(getSource(environment)),
416+
tripTimes,
395417
stopIndex,
396418
tripPattern,
397419
serviceDate,
398420
serviceDate == null
399421
? null
400-
: ServiceDateUtils
401-
.asStartOfService(serviceDate, getTransitService(environment).getTimeZone())
402-
.toInstant()
422+
: ServiceDateUtils.asStartOfService(serviceDate, transitService.getTimeZone()).toInstant()
403423
);
404424
}
405425

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,15 @@ public TripTimeOnDate(
6363
/**
6464
* Must pass in both Timetable and Trip, because TripTimes do not have a reference to
6565
* StopPatterns.
66+
*
67+
* @return null if the trip does not exist in the timetable
6668
*/
69+
@Nullable
6770
public static List<TripTimeOnDate> fromTripTimes(Timetable table, Trip trip) {
6871
TripTimes times = table.getTripTimes(trip);
72+
if (times == null) {
73+
return null;
74+
}
6975
List<TripTimeOnDate> out = new ArrayList<>();
7076
for (int i = 0; i < times.getNumStops(); ++i) {
7177
out.add(new TripTimeOnDate(times, i, table.getPattern()));
@@ -78,14 +84,20 @@ public static List<TripTimeOnDate> fromTripTimes(Timetable table, Trip trip) {
7884
* StopPatterns.
7985
*
8086
* @param serviceDate service day to set, if null none is set
87+
* @return null if the trip does not exist in the timetable
8188
*/
89+
90+
@Nullable
8291
public static List<TripTimeOnDate> fromTripTimes(
8392
Timetable table,
8493
Trip trip,
8594
LocalDate serviceDate,
8695
Instant midnight
8796
) {
8897
TripTimes times = table.getTripTimes(trip);
98+
if (times == null) {
99+
return null;
100+
}
89101
List<TripTimeOnDate> out = new ArrayList<>();
90102
for (int i = 0; i < times.getNumStops(); ++i) {
91103
out.add(new TripTimeOnDate(times, i, table.getPattern(), serviceDate, midnight));

0 commit comments

Comments
 (0)