-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
523ac2b
commit b06a3e3
Showing
6 changed files
with
141 additions
and
163 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
111 changes: 105 additions & 6 deletions
111
src/test/java/org/opentripplanner/updater/trip/RealtimeTestEnvironmentBuilder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,129 @@ | ||
package org.opentripplanner.updater.trip; | ||
|
||
import static org.opentripplanner.transit.model._data.TransitModelForTest.id; | ||
|
||
import java.util.List; | ||
import java.util.Objects; | ||
import java.util.stream.IntStream; | ||
import org.opentripplanner.framework.i18n.I18NString; | ||
import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; | ||
import org.opentripplanner.model.StopTime; | ||
import org.opentripplanner.model.calendar.CalendarServiceData; | ||
import org.opentripplanner.transit.model._data.TransitModelForTest; | ||
import org.opentripplanner.transit.model.framework.Deduplicator; | ||
import org.opentripplanner.transit.model.network.Route; | ||
import org.opentripplanner.transit.model.network.TripPattern; | ||
import org.opentripplanner.transit.model.site.RegularStop; | ||
import org.opentripplanner.transit.model.site.StopLocation; | ||
import org.opentripplanner.transit.model.timetable.Trip; | ||
import org.opentripplanner.transit.model.timetable.TripOnServiceDate; | ||
import org.opentripplanner.transit.model.timetable.TripTimes; | ||
import org.opentripplanner.transit.model.timetable.TripTimesFactory; | ||
import org.opentripplanner.transit.service.TransitModel; | ||
|
||
public class RealtimeTestEnvironmentBuilder { | ||
public class RealtimeTestEnvironmentBuilder implements RealtimeTestConstants { | ||
|
||
private RealtimeTestEnvironment.SourceType sourceType; | ||
private boolean withTrip1 = false; | ||
private boolean withTrip2 = false; | ||
private final TransitModel transitModel = new TransitModel(STOP_MODEL, new Deduplicator()); | ||
|
||
RealtimeTestEnvironmentBuilder withSourceType(RealtimeTestEnvironment.SourceType sourceType) { | ||
this.sourceType = sourceType; | ||
return this; | ||
} | ||
|
||
public RealtimeTestEnvironmentBuilder withTrip1() { | ||
withTrip1 = true; | ||
createTrip( | ||
TRIP_1_ID, | ||
ROUTE_1, | ||
List.of(new StopCall(STOP_A1, 10, 11), new StopCall(STOP_B1, 20, 21)) | ||
); | ||
transitModel.index(); | ||
return this; | ||
} | ||
|
||
public RealtimeTestEnvironmentBuilder withTrip2() { | ||
withTrip2 = true; | ||
createTrip( | ||
TRIP_2_ID, | ||
ROUTE_1, | ||
List.of( | ||
new StopCall(STOP_A1, 60, 61), | ||
new StopCall(STOP_B1, 70, 71), | ||
new StopCall(STOP_C1, 80, 81) | ||
) | ||
); | ||
|
||
transitModel.index(); | ||
return this; | ||
} | ||
|
||
public RealtimeTestEnvironment build() { | ||
Objects.requireNonNull(sourceType, "sourceType cannot be null"); | ||
return new RealtimeTestEnvironment(sourceType, withTrip1, withTrip2); | ||
transitModel.initTimeZone(TIME_ZONE); | ||
transitModel.addAgency(TransitModelForTest.AGENCY); | ||
|
||
CalendarServiceData calendarServiceData = new CalendarServiceData(); | ||
calendarServiceData.putServiceDatesForServiceId( | ||
SERVICE_ID, | ||
List.of(SERVICE_DATE.minusDays(1), SERVICE_DATE, SERVICE_DATE.plusDays(1)) | ||
); | ||
transitModel.getServiceCodes().put(SERVICE_ID, 0); | ||
transitModel.updateCalendarServiceData(true, calendarServiceData, DataImportIssueStore.NOOP); | ||
|
||
return new RealtimeTestEnvironment(sourceType, transitModel); | ||
} | ||
|
||
private Trip createTrip(String id, Route route, List<StopCall> stops) { | ||
var trip = Trip | ||
.of(id(id)) | ||
.withRoute(route) | ||
.withHeadsign(I18NString.of("Headsign of %s".formatted(id))) | ||
.withServiceId(SERVICE_ID) | ||
.build(); | ||
|
||
var tripOnServiceDate = TripOnServiceDate | ||
.of(trip.getId()) | ||
.withTrip(trip) | ||
.withServiceDate(SERVICE_DATE) | ||
.build(); | ||
|
||
transitModel.addTripOnServiceDate(tripOnServiceDate.getId(), tripOnServiceDate); | ||
|
||
var stopTimes = IntStream | ||
.range(0, stops.size()) | ||
.mapToObj(i -> { | ||
var stop = stops.get(i); | ||
return createStopTime(trip, i, stop.stop(), stop.arrivalTime(), stop.departureTime()); | ||
}) | ||
.toList(); | ||
|
||
TripTimes tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, null); | ||
|
||
final TripPattern pattern = TransitModelForTest | ||
.tripPattern(id + "Pattern", route) | ||
.withStopPattern(TransitModelForTest.stopPattern(stops.stream().map(StopCall::stop).toList())) | ||
.build(); | ||
pattern.add(tripTimes); | ||
|
||
transitModel.addTripPattern(pattern.getId(), pattern); | ||
|
||
return trip; | ||
} | ||
|
||
private static StopTime createStopTime( | ||
Trip trip, | ||
int stopSequence, | ||
StopLocation stop, | ||
int arrivalTime, | ||
int departureTime | ||
) { | ||
var st = new StopTime(); | ||
st.setTrip(trip); | ||
st.setStopSequence(stopSequence); | ||
st.setStop(stop); | ||
st.setArrivalTime(arrivalTime); | ||
st.setDepartureTime(departureTime); | ||
return st; | ||
} | ||
|
||
private record StopCall(RegularStop stop, int arrivalTime, int departureTime) {} | ||
} |
Oops, something went wrong.