Search in sources :

Example 1 with VehicleStatusBean

use of org.onebusaway.transit_data.model.VehicleStatusBean in project onebusaway-application-modules by camsys.

the class VehicleStatusBeanServiceImpl method getAllVehiclesForAgency.

@Override
public ListBean<VehicleStatusBean> getAllVehiclesForAgency(String agencyId, long time) {
    List<VehicleStatus> statuses = _vehicleStatusService.getAllVehicleStatuses();
    List<VehicleStatusBean> beans = new ArrayList<VehicleStatusBean>();
    for (VehicleStatus status : statuses) {
        AgencyAndId vid = status.getVehicleId();
        if (!vid.getAgencyId().equals(agencyId))
            continue;
        VehicleStatusBean bean = getStatusAsBean(status, time);
        beans.add(bean);
    }
    return new ListBean<VehicleStatusBean>(beans, false);
}
Also used : AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) ArrayList(java.util.ArrayList) ListBean(org.onebusaway.transit_data.model.ListBean) VehicleStatus(org.onebusaway.transit_data_federation.services.realtime.VehicleStatus) VehicleStatusBean(org.onebusaway.transit_data.model.VehicleStatusBean)

Example 2 with VehicleStatusBean

use of org.onebusaway.transit_data.model.VehicleStatusBean in project onebusaway-application-modules by camsys.

the class VehicleMonitoringAction method index.

// @Override
public String index() {
    processGoogleAnalytics();
    long currentTimestamp = getTime();
    _realtimeService.setTime(currentTimestamp);
    String directionId = _request.getParameter("DirectionRef");
    String tripId = _request.getParameter("TripId");
    boolean showRawLocation = Boolean.valueOf(_request.getParameter("ShowRawLocation"));
    // We need to support the user providing no agency id which means 'all agencies'.
    // So, this array will hold a single agency if the user provides it or all
    // agencies if the user provides none. We'll iterate over them later while
    // querying for vehicles and routes
    List<String> agencyIds = new ArrayList<String>();
    String agencyId = _request.getParameter("OperatorRef");
    if (agencyId != null) {
        agencyIds.add(agencyId);
    } else {
        Map<String, List<CoordinateBounds>> agencies = _transitDataService.getAgencyIdsWithCoverageArea();
        agencyIds.addAll(agencies.keySet());
    }
    List<AgencyAndId> vehicleIds = new ArrayList<AgencyAndId>();
    if (_request.getParameter("VehicleRef") != null) {
        try {
            // If the user included an agency id as part of the vehicle id, ignore any OperatorRef arg
            // or lack of OperatorRef arg and just use the included one.
            AgencyAndId vehicleId = AgencyAndIdLibrary.convertFromString(_request.getParameter("VehicleRef"));
            vehicleIds.add(vehicleId);
        } catch (Exception e) {
            // The user didn't provide an agency id in the VehicleRef, so use our list of operator refs
            for (String agency : agencyIds) {
                AgencyAndId vehicleId = new AgencyAndId(agency, _request.getParameter("VehicleRef"));
                vehicleIds.add(vehicleId);
            }
        }
    }
    List<AgencyAndId> routeIds = new ArrayList<AgencyAndId>();
    String routeIdErrorString = "";
    if (_request.getParameter("LineRef") != null) {
        try {
            // Same as above for vehicle id
            AgencyAndId routeId = AgencyAndIdLibrary.convertFromString(_request.getParameter("LineRef"));
            if (isValidRoute(routeId)) {
                routeIds.add(routeId);
            } else {
                routeIdErrorString += "No such route: " + routeId.toString() + ".";
            }
        } catch (Exception e) {
            // Same as above for vehicle id
            for (String agency : agencyIds) {
                AgencyAndId routeId = new AgencyAndId(agency, _request.getParameter("LineRef"));
                if (isValidRoute(routeId)) {
                    routeIds.add(routeId);
                } else {
                    routeIdErrorString += "No such route: " + routeId.toString() + ". ";
                }
            }
        }
    }
    String detailLevel = _request.getParameter("VehicleMonitoringDetailLevel");
    int maximumOnwardCalls = 0;
    if (detailLevel != null && detailLevel.equals("calls")) {
        maximumOnwardCalls = Integer.MAX_VALUE;
        try {
            maximumOnwardCalls = Integer.parseInt(_request.getParameter("MaximumNumberOfCallsOnwards"));
        } catch (NumberFormatException e) {
            maximumOnwardCalls = Integer.MAX_VALUE;
        }
    }
    // *** CASE 1: single vehicle, ignore any other filters
    if (vehicleIds.size() > 0) {
        List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
        for (AgencyAndId vehicleId : vehicleIds) {
            VehicleActivityStructure activity = _realtimeService.getVehicleActivityForVehicle(vehicleId.toString(), maximumOnwardCalls, currentTimestamp, tripId);
            if (activity != null) {
                activities.add(activity);
            }
        }
        // No vehicle id validation, so we pass null for error
        _response = generateSiriResponse(activities, null, null, currentTimestamp);
    // *** CASE 2: by route, using direction id, if provided
    } else if (_request.getParameter("LineRef") != null) {
        List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
        for (AgencyAndId routeId : routeIds) {
            List<VehicleActivityStructure> activitiesForRoute = _realtimeService.getVehicleActivityForRoute(routeId.toString(), directionId, maximumOnwardCalls, currentTimestamp, showRawLocation);
            if (activitiesForRoute != null) {
                activities.addAll(activitiesForRoute);
            }
        }
        if (vehicleIds.size() > 0) {
            List<VehicleActivityStructure> filteredActivities = new ArrayList<VehicleActivityStructure>();
            for (VehicleActivityStructure activity : activities) {
                MonitoredVehicleJourneyStructure journey = activity.getMonitoredVehicleJourney();
                AgencyAndId thisVehicleId = AgencyAndIdLibrary.convertFromString(journey.getVehicleRef().getValue());
                // user filtering
                if (!vehicleIds.contains(thisVehicleId))
                    continue;
                filteredActivities.add(activity);
            }
            activities = filteredActivities;
        }
        Exception error = null;
        if (_request.getParameter("LineRef") != null && routeIds.size() == 0) {
            error = new Exception(routeIdErrorString.trim());
        }
        _response = generateSiriResponse(activities, routeIds, error, currentTimestamp);
    // *** CASE 3: all vehicles
    } else {
        try {
            int hashKey = _cacheService.hash(maximumOnwardCalls, agencyIds, _type);
            List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
            if (!_cacheService.containsKey(hashKey)) {
                for (String agency : agencyIds) {
                    ListBean<VehicleStatusBean> vehicles = _transitDataService.getAllVehiclesForAgency(agency, currentTimestamp);
                    for (VehicleStatusBean v : vehicles.getList()) {
                        VehicleActivityStructure activity = _realtimeService.getVehicleActivityForVehicle(v.getVehicleId(), maximumOnwardCalls, currentTimestamp, tripId);
                        if (activity != null) {
                            activities.add(activity);
                        }
                    }
                }
                // There is no input (route id) to validate, so pass null error
                _response = generateSiriResponse(activities, null, null, currentTimestamp);
                _cacheService.store(hashKey, getVehicleMonitoring());
            } else {
                _cachedResponse = _cacheService.retrieve(hashKey);
            }
        } catch (Exception e) {
            _log.error("vm all broke:", e);
            throw new RuntimeException(e);
        }
    }
    try {
        this._servletResponse.getWriter().write(getVehicleMonitoring());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
Also used : AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) ArrayList(java.util.ArrayList) ListBean(org.onebusaway.transit_data.model.ListBean) IOException(java.io.IOException) IOException(java.io.IOException) VehicleStatusBean(org.onebusaway.transit_data.model.VehicleStatusBean) MonitoredVehicleJourneyStructure(uk.org.siri.siri.MonitoredVehicleJourneyStructure) ArrayList(java.util.ArrayList) List(java.util.List) VehicleActivityStructure(uk.org.siri.siri.VehicleActivityStructure)

Example 3 with VehicleStatusBean

use of org.onebusaway.transit_data.model.VehicleStatusBean in project onebusaway-application-modules by camsys.

the class VehicleMonitoringV2Action method index.

public DefaultHttpHeaders index() throws IOException {
    long currentTimestamp = getTime();
    processGoogleAnalytics();
    // _monitoringActionSupport.setupGoogleAnalytics(_request, _configurationService);
    _realtimeService.setTime(currentTimestamp);
    String detailLevelParam = _request.getParameter(VEHICLE_MONITORING_DETAIL_LEVEL);
    // get the detail level parameter or set it to default if not specified
    DetailLevel detailLevel;
    if (DetailLevel.contains(detailLevelParam)) {
        detailLevel = DetailLevel.valueOf(detailLevelParam.toUpperCase());
    } else {
        detailLevel = DetailLevel.NORMAL;
    }
    // User Parameters
    String lineRef = _request.getParameter(LINE_REF);
    String vehicleRef = _request.getParameter(VEHICLE_REF);
    String directionId = _request.getParameter(DIRECTION_REF);
    String agencyId = _request.getParameter(OPERATOR_REF);
    String maxOnwardCallsParam = _request.getParameter(MAX_ONWARD_CALLS);
    String maxStopVisitsParam = _request.getParameter(MAX_STOP_VISITS);
    String minStopVisitsParam = _request.getParameter(MIN_STOP_VISITS);
    // Error Strings
    String routeIdsErrorString = "";
    /*
     * We need to support the user providing no agency id which means 'all agencies'.
    So, this array will hold a single agency if the user provides it or all
    agencies if the user provides none. We'll iterate over them later while 
    querying for vehicles and routes
    */
    List<AgencyAndId> routeIds = new ArrayList<AgencyAndId>();
    List<String> agencyIds = processAgencyIds(agencyId);
    List<AgencyAndId> vehicleIds = processVehicleIds(vehicleRef, agencyIds);
    routeIdsErrorString = processRouteIds(lineRef, routeIds, agencyIds);
    int maximumOnwardCalls = 0;
    if (detailLevel.equals(DetailLevel.CALLS)) {
        maximumOnwardCalls = SiriSupportV2.convertToNumeric(maxOnwardCallsParam, Integer.MAX_VALUE);
    }
    String gaLabel = null;
    // *** CASE 1: single vehicle, ignore any other filters
    if (vehicleIds.size() > 0) {
        gaLabel = vehicleRef;
        List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
        try {
            for (AgencyAndId vehicleId : vehicleIds) {
                VehicleActivityStructure activity = _realtimeService.getVehicleActivityForVehicle(vehicleId.toString(), maximumOnwardCalls, detailLevel, currentTimestamp);
                if (activity != null) {
                    activities.add(activity);
                }
            }
        } catch (Exception e) {
            _log.info(e.getMessage(), e);
        }
        // No vehicle id validation, so we pass null for error
        _response = generateSiriResponse(activities, null, null, currentTimestamp);
    // *** CASE 2: by route, using direction id, if provided
    } else if (lineRef != null) {
        gaLabel = lineRef;
        List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
        for (AgencyAndId routeId : routeIds) {
            List<VehicleActivityStructure> activitiesForRoute = _realtimeService.getVehicleActivityForRoute(routeId.toString(), directionId, maximumOnwardCalls, detailLevel, currentTimestamp);
            if (activitiesForRoute != null) {
                activities.addAll(activitiesForRoute);
            }
        }
        if (vehicleIds.size() > 0) {
            List<VehicleActivityStructure> filteredActivities = new ArrayList<VehicleActivityStructure>();
            for (VehicleActivityStructure activity : activities) {
                MonitoredVehicleJourneyStructure journey = activity.getMonitoredVehicleJourney();
                AgencyAndId thisVehicleId = AgencyAndIdLibrary.convertFromString(journey.getVehicleRef().getValue());
                // user filtering
                if (!vehicleIds.contains(thisVehicleId))
                    continue;
                filteredActivities.add(activity);
            }
            activities = filteredActivities;
        }
        Exception error = null;
        if (lineRef != null && routeIds.size() == 0) {
            error = new Exception(routeIdsErrorString.trim());
        }
        _response = generateSiriResponse(activities, routeIds, error, currentTimestamp);
    // *** CASE 3: all vehicles
    } else {
        try {
            gaLabel = "All Vehicles";
            // int hashKey = _siriCacheService.hash(maximumOnwardCalls, agencyIds, _type);
            List<VehicleActivityStructure> activities = new ArrayList<VehicleActivityStructure>();
            // if (!_siriCacheService.containsKey(hashKey)) {
            for (String agency : agencyIds) {
                ListBean<VehicleStatusBean> vehicles = _transitDataService.getAllVehiclesForAgency(agency, currentTimestamp);
                for (VehicleStatusBean v : vehicles.getList()) {
                    VehicleActivityStructure activity = _realtimeService.getVehicleActivityForVehicle(v.getVehicleId(), maximumOnwardCalls, detailLevel, currentTimestamp);
                    if (activity != null) {
                        activities.add(activity);
                    }
                }
            }
            // There is no input (route id) to validate, so pass null error
            _response = generateSiriResponse(activities, null, null, currentTimestamp);
        // _siriCacheService.store(hashKey, getVehicleMonitoring());
        // } else {
        // _cachedResponse = _siriCacheService.retrieve(hashKey);
        // }
        } catch (Exception e) {
            _log.error("vm all broke:", e);
            throw new RuntimeException(e);
        }
    }
    try {
        this._servletResponse.getWriter().write(getVehicleMonitoring());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
Also used : AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) ArrayList(java.util.ArrayList) ListBean(org.onebusaway.transit_data.model.ListBean) IOException(java.io.IOException) IOException(java.io.IOException) VehicleStatusBean(org.onebusaway.transit_data.model.VehicleStatusBean) MonitoredVehicleJourneyStructure(uk.org.siri.siri_2.MonitoredVehicleJourneyStructure) DetailLevel(org.onebusaway.api.actions.siri.model.DetailLevel) ArrayList(java.util.ArrayList) List(java.util.List) VehicleActivityStructure(uk.org.siri.siri_2.VehicleActivityStructure)

Example 4 with VehicleStatusBean

use of org.onebusaway.transit_data.model.VehicleStatusBean in project onebusaway-application-modules by camsys.

the class VehiclePositionsForAgencyActionTest 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);
        TripBean trip = new TripBean();
        trip.setId("1_t0");
        trip.setRoute(route);
        tripStatus.setActiveTrip(trip);
        vehicle.setLocation(new CoordinatePoint(47.0, -122.0));
    }
    {
        VehicleStatusBean vehicle = new VehicleStatusBean();
        vehicles.add(vehicle);
        vehicle.setLastUpdateTime(5678 * 1000);
        vehicle.setVehicleId("1_v2");
        TripStatusBean tripStatus = new TripStatusBean();
        vehicle.setTripStatus(tripStatus);
        TripBean trip = new TripBean();
        trip.setId("1_t1");
        trip.setRoute(route);
        tripStatus.setActiveTrip(trip);
        vehicle.setLocation(new CoordinatePoint(47.1, -122.1));
    }
    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());
        VehiclePosition vehiclePosition = entity.getVehicle();
        assertEquals("t0", vehiclePosition.getTrip().getTripId());
        assertEquals("r1", vehiclePosition.getTrip().getRouteId());
        assertEquals("v1", vehiclePosition.getVehicle().getId());
        assertEquals(1234, vehiclePosition.getTimestamp());
        assertEquals(47.0, vehiclePosition.getPosition().getLatitude(), 0.01);
        assertEquals(-122.0, vehiclePosition.getPosition().getLongitude(), 0.01);
    }
    {
        FeedEntity entity = feed.getEntity(1);
        assertEquals("2", entity.getId());
        VehiclePosition vehiclePosition = entity.getVehicle();
        assertEquals("t1", vehiclePosition.getTrip().getTripId());
        assertEquals("r1", vehiclePosition.getTrip().getRouteId());
        assertEquals("v2", vehiclePosition.getVehicle().getId());
        assertEquals(5678, vehiclePosition.getTimestamp());
        assertEquals(47.1, vehiclePosition.getPosition().getLatitude(), 0.01);
        assertEquals(-122.1, vehiclePosition.getPosition().getLongitude(), 0.01);
    }
}
Also used : CoordinatePoint(org.onebusaway.geospatial.model.CoordinatePoint) 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) VehiclePosition(com.google.transit.realtime.GtfsRealtime.VehiclePosition) 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 VehicleStatusBean

use of org.onebusaway.transit_data.model.VehicleStatusBean in project onebusaway-application-modules by camsys.

the class VehicleAction method show.

public DefaultHttpHeaders show() throws IOException, ServiceException {
    if (!isVersion(V2))
        return setUnknownVersionResponse();
    if (hasErrors())
        return setValidationErrorsResponse();
    long time = SystemTime.currentTimeMillis();
    if (_time != 0)
        time = _time;
    BeanFactoryV2 factory = getBeanFactoryV2();
    try {
        VehicleStatusBean vehicle = _service.getVehicleForAgency(_id, time);
        if (vehicle == null)
            return setResourceNotFoundResponse();
        return setOkResponse(factory.getVehicleStatusResponse(vehicle));
    } catch (OutOfServiceAreaServiceException ex) {
        return setOkResponse(factory.getEmptyList(VehicleStatusV2Bean.class, true));
    }
}
Also used : OutOfServiceAreaServiceException(org.onebusaway.exceptions.OutOfServiceAreaServiceException) BeanFactoryV2(org.onebusaway.api.model.transit.BeanFactoryV2) VehicleStatusBean(org.onebusaway.transit_data.model.VehicleStatusBean)

Aggregations

VehicleStatusBean (org.onebusaway.transit_data.model.VehicleStatusBean)10 ArrayList (java.util.ArrayList)6 ListBean (org.onebusaway.transit_data.model.ListBean)5 FeedEntity (com.google.transit.realtime.GtfsRealtime.FeedEntity)4 AgencyAndId (org.onebusaway.gtfs.model.AgencyAndId)4 RouteBean (org.onebusaway.transit_data.model.RouteBean)4 TripBean (org.onebusaway.transit_data.model.trips.TripBean)4 TripStatusBean (org.onebusaway.transit_data.model.trips.TripStatusBean)4 CoordinatePoint (org.onebusaway.geospatial.model.CoordinatePoint)3 FeedMessage (com.google.transit.realtime.GtfsRealtime.FeedMessage)2 TripDescriptor (com.google.transit.realtime.GtfsRealtime.TripDescriptor)2 TripUpdate (com.google.transit.realtime.GtfsRealtime.TripUpdate)2 VehicleDescriptor (com.google.transit.realtime.GtfsRealtime.VehicleDescriptor)2 VehiclePosition (com.google.transit.realtime.GtfsRealtime.VehiclePosition)2 IOException (java.io.IOException)2 Date (java.util.Date)2 List (java.util.List)2 Test (org.junit.Test)2 ResponseBean (org.onebusaway.api.model.ResponseBean)2 BeanFactoryV2 (org.onebusaway.api.model.transit.BeanFactoryV2)2