Search in sources :

Example 1 with StopTimeUpdate

use of com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate in project onebusaway-application-modules by camsys.

the class TripUpdateConvertor method readFeedEntity.

@Override
public TripUpdateModel readFeedEntity(FeedEntity entity, long timestamp) {
    if (entity.hasTripUpdate()) {
        TripUpdateModel tu = new TripUpdateModel();
        TripDescriptor t = entity.getTripUpdate().getTrip();
        if (entity.getTripUpdate().hasTimestamp()) {
            timestamp = entity.getTripUpdate().getTimestamp() * 1000;
        }
        tu.setTimestamp(new Date(timestamp));
        if (entity.getTripUpdate().hasDelay()) {
            tu.setDelay(entity.getTripUpdate().getDelay());
        }
        if (t.hasTripId())
            tu.setTripId(t.getTripId());
        if (t.hasRouteId()) {
            tu.setRouteId(t.getRouteId());
        }
        if (t.hasStartDate() && t.hasStartTime()) {
            tu.setTripStart(GtfsRealtimeConversionLibrary.parseDate(t.getStartDate(), t.getStartTime()));
        }
        tu.setScheduleRelationship(findRelationship(t));
        VehicleDescriptor vehicle = entity.getTripUpdate().getVehicle();
        if (vehicle != null) {
            tu.setVehicleId(vehicle.getId());
            tu.setVehicleLabel(vehicle.getLabel());
            tu.setVehicleLicensePlate(vehicle.getLicensePlate());
        }
        for (StopTimeUpdate stu : entity.getTripUpdate().getStopTimeUpdateList()) {
            StopTimeUpdateModel stopTimeUpdate = readStopTimeUpdate(stu, tu.getScheduleRelationship());
            if (stopTimeUpdate != null) {
                stopTimeUpdate.setTripUpdateModel(tu);
                tu.addStopTimeUpdateModel(stopTimeUpdate);
            }
        }
        return tu;
    }
    return null;
}
Also used : StopTimeUpdateModel(org.onebusaway.gtfs_realtime.model.StopTimeUpdateModel) TripDescriptor(com.google.transit.realtime.GtfsRealtime.TripDescriptor) StopTimeUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate) VehicleDescriptor(com.google.transit.realtime.GtfsRealtime.VehicleDescriptor) Date(java.util.Date) TripUpdateModel(org.onebusaway.gtfs_realtime.model.TripUpdateModel)

Example 2 with StopTimeUpdate

use of com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate in project onebusaway-application-modules by camsys.

the class GtfsRealtimeServiceImpl method getTripUpdates.

@Override
public FeedMessage getTripUpdates() {
    FeedMessage.Builder feedMessage = createFeedWithDefaultHeader();
    List<BlockLocation> activeBlocks = _blockStatusService.getAllActiveBlocks(SystemTime.currentTimeMillis());
    for (BlockLocation activeBlock : activeBlocks) {
        // Only interested in blocks with real-time data
        if (!activeBlock.isPredicted())
            continue;
        // Only interested in blocks with a next stop
        BlockStopTimeEntry nextBlockStop = activeBlock.getNextStop();
        if (nextBlockStop == null)
            continue;
        // Only interested in blocks with a schedule deviation set
        if (!activeBlock.isScheduleDeviationSet())
            continue;
        TripUpdate.Builder tripUpdate = TripUpdate.newBuilder();
        BlockTripEntry activeBlockTrip = nextBlockStop.getTrip();
        TripEntry activeTrip = activeBlockTrip.getTrip();
        if (activeBlock.getTimepointPredictions() != null && activeBlock.getTimepointPredictions().size() > 0) {
            // If multiple stoptime predictions were originally obtained,
            // pass them through as received
            List<TimepointPredictionRecord> timepointPredictions = activeBlock.getTimepointPredictions();
            for (TimepointPredictionRecord tpr : timepointPredictions) {
                StopTimeUpdate.Builder stopTimeUpdate = StopTimeUpdate.newBuilder();
                stopTimeUpdate.setStopId(AgencyAndId.convertToString(tpr.getTimepointId()));
                stopTimeUpdate.setScheduleRelationship(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate.ScheduleRelationship.SCHEDULED);
                if (tpr.getTimepointPredictedArrivalTime() != -1) {
                    StopTimeEvent.Builder arrivalStopTimeEvent = StopTimeEvent.newBuilder();
                    arrivalStopTimeEvent.setTime(tpr.getTimepointPredictedArrivalTime());
                    stopTimeUpdate.setArrival(arrivalStopTimeEvent);
                }
                if (tpr.getTimepointPredictedDepartureTime() != -1) {
                    StopTimeEvent.Builder departureStopTimeEvent = StopTimeEvent.newBuilder();
                    departureStopTimeEvent.setTime(tpr.getTimepointPredictedDepartureTime());
                    stopTimeUpdate.setDeparture(departureStopTimeEvent);
                }
                tripUpdate.addStopTimeUpdate(stopTimeUpdate);
            }
        } else {
            // No matter what our active trip is, we let our current trip be the the
            // trip of our next stop
            StopTimeEntry nextStopTime = nextBlockStop.getStopTime();
            StopEntry stop = nextStopTime.getStop();
            StopTimeUpdate.Builder stopTimeUpdate = StopTimeUpdate.newBuilder();
            stopTimeUpdate.setStopId(AgencyAndId.convertToString(stop.getId()));
            stopTimeUpdate.setStopSequence(nextStopTime.getSequence());
            stopTimeUpdate.setScheduleRelationship(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate.ScheduleRelationship.SCHEDULED);
            StopTimeEvent.Builder stopTimeEvent = StopTimeEvent.newBuilder();
            stopTimeEvent.setDelay((int) activeBlock.getScheduleDeviation());
            stopTimeUpdate.setDeparture(stopTimeEvent);
            tripUpdate.addStopTimeUpdate(stopTimeUpdate);
        }
        AgencyAndId routeId = activeTrip.getRouteCollection().getId();
        AgencyAndId tripId = activeTrip.getId();
        BlockInstance blockInstance = activeBlock.getBlockInstance();
        String startDate = String.format("%1$ty%1$tm%1$td", new Date(blockInstance.getServiceDate()));
        TripDescriptor.Builder tripDescriptor = TripDescriptor.newBuilder();
        tripDescriptor.setRouteId(AgencyAndId.convertToString(routeId));
        tripDescriptor.setScheduleRelationship(ScheduleRelationship.SCHEDULED);
        tripDescriptor.setStartDate(startDate);
        tripDescriptor.setTripId(AgencyAndId.convertToString(tripId));
        tripUpdate.setTrip(tripDescriptor);
        AgencyAndId vehicleId = activeBlock.getVehicleId();
        VehicleDescriptor.Builder vehicleDescriptor = VehicleDescriptor.newBuilder();
        vehicleDescriptor.setId(AgencyAndId.convertToString(vehicleId));
        tripUpdate.setVehicle(vehicleDescriptor);
        FeedEntity.Builder feedEntity = FeedEntity.newBuilder();
        feedEntity.setTripUpdate(tripUpdate);
        feedEntity.setId(vehicleDescriptor.getId());
        feedMessage.addEntity(feedEntity);
    }
    return feedMessage.build();
}
Also used : AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) ServiceAlertLocalizedString(org.onebusaway.transit_data_federation.impl.service_alerts.ServiceAlertLocalizedString) BlockLocation(org.onebusaway.transit_data_federation.services.realtime.BlockLocation) StopTimeUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate) Date(java.util.Date) StopTimeEvent(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeEvent) BlockInstance(org.onebusaway.transit_data_federation.services.blocks.BlockInstance) TimepointPredictionRecord(org.onebusaway.realtime.api.TimepointPredictionRecord)

Example 3 with StopTimeUpdate

use of com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate in project onebusaway-application-modules by camsys.

the class GtfsRealtimeTripLibrary method applyTripUpdatesToRecord.

private void applyTripUpdatesToRecord(MonitoredResult result, BlockDescriptor blockDescriptor, List<TripUpdate> tripUpdates, VehicleLocationRecord record, String vehicleId, String bestTripId) {
    BlockInstance instance = blockDescriptor.getBlockInstance();
    BlockConfigurationEntry blockConfiguration = instance.getBlock();
    List<BlockTripEntry> blockTrips = blockConfiguration.getTrips();
    Map<String, List<TripUpdate>> tripUpdatesByTripId = MappingLibrary.mapToValueList(tripUpdates, "trip.tripId");
    long t = currentTime();
    int currentTime = (int) ((t - instance.getServiceDate()) / 1000);
    BestScheduleDeviation best = new BestScheduleDeviation();
    long lastStopScheduleTime = Long.MIN_VALUE;
    boolean singleTimepointRecord = false;
    List<TimepointPredictionRecord> timepointPredictions = new ArrayList<TimepointPredictionRecord>();
    for (BlockTripEntry blockTrip : blockTrips) {
        TripEntry trip = blockTrip.getTrip();
        AgencyAndId tripId = trip.getId();
        List<TripUpdate> updatesForTrip = tripUpdatesByTripId.get(tripId.getId());
        boolean tripUpdateHasDelay = false;
        // onBestTrip is only relevant if bestTripId is set, which indicates that the TripUpdates
        // came from the vehicleId map (as opposed to block index).
        boolean onBestTrip = bestTripId == null || tripId.getId().equals(bestTripId);
        if (updatesForTrip != null) {
            for (TripUpdate tripUpdate : updatesForTrip) {
                /**
                 * TODO: delete this code once all upstream systems have been
                 * migrated the new "delay" and "timestamp" fields.
                 */
                if (tripUpdate.hasExtension(GtfsRealtimeOneBusAway.obaTripUpdate) && onBestTrip) {
                    OneBusAwayTripUpdate obaTripUpdate = tripUpdate.getExtension(GtfsRealtimeOneBusAway.obaTripUpdate);
                    if (obaTripUpdate.hasDelay()) {
                        /**
                         * TODO: Improved logic around picking the "best" schedule deviation
                         */
                        int delay = obaTripUpdate.getDelay();
                        best.delta = 0;
                        best.isInPast = false;
                        best.scheduleDeviation = delay;
                        best.tripId = tripId;
                        tripUpdateHasDelay = true;
                    }
                    if (obaTripUpdate.hasTimestamp() && onBestTrip) {
                        best.timestamp = obaTripUpdate.getTimestamp() * 1000;
                    }
                }
                if (tripUpdate.hasDelay() && onBestTrip) {
                    /**
                     * TODO: Improved logic around picking the "best" schedule deviation
                     */
                    best.delta = 0;
                    best.isInPast = false;
                    best.scheduleDeviation = tripUpdate.getDelay();
                    best.tripId = tripId;
                    tripUpdateHasDelay = true;
                }
                if (tripUpdate.hasTimestamp() && onBestTrip) {
                    best.timestamp = tripUpdate.getTimestamp() * 1000;
                }
                for (StopTimeUpdate stopTimeUpdate : tripUpdate.getStopTimeUpdateList()) {
                    BlockStopTimeEntry blockStopTime = getBlockStopTimeForStopTimeUpdate(result, tripUpdate, stopTimeUpdate, blockTrip.getStopTimes(), instance.getServiceDate());
                    // loop through and store last stop time on trip
                    List<BlockStopTimeEntry> stopTimes = blockTrip.getStopTimes();
                    for (BlockStopTimeEntry bste : stopTimes) {
                        long scheduleTime = instance.getServiceDate() + bste.getStopTime().getArrivalTime() * 1000;
                        if (scheduleTime > lastStopScheduleTime) {
                            lastStopScheduleTime = scheduleTime;
                        }
                    }
                    if (blockStopTime == null)
                        continue;
                    StopTimeEntry stopTime = blockStopTime.getStopTime();
                    TimepointPredictionRecord tpr = new TimepointPredictionRecord();
                    tpr.setTimepointId(stopTime.getStop().getId());
                    tpr.setTripId(stopTime.getTrip().getId());
                    tpr.setTimepointScheduledTime(instance.getServiceDate() + stopTime.getArrivalTime() * 1000);
                    if (stopTimeUpdate.hasStopSequence()) {
                        tpr.setStopSequence(stopTimeUpdate.getStopSequence());
                    }
                    int currentArrivalTime = computeArrivalTime(stopTime, stopTimeUpdate, instance.getServiceDate());
                    int currentDepartureTime = computeDepartureTime(stopTime, stopTimeUpdate, instance.getServiceDate());
                    if (currentArrivalTime >= 0) {
                        if (onBestTrip) {
                            updateBestScheduleDeviation(currentTime, stopTime.getArrivalTime(), currentArrivalTime, best, tripId, vehicleId);
                        }
                        long timepointPredictedTime = instance.getServiceDate() + (currentArrivalTime * 1000L);
                        tpr.setTimepointPredictedArrivalTime(timepointPredictedTime);
                    }
                    if (currentDepartureTime >= 0) {
                        if (onBestTrip) {
                            updateBestScheduleDeviation(currentTime, stopTime.getDepartureTime(), currentDepartureTime, best, tripId, vehicleId);
                        }
                        long timepointPredictedTime = instance.getServiceDate() + (currentDepartureTime * 1000L);
                        tpr.setTimepointPredictedDepartureTime(timepointPredictedTime);
                    }
                    if (tpr.getTimepointPredictedArrivalTime() != -1 || tpr.getTimepointPredictedDepartureTime() != -1) {
                        timepointPredictions.add(tpr);
                    }
                }
            }
        }
        if (timepointPredictions.size() == 1 && tripUpdates.get(0).getStopTimeUpdateList().size() == 1) {
            singleTimepointRecord = true;
        }
        // tripUpdateHasDelay = true => best.scheduleDeviation is TripUpdate delay
        if ((timepointPredictions.size() > 0 && tripUpdateHasDelay) || singleTimepointRecord) {
            Set<AgencyAndId> records = new HashSet<AgencyAndId>();
            for (TimepointPredictionRecord tpr : timepointPredictions) {
                records.add(tpr.getTimepointId());
            }
            long tprStartTime = getEarliestTimeInRecords(timepointPredictions);
            for (StopTimeEntry stopTime : trip.getStopTimes()) {
                if (records.contains(stopTime.getStop().getId())) {
                    continue;
                }
                long predictionOffset = instance.getServiceDate() + (best.scheduleDeviation * 1000L);
                long predictedDepartureTime = (stopTime.getDepartureTime() * 1000L) + predictionOffset;
                long predictedArrivalTime = (stopTime.getArrivalTime() * 1000L) + predictionOffset;
                long scheduledArrivalTime = instance.getServiceDate() + stopTime.getArrivalTime() * 1000;
                long time = best.timestamp != 0 ? best.timestamp : currentTime();
                /*
             * if the timpepointrecord needs interpolated (one before, one after),
             * OR
             * we have a single Timepoint record and the arrival is
              * in the future and before the last stop
             */
                if ((predictedDepartureTime > time && predictedDepartureTime < tprStartTime) || (singleTimepointRecord && (predictedDepartureTime > time && scheduledArrivalTime <= lastStopScheduleTime))) {
                    TimepointPredictionRecord tpr = new TimepointPredictionRecord();
                    tpr.setTimepointId(stopTime.getStop().getId());
                    tpr.setTripId(stopTime.getTrip().getId());
                    tpr.setStopSequence(stopTime.getGtfsSequence());
                    tpr.setTimepointPredictedArrivalTime(predictedArrivalTime);
                    tpr.setTimepointPredictedDepartureTime(predictedDepartureTime);
                    tpr.setTimepointScheduledTime(scheduledArrivalTime);
                    timepointPredictions.add(tpr);
                }
            }
        }
    }
    record.setServiceDate(instance.getServiceDate());
    if (blockDescriptor.getStartTime() != null) {
        record.setBlockStartTime(blockDescriptor.getStartTime());
    }
    record.setScheduleDeviation(best.scheduleDeviation);
    if (best.timestamp != 0) {
        record.setTimeOfRecord(best.timestamp);
    }
    record.setTimepointPredictions(timepointPredictions);
}
Also used : AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) BlockTripEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockTripEntry) ArrayList(java.util.ArrayList) StopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.StopTimeEntry) BlockStopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockStopTimeEntry) StopTimeUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate) List(java.util.List) ArrayList(java.util.ArrayList) BlockConfigurationEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry) BlockStopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockStopTimeEntry) HashSet(java.util.HashSet) TripUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate) OneBusAwayTripUpdate(com.google.transit.realtime.GtfsRealtimeOneBusAway.OneBusAwayTripUpdate) TripEntry(org.onebusaway.transit_data_federation.services.transit_graph.TripEntry) BlockTripEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockTripEntry) CoordinatePoint(org.onebusaway.geospatial.model.CoordinatePoint) BlockInstance(org.onebusaway.transit_data_federation.services.blocks.BlockInstance) TimepointPredictionRecord(org.onebusaway.realtime.api.TimepointPredictionRecord) OneBusAwayTripUpdate(com.google.transit.realtime.GtfsRealtimeOneBusAway.OneBusAwayTripUpdate)

Example 4 with StopTimeUpdate

use of com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate in project onebusaway-application-modules by camsys.

the class TripUpdatesForAgencyActionTest method test.

@Test
public void test() {
    long now = System.currentTimeMillis();
    List<VehicleStatusBean> vehicles = new ArrayList<VehicleStatusBean>();
    RouteBean.Builder routeBuilder = RouteBean.builder();
    routeBuilder.setId("1_r1");
    RouteBean route = routeBuilder.create();
    {
        VehicleStatusBean vehicle = new VehicleStatusBean();
        vehicles.add(vehicle);
        vehicle.setLastUpdateTime(1234 * 1000);
        vehicle.setVehicleId("1_v1");
        TripStatusBean tripStatus = new TripStatusBean();
        vehicle.setTripStatus(tripStatus);
        tripStatus.setScheduleDeviation(2 * 60);
        TripBean trip = new TripBean();
        trip.setId("1_t0");
        trip.setRoute(route);
        tripStatus.setActiveTrip(trip);
        StopBean stop = new StopBean();
        stop.setId("1_s2");
        tripStatus.setNextStop(stop);
        tripStatus.setNextStopTimeOffset(5 * 60);
    }
    {
        VehicleStatusBean vehicle = new VehicleStatusBean();
        vehicles.add(vehicle);
        vehicle.setLastUpdateTime(5678 * 1000);
        vehicle.setVehicleId("1_v2");
        TripStatusBean tripStatus = new TripStatusBean();
        vehicle.setTripStatus(tripStatus);
        tripStatus.setScheduleDeviation(3 * 60);
        TripBean trip = new TripBean();
        trip.setId("1_t1");
        trip.setRoute(route);
        tripStatus.setActiveTrip(trip);
        StopBean stop = new StopBean();
        stop.setId("1_s3");
        tripStatus.setNextStop(stop);
        tripStatus.setNextStopTimeOffset(10 * 60);
    }
    ListBean<VehicleStatusBean> bean = new ListBean<VehicleStatusBean>();
    bean.setList(vehicles);
    Mockito.when(_service.getAllVehiclesForAgency("1", now)).thenReturn(bean);
    _action.setId("1");
    _action.setTime(new Date(now));
    _action.show();
    ResponseBean model = _action.getModel();
    FeedMessage feed = (FeedMessage) model.getData();
    assertEquals(now / 1000, feed.getHeader().getTimestamp());
    assertEquals(2, feed.getEntityCount());
    {
        FeedEntity entity = feed.getEntity(0);
        assertEquals("1", entity.getId());
        TripUpdate tripUpdate = entity.getTripUpdate();
        assertEquals("t0", tripUpdate.getTrip().getTripId());
        assertEquals("r1", tripUpdate.getTrip().getRouteId());
        assertEquals("v1", tripUpdate.getVehicle().getId());
        assertEquals(1234, tripUpdate.getTimestamp());
        assertEquals(120, tripUpdate.getDelay());
        assertEquals(1, tripUpdate.getStopTimeUpdateCount());
        StopTimeUpdate stopTimeUpdate = tripUpdate.getStopTimeUpdate(0);
        assertEquals("s2", stopTimeUpdate.getStopId());
        assertEquals(now / 1000 + 5 * 60, stopTimeUpdate.getDeparture().getTime());
    }
    {
        FeedEntity entity = feed.getEntity(1);
        assertEquals("2", entity.getId());
        TripUpdate tripUpdate = entity.getTripUpdate();
        assertEquals("t1", tripUpdate.getTrip().getTripId());
        assertEquals("r1", tripUpdate.getTrip().getRouteId());
        assertEquals("v2", tripUpdate.getVehicle().getId());
        assertEquals(5678, tripUpdate.getTimestamp());
        assertEquals(180, tripUpdate.getDelay());
        assertEquals(1, tripUpdate.getStopTimeUpdateCount());
        StopTimeUpdate stopTimeUpdate = tripUpdate.getStopTimeUpdate(0);
        assertEquals("s3", stopTimeUpdate.getStopId());
        assertEquals(now / 1000 + 10 * 60, stopTimeUpdate.getDeparture().getTime());
    }
}
Also used : TripUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate) ArrayList(java.util.ArrayList) ListBean(org.onebusaway.transit_data.model.ListBean) TripBean(org.onebusaway.transit_data.model.trips.TripBean) Date(java.util.Date) VehicleStatusBean(org.onebusaway.transit_data.model.VehicleStatusBean) RouteBean(org.onebusaway.transit_data.model.RouteBean) FeedMessage(com.google.transit.realtime.GtfsRealtime.FeedMessage) StopTimeUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate) StopBean(org.onebusaway.transit_data.model.StopBean) ResponseBean(org.onebusaway.api.model.ResponseBean) TripStatusBean(org.onebusaway.transit_data.model.trips.TripStatusBean) FeedEntity(com.google.transit.realtime.GtfsRealtime.FeedEntity) Test(org.junit.Test)

Example 5 with StopTimeUpdate

use of com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate in project onebusaway-application-modules by camsys.

the class GtfsRealtimeTripLibraryTest method testStopRewriting.

@Test
public void testStopRewriting() {
    StopTimeUpdate.Builder stopTimeUpdate = StopTimeUpdate.newBuilder();
    stopTimeUpdate.setStopId("replaceA");
    StopTimeEvent.Builder stopTimeEvent = StopTimeEvent.newBuilder();
    stopTimeEvent.setDelay(180);
    stopTimeUpdate.setDeparture(stopTimeEvent);
    stopTimeUpdate.setStopSequence(0);
    TripUpdate tripUpdate = TripUpdate.newBuilder().setTrip(TripDescriptor.newBuilder().setTripId("tripA")).setDelay(120).setTimestamp(123456789).addStopTimeUpdate(stopTimeUpdate).build();
    TripEntryImpl tripA = trip("tripA");
    stopTime(0, stop("stopA", 0, 0), tripA, time(7, 30), 0.0);
    BlockEntryImpl blockA = block("blockA");
    BlockConfigurationEntry blockConfigA = blockConfiguration(blockA, serviceIds("s1"), tripA);
    BlockInstance blockInstanceA = new BlockInstance(blockConfigA, 0L);
    Mockito.when(_blockCalendarService.getActiveBlocks(Mockito.eq(blockA.getId()), Mockito.anyLong(), Mockito.anyLong())).thenReturn(Collections.singletonList(blockInstanceA));
    CombinedTripUpdatesAndVehiclePosition update = new CombinedTripUpdatesAndVehiclePosition();
    update.block = new BlockDescriptor();
    update.block.setBlockInstance(blockInstanceA);
    update.tripUpdates = Collections.singletonList(tripUpdate);
    StopModificationStrategy strategy = Mockito.mock(StopModificationStrategy.class);
    Mockito.when(strategy.convertStopId("replaceA")).thenReturn("stopA");
    _library.setStopModificationStrategy(strategy);
    VehicleLocationRecord record = _library.createVehicleLocationRecordForUpdate(update);
    assertEquals(123456789000L, record.getTimeOfRecord());
    assertEquals(120, record.getScheduleDeviation(), 0.0);
    TimepointPredictionRecord tpr = record.getTimepointPredictions().get(0);
    long departure = tpr.getTimepointPredictedDepartureTime();
    assertEquals(departure, time(7, 33) * 1000);
}
Also used : TripUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate) TripEntryImpl(org.onebusaway.transit_data_federation.impl.transit_graph.TripEntryImpl) StopTimeEvent(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeEvent) BlockInstance(org.onebusaway.transit_data_federation.services.blocks.BlockInstance) StopTimeUpdate(com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate) VehicleLocationRecord(org.onebusaway.realtime.api.VehicleLocationRecord) TimepointPredictionRecord(org.onebusaway.realtime.api.TimepointPredictionRecord) BlockEntryImpl(org.onebusaway.transit_data_federation.impl.transit_graph.BlockEntryImpl) BlockConfigurationEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry) Test(org.junit.Test)

Aggregations

StopTimeUpdate (com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeUpdate)15 TripUpdate (com.google.transit.realtime.GtfsRealtime.TripUpdate)9 BlockInstance (org.onebusaway.transit_data_federation.services.blocks.BlockInstance)8 Test (org.junit.Test)7 BlockConfigurationEntry (org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry)7 VehicleLocationRecord (org.onebusaway.realtime.api.VehicleLocationRecord)6 BlockEntryImpl (org.onebusaway.transit_data_federation.impl.transit_graph.BlockEntryImpl)6 TripEntryImpl (org.onebusaway.transit_data_federation.impl.transit_graph.TripEntryImpl)6 StopTimeEvent (com.google.transit.realtime.GtfsRealtime.TripUpdate.StopTimeEvent)5 TimepointPredictionRecord (org.onebusaway.realtime.api.TimepointPredictionRecord)5 ArrayList (java.util.ArrayList)4 Date (java.util.Date)4 TripDescriptor (com.google.transit.realtime.GtfsRealtime.TripDescriptor)3 FeedMessage (com.google.transit.realtime.GtfsRealtime.FeedMessage)2 VehicleDescriptor (com.google.transit.realtime.GtfsRealtime.VehicleDescriptor)2 AgencyAndId (org.onebusaway.gtfs.model.AgencyAndId)2 Stop (org.onebusaway.gtfs.model.Stop)2 StopTimeUpdateModel (org.onebusaway.gtfs_realtime.model.StopTimeUpdateModel)2 TripTimes (org.opentripplanner.routing.trippattern.TripTimes)2 FeedEntity (com.google.transit.realtime.GtfsRealtime.FeedEntity)1