populateArrivalAndDepartureTimesByDistanceTravelledForStopTimes(stopTimes,
distanceTraveled, scheduleTimesByDistanceTraveled);
for (int i = 0; i < stopTimes.size(); i++) {
StopTime stopTime = stopTimes.get(i);
double d = distanceTraveled[i];
boolean hasDeparture = stopTime.isDepartureTimeSet();
boolean hasArrival = stopTime.isArrivalTimeSet();
int departureTime = stopTime.getDepartureTime();
int arrivalTime = stopTime.getArrivalTime();
if (hasDeparture && !hasArrival) {
arrivalTime = departureTime;
} else if (hasArrival && !hasDeparture) {
departureTime = arrivalTime;
} else if (!hasArrival && !hasDeparture) {
int t = departureTimes[i] = (int) InterpolationLibrary.interpolate(
scheduleTimesByDistanceTraveled, d);
arrivalTime = t;
departureTime = t;
}
departureTimes[i] = departureTime;
arrivalTimes[i] = arrivalTime;
if (departureTimes[i] < arrivalTimes[i])
throw new IllegalStateException(
"departure time is less than arrival time for stop time with trip_id="
+ stopTime.getTrip().getId() + " stop_sequence="
+ stopTime.getStopSequence());
if (i > 0 && arrivalTimes[i] < departureTimes[i - 1]) {
/**
* The previous stop time's departure time comes AFTER this stop time's
* arrival time. That's bad.
*/
StopTime prevStopTime = stopTimes.get(i - 1);
Stop prevStop = prevStopTime.getStop();
Stop stop = stopTime.getStop();
if (prevStop.equals(stop)
&& arrivalTimes[i] == departureTimes[i - 1] - 1) {
_log.info("fixing decreasing passingTimes: stopTimeA="
+ prevStopTime.getId() + " stopTimeB=" + stopTime.getId());
arrivalTimes[i] = departureTimes[i - 1];
if (departureTimes[i] < arrivalTimes[i])
departureTimes[i] = arrivalTimes[i];
} else {
for (int x = 0; x < stopTimes.size(); x++) {
StopTime st = stopTimes.get(x);
System.err.println(x + " " + st.getId() + " " + arrivalTimes[x]
+ " " + departureTimes[x]);
}
throw new IllegalStateException(
"arrival time is less than previous departure time for stop time with trip_id="
+ stopTime.getTrip().getId() + " stop_sequence="