4
4
import graphql .schema .DataFetcher ;
5
5
import graphql .schema .DataFetchingEnvironment ;
6
6
import java .text .ParseException ;
7
- import java .time .Instant ;
8
7
import java .time .LocalDate ;
9
8
import java .time .ZoneId ;
10
9
import java .util .ArrayList ;
13
12
import java .util .List ;
14
13
import java .util .Optional ;
15
14
import java .util .stream .Collectors ;
15
+ import javax .annotation .Nullable ;
16
16
import org .locationtech .jts .geom .Geometry ;
17
17
import org .locationtech .jts .geom .LineString ;
18
18
import org .opentripplanner .apis .gtfs .GraphQLRequestContext ;
23
23
import org .opentripplanner .apis .gtfs .mapping .BikesAllowedMapper ;
24
24
import org .opentripplanner .apis .gtfs .model .TripOccupancy ;
25
25
import org .opentripplanner .apis .support .SemanticHash ;
26
- import org .opentripplanner .model .Timetable ;
27
26
import org .opentripplanner .model .TripTimeOnDate ;
28
27
import org .opentripplanner .routing .alertpatch .EntitySelector ;
29
28
import org .opentripplanner .routing .alertpatch .TransitAlert ;
36
35
import org .opentripplanner .transit .model .site .StopLocation ;
37
36
import org .opentripplanner .transit .model .timetable .Direction ;
38
37
import org .opentripplanner .transit .model .timetable .Trip ;
39
- import org .opentripplanner .transit .model .timetable .TripTimes ;
40
38
import org .opentripplanner .transit .service .TransitService ;
41
39
import org .opentripplanner .utils .time .ServiceDateUtils ;
42
40
@@ -132,38 +130,13 @@ public DataFetcher<Iterable<TransitAlert>> alerts() {
132
130
@ Override
133
131
public DataFetcher <TripTimeOnDate > arrivalStoptime () {
134
132
return environment -> {
135
- try {
136
- TransitService transitService = getTransitService (environment );
137
- TripPattern tripPattern = getTripPattern (environment );
138
- if (tripPattern == null ) {
139
- return null ;
140
- }
141
- Timetable timetable = tripPattern .getScheduledTimetable ();
142
-
143
- TripTimes triptimes = timetable .getTripTimes (getSource (environment ));
144
- LocalDate serviceDate = null ;
145
- Instant midnight = null ;
146
-
147
- var args = new GraphQLTypes .GraphQLTripArrivalStoptimeArgs (environment .getArguments ());
148
- if (args .getGraphQLServiceDate () != null ) {
149
- serviceDate = ServiceDateUtils .parseString (args .getGraphQLServiceDate ());
150
- midnight =
151
- ServiceDateUtils
152
- .asStartOfService (serviceDate , transitService .getTimeZone ())
153
- .toInstant ();
154
- }
155
-
156
- return new TripTimeOnDate (
157
- triptimes ,
158
- triptimes .getNumStops () - 1 ,
159
- tripPattern ,
160
- serviceDate ,
161
- midnight
162
- );
163
- } catch (ParseException e ) {
164
- //Invalid date format
165
- return null ;
166
- }
133
+ var serviceDate = getOptionalServiceDateArgument (environment );
134
+ var trip = getSource (environment );
135
+ var transitService = getTransitService (environment );
136
+ var stopTimes = serviceDate
137
+ .map (date -> transitService .getTripTimeOnDates (trip , date ))
138
+ .orElseGet (() -> transitService .getScheduledTripTimes (trip ));
139
+ return stopTimes .map (List ::getLast ).orElse (null );
167
140
};
168
141
}
169
142
@@ -180,32 +153,13 @@ public DataFetcher<String> blockId() {
180
153
@ Override
181
154
public DataFetcher <TripTimeOnDate > departureStoptime () {
182
155
return environment -> {
183
- try {
184
- TransitService transitService = getTransitService (environment );
185
- TripPattern tripPattern = getTripPattern (environment );
186
- if (tripPattern == null ) {
187
- return null ;
188
- }
189
- Timetable timetable = tripPattern .getScheduledTimetable ();
190
-
191
- TripTimes triptimes = timetable .getTripTimes (getSource (environment ));
192
- LocalDate serviceDate = null ;
193
- Instant midnight = null ;
194
-
195
- var args = new GraphQLTypes .GraphQLTripDepartureStoptimeArgs (environment .getArguments ());
196
- if (args .getGraphQLServiceDate () != null ) {
197
- serviceDate = ServiceDateUtils .parseString (args .getGraphQLServiceDate ());
198
- midnight =
199
- ServiceDateUtils
200
- .asStartOfService (serviceDate , transitService .getTimeZone ())
201
- .toInstant ();
202
- }
203
-
204
- return new TripTimeOnDate (triptimes , 0 , tripPattern , serviceDate , midnight );
205
- } catch (ParseException e ) {
206
- //Invalid date format
207
- return null ;
208
- }
156
+ var serviceDate = getOptionalServiceDateArgument (environment );
157
+ var trip = getSource (environment );
158
+ var transitService = getTransitService (environment );
159
+ var stopTimes = serviceDate
160
+ .map (date -> transitService .getTripTimeOnDates (trip , date ))
161
+ .orElseGet (() -> transitService .getScheduledTripTimes (trip ));
162
+ return stopTimes .map (List ::getFirst ).orElse (null );
209
163
};
210
164
}
211
165
@@ -300,43 +254,23 @@ public DataFetcher<Iterable<Object>> stops() {
300
254
301
255
@ Override
302
256
public DataFetcher <Iterable <TripTimeOnDate >> stoptimes () {
303
- return environment -> {
304
- TripPattern tripPattern = getTripPattern (environment );
305
- if (tripPattern == null ) {
306
- return List .of ();
307
- }
308
- return TripTimeOnDate .fromTripTimes (
309
- tripPattern .getScheduledTimetable (),
310
- getSource (environment )
311
- );
312
- };
257
+ return environment ->
258
+ getTransitService (environment ).getScheduledTripTimes (getSource (environment )).orElse (null );
313
259
}
314
260
315
261
@ Override
316
262
public DataFetcher <Iterable <TripTimeOnDate >> stoptimesForDate () {
317
263
return environment -> {
318
- try {
319
- TransitService transitService = getTransitService (environment );
320
- Trip trip = getSource (environment );
321
- var args = new GraphQLTypes .GraphQLTripStoptimesForDateArgs (environment .getArguments ());
322
-
323
- ZoneId timeZone = transitService .getTimeZone ();
324
- LocalDate serviceDate = args .getGraphQLServiceDate () != null
325
- ? ServiceDateUtils .parseString (args .getGraphQLServiceDate ())
326
- : LocalDate .now (timeZone );
327
-
328
- TripPattern tripPattern = transitService .getPatternForTrip (trip , serviceDate );
329
- // no matching pattern found
330
- if (tripPattern == null ) {
331
- return List .of ();
332
- }
333
-
334
- Instant midnight = ServiceDateUtils .asStartOfService (serviceDate , timeZone ).toInstant ();
335
- Timetable timetable = transitService .getTimetableForTripPattern (tripPattern , serviceDate );
336
- return TripTimeOnDate .fromTripTimes (timetable , trip , serviceDate , midnight );
337
- } catch (ParseException e ) {
338
- return null ; // Invalid date format
339
- }
264
+ TransitService transitService = getTransitService (environment );
265
+ Trip trip = getSource (environment );
266
+ var args = new GraphQLTypes .GraphQLTripStoptimesForDateArgs (environment .getArguments ());
267
+
268
+ ZoneId timeZone = transitService .getTimeZone ();
269
+ LocalDate serviceDate = args .getGraphQLServiceDate () != null
270
+ ? ServiceDateUtils .parseString (args .getGraphQLServiceDate ())
271
+ : LocalDate .now (timeZone );
272
+
273
+ return transitService .getTripTimeOnDates (trip , serviceDate ).orElse (null );
340
274
};
341
275
}
342
276
@@ -400,6 +334,15 @@ private TripPattern getTripPattern(DataFetchingEnvironment environment) {
400
334
return getTransitService (environment ).getPatternForTrip (environment .getSource ());
401
335
}
402
336
337
+ private TripPattern getTripPattern (
338
+ DataFetchingEnvironment environment ,
339
+ @ Nullable LocalDate date
340
+ ) {
341
+ return date == null
342
+ ? getTripPattern (environment )
343
+ : getTransitService (environment ).getPatternForTrip (environment .getSource (), date );
344
+ }
345
+
403
346
private TransitService getTransitService (DataFetchingEnvironment environment ) {
404
347
return environment .<GraphQLRequestContext >getContext ().transitService ();
405
348
}
@@ -408,6 +351,16 @@ private RealtimeVehicleService getRealtimeVehiclesService(DataFetchingEnvironmen
408
351
return environment .<GraphQLRequestContext >getContext ().realTimeVehicleService ();
409
352
}
410
353
354
+ private static Optional <LocalDate > getOptionalServiceDateArgument (
355
+ DataFetchingEnvironment environment
356
+ ) throws ParseException {
357
+ var args = new GraphQLTypes .GraphQLTripArrivalStoptimeArgs (environment .getArguments ());
358
+ if (args .getGraphQLServiceDate () != null ) {
359
+ return Optional .of (ServiceDateUtils .parseString (args .getGraphQLServiceDate ()));
360
+ }
361
+ return Optional .empty ();
362
+ }
363
+
411
364
private Trip getSource (DataFetchingEnvironment environment ) {
412
365
return environment .getSource ();
413
366
}
0 commit comments