Search in sources :

Example 16 with Cacheable

use of org.onebusaway.container.cache.Cacheable in project onebusaway-application-modules by camsys.

the class ExtendedCalendarServiceImpl method areServiceIdsActiveOnServiceDate.

@Override
@Cacheable
public boolean areServiceIdsActiveOnServiceDate(ServiceIdActivation serviceIds, Date serviceDate) {
    List<LocalizedServiceId> activeServiceIds = serviceIds.getActiveServiceIds();
    List<LocalizedServiceId> inactiveServiceIds = serviceIds.getInactiveServiceIds();
    // 95% of configs look like this
    if (activeServiceIds.size() == 1 && inactiveServiceIds.isEmpty()) {
        LocalizedServiceId lsid = activeServiceIds.get(0);
        return _calendarService.isLocalizedServiceIdActiveOnDate(lsid, serviceDate);
    }
    for (LocalizedServiceId lsid : activeServiceIds) {
        if (!_calendarService.isLocalizedServiceIdActiveOnDate(lsid, serviceDate))
            return false;
    }
    for (LocalizedServiceId lsid : inactiveServiceIds) {
        if (_calendarService.isLocalizedServiceIdActiveOnDate(lsid, serviceDate))
            return false;
    }
    return true;
}
Also used : LocalizedServiceId(org.onebusaway.gtfs.model.calendar.LocalizedServiceId) Cacheable(org.onebusaway.container.cache.Cacheable)

Example 17 with Cacheable

use of org.onebusaway.container.cache.Cacheable in project onebusaway-application-modules by camsys.

the class AgencyServiceImpl method getAgencyIdsAndCenterPoints.

@Cacheable
public Map<String, CoordinatePoint> getAgencyIdsAndCenterPoints() {
    Map<String, CoordinatePoint> centersByAgencyId = new HashMap<String, CoordinatePoint>();
    for (AgencyEntry agency : _graph.getAllAgencies()) {
        StopsCenterOfMass centerOfMass = new StopsCenterOfMass();
        for (RouteCollectionEntry routeCollection : agency.getRouteCollections()) {
            for (RouteEntry route : routeCollection.getChildren()) {
                for (TripEntry trip : route.getTrips()) {
                    for (StopTimeEntry stopTime : trip.getStopTimes()) {
                        StopEntry stop = stopTime.getStop();
                        centerOfMass.lats += stop.getStopLat();
                        centerOfMass.lons += stop.getStopLon();
                        centerOfMass.count++;
                    }
                }
            }
        }
        if (centerOfMass.count == 0) {
            _log.warn("Agency has no service: " + agency);
        } else {
            double lat = centerOfMass.lats / centerOfMass.count;
            double lon = centerOfMass.lons / centerOfMass.count;
            centersByAgencyId.put(agency.getId(), new CoordinatePoint(lat, lon));
        }
    }
    return centersByAgencyId;
}
Also used : CoordinatePoint(org.onebusaway.geospatial.model.CoordinatePoint) RouteEntry(org.onebusaway.transit_data_federation.services.transit_graph.RouteEntry) HashMap(java.util.HashMap) StopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.StopTimeEntry) TripEntry(org.onebusaway.transit_data_federation.services.transit_graph.TripEntry) StopEntry(org.onebusaway.transit_data_federation.services.transit_graph.StopEntry) RouteCollectionEntry(org.onebusaway.transit_data_federation.services.transit_graph.RouteCollectionEntry) AgencyEntry(org.onebusaway.transit_data_federation.services.transit_graph.AgencyEntry) Cacheable(org.onebusaway.container.cache.Cacheable)

Example 18 with Cacheable

use of org.onebusaway.container.cache.Cacheable in project onebusaway-application-modules by camsys.

the class StopScheduleBeanServiceImpl method getScheduledArrivalsForStopAndDate.

@Cacheable
public List<StopRouteScheduleBean> getScheduledArrivalsForStopAndDate(AgencyAndId stopId, ServiceDate date) {
    StopEntry stopEntry = _graph.getStopEntryForId(stopId);
    Map<AgencyAndId, List<StopTimeInstance>> stopTimesByRouteCollectionId = new FactoryMap<AgencyAndId, List<StopTimeInstance>>(new ArrayList<StopTimeInstance>());
    Map<AgencyAndId, List<StopTimeInstance>> frequenciesByRouteCollectionId = new FactoryMap<AgencyAndId, List<StopTimeInstance>>(new ArrayList<StopTimeInstance>());
    groupStopTimeInstancesByRouteCollectionId(stopEntry, date, stopTimesByRouteCollectionId, frequenciesByRouteCollectionId);
    groupFrequencyInstancesByRouteCollectionId(stopEntry, date, frequenciesByRouteCollectionId);
    Set<AgencyAndId> routeIds = new HashSet<AgencyAndId>();
    routeIds.addAll(stopTimesByRouteCollectionId.keySet());
    routeIds.addAll(frequenciesByRouteCollectionId.keySet());
    List<StopRouteScheduleBean> beans = new ArrayList<StopRouteScheduleBean>();
    for (AgencyAndId routeId : routeIds) {
        StopRouteScheduleBean routeScheduleBean = new StopRouteScheduleBean();
        beans.add(routeScheduleBean);
        RouteBean route = _routeBeanService.getRouteForId(routeId);
        routeScheduleBean.setRoute(route);
        Map<String, StopTimeByDirectionEntry> stopTimesByDirection = new FactoryMap<String, StopTimeByDirectionEntry>(new StopTimeByDirectionEntry());
        List<StopTimeInstance> stopTimesForRoute = stopTimesByRouteCollectionId.get(routeId);
        for (StopTimeInstance sti : stopTimesForRoute) {
            BlockStopTimeEntry bst = sti.getStopTime();
            BlockTripEntry blockTrip = sti.getTrip();
            BlockConfigurationEntry blockConfig = blockTrip.getBlockConfiguration();
            TripEntry trip = blockTrip.getTrip();
            AgencyAndId tripId = trip.getId();
            AgencyAndId serviceId = trip.getServiceId().getId();
            TripNarrative narrative = _narrativeService.getTripForId(tripId);
            StopTimeInstanceBean stiBean = new StopTimeInstanceBean();
            stiBean.setTripId(AgencyAndIdLibrary.convertToString(tripId));
            stiBean.setServiceDate(sti.getServiceDate());
            stiBean.setArrivalTime(sti.getArrivalTime());
            stiBean.setDepartureTime(sti.getDepartureTime());
            stiBean.setServiceId(AgencyAndIdLibrary.convertToString(serviceId));
            stiBean.setArrivalEnabled(bst.getBlockSequence() > 0);
            stiBean.setDepartureEnabled(bst.getBlockSequence() + 1 < blockConfig.getStopTimes().size());
            String directionId = trip.getDirectionId();
            if (directionId == null)
                directionId = "0";
            String tripHeadsign = narrative.getTripHeadsign();
            TripHeadsignStopTimeGroupKey groupKey = new TripHeadsignStopTimeGroupKey(tripHeadsign);
            ContinuesAsStopTimeGroupKey continuesAsGroupKey = getContinuesAsGroupKeyForStopTimeInstance(sti);
            StopTimeByDirectionEntry stopTimesForDirection = stopTimesByDirection.get(directionId);
            stopTimesForDirection.addEntry(stiBean, tripHeadsign, groupKey, continuesAsGroupKey);
        }
        List<StopTimeInstance> frequenciesForRoute = frequenciesByRouteCollectionId.get(routeId);
        for (StopTimeInstance sti : frequenciesForRoute) {
            BlockStopTimeEntry blockStopTime = sti.getStopTime();
            BlockTripEntry blockTrip = blockStopTime.getTrip();
            TripEntry trip = blockTrip.getTrip();
            BlockConfigurationEntry blockConfig = blockTrip.getBlockConfiguration();
            AgencyAndId tripId = trip.getId();
            AgencyAndId serviceId = trip.getServiceId().getId();
            TripNarrative narrative = _narrativeService.getTripForId(tripId);
            FrequencyInstanceBean bean = new FrequencyInstanceBean();
            bean.setTripId(AgencyAndIdLibrary.convertToString(tripId));
            bean.setServiceDate(sti.getServiceDate());
            bean.setStartTime(sti.getServiceDate() + sti.getFrequency().getStartTime() * 1000);
            bean.setEndTime(sti.getServiceDate() + sti.getFrequency().getEndTime() * 1000);
            bean.setHeadwaySecs(sti.getFrequency().getHeadwaySecs());
            bean.setServiceId(AgencyAndIdLibrary.convertToString(serviceId));
            bean.setArrivalEnabled(blockStopTime.getBlockSequence() > 0);
            bean.setDepartureEnabled(blockStopTime.getBlockSequence() + 1 < blockConfig.getStopTimes().size());
            String directionId = trip.getDirectionId();
            if (directionId == null)
                directionId = "0";
            StopTimeByDirectionEntry stopTimesForDirection = stopTimesByDirection.get(directionId);
            stopTimesForDirection.addEntry(bean, narrative.getTripHeadsign());
        }
        for (StopTimeByDirectionEntry stopTimesForDirection : stopTimesByDirection.values()) {
            StopRouteDirectionScheduleBean directionBean = new StopRouteDirectionScheduleBean();
            directionBean.getStopTimes().addAll(stopTimesForDirection.getStopTimes());
            directionBean.getFrequencies().addAll(stopTimesForDirection.getFrequencies());
            String headsign = stopTimesForDirection.getBestHeadsign();
            directionBean.setTripHeadsign(headsign);
            Collections.sort(directionBean.getStopTimes(), _stopTimeComparator);
            Collections.sort(directionBean.getFrequencies(), _frequencyComparator);
            List<StopTimeGroupBean> groups = new ArrayList<StopTimeGroupBean>();
            applyTripHeadsignStopTimeGroups(stopTimesForDirection, groups);
            applyContinuesAsStopTimeGroups(stopTimesForDirection, groups);
            directionBean.setGroups(groups);
            routeScheduleBean.getDirections().add(directionBean);
        }
        Collections.sort(routeScheduleBean.getDirections(), _directionComparator);
    }
    Collections.sort(beans, _stopRouteScheduleComparator);
    return beans;
}
Also used : FactoryMap(org.onebusaway.collections.FactoryMap) AgencyAndId(org.onebusaway.gtfs.model.AgencyAndId) StopTimeInstance(org.onebusaway.transit_data_federation.model.StopTimeInstance) BlockTripEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockTripEntry) StopRouteScheduleBean(org.onebusaway.transit_data.model.StopRouteScheduleBean) ArrayList(java.util.ArrayList) StopTimeGroupBean(org.onebusaway.transit_data.model.StopTimeGroupBean) RouteBean(org.onebusaway.transit_data.model.RouteBean) StopTimeInstanceBean(org.onebusaway.transit_data.model.StopTimeInstanceBean) StopEntry(org.onebusaway.transit_data_federation.services.transit_graph.StopEntry) List(java.util.List) ArrayList(java.util.ArrayList) BlockConfigurationEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry) FrequencyBlockStopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.FrequencyBlockStopTimeEntry) BlockStopTimeEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockStopTimeEntry) HashSet(java.util.HashSet) TripEntry(org.onebusaway.transit_data_federation.services.transit_graph.TripEntry) BlockTripEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockTripEntry) FrequencyInstanceBean(org.onebusaway.transit_data.model.schedule.FrequencyInstanceBean) TripNarrative(org.onebusaway.transit_data_federation.model.narrative.TripNarrative) StopRouteDirectionScheduleBean(org.onebusaway.transit_data.model.StopRouteDirectionScheduleBean) Cacheable(org.onebusaway.container.cache.Cacheable)

Example 19 with Cacheable

use of org.onebusaway.container.cache.Cacheable in project onebusaway-application-modules by camsys.

the class StopScheduleBeanServiceImpl method getCalendarForStop.

@Cacheable
public StopCalendarDaysBean getCalendarForStop(AgencyAndId stopId) {
    TimeZone timeZone = _agencyService.getTimeZoneForAgencyId(stopId.getAgencyId());
    StopEntry stopEntry = _graph.getStopEntryForId(stopId);
    Set<ServiceIdActivation> serviceIds = new HashSet<ServiceIdActivation>();
    for (BlockStopTimeIndex index : _blockIndexService.getStopTimeIndicesForStop(stopEntry)) serviceIds.add(index.getServiceIds());
    for (FrequencyBlockStopTimeIndex index : _blockIndexService.getFrequencyStopTimeIndicesForStop(stopEntry)) serviceIds.add(index.getServiceIds());
    SortedMap<ServiceDate, Set<ServiceIdActivation>> serviceIdsByDate = getServiceIdsByDate(serviceIds);
    Counter<Set<ServiceIdActivation>> counts = new Counter<Set<ServiceIdActivation>>();
    for (Set<ServiceIdActivation> ids : serviceIdsByDate.values()) counts.increment(ids);
    int total = counts.size();
    Map<Set<ServiceIdActivation>, Integer> idsToGroup = new HashMap<Set<ServiceIdActivation>, Integer>();
    for (Set<ServiceIdActivation> ids : counts.getSortedKeys()) idsToGroup.put(ids, total--);
    List<StopCalendarDayBean> beans = new ArrayList<StopCalendarDayBean>(serviceIdsByDate.size());
    for (Map.Entry<ServiceDate, Set<ServiceIdActivation>> entry : serviceIdsByDate.entrySet()) {
        StopCalendarDayBean bean = new StopCalendarDayBean();
        ServiceDate serviceDate = entry.getKey();
        Date date = serviceDate.getAsDate(timeZone);
        bean.setDate(date);
        Integer indexId = idsToGroup.get(entry.getValue());
        bean.setGroup(indexId);
        beans.add(bean);
    }
    return new StopCalendarDaysBean(timeZone.getID(), beans);
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) StopCalendarDaysBean(org.onebusaway.transit_data.model.StopCalendarDaysBean) HashMap(java.util.HashMap) FrequencyBlockStopTimeIndex(org.onebusaway.transit_data_federation.services.blocks.FrequencyBlockStopTimeIndex) ArrayList(java.util.ArrayList) Date(java.util.Date) ServiceDate(org.onebusaway.gtfs.model.calendar.ServiceDate) StopCalendarDayBean(org.onebusaway.transit_data.model.StopCalendarDayBean) TimeZone(java.util.TimeZone) ServiceDate(org.onebusaway.gtfs.model.calendar.ServiceDate) Counter(org.onebusaway.collections.Counter) FrequencyBlockStopTimeIndex(org.onebusaway.transit_data_federation.services.blocks.FrequencyBlockStopTimeIndex) BlockStopTimeIndex(org.onebusaway.transit_data_federation.services.blocks.BlockStopTimeIndex) StopEntry(org.onebusaway.transit_data_federation.services.transit_graph.StopEntry) ServiceIdActivation(org.onebusaway.transit_data_federation.services.transit_graph.ServiceIdActivation) Map(java.util.Map) FactoryMap(org.onebusaway.collections.FactoryMap) SortedMap(java.util.SortedMap) HashMap(java.util.HashMap) TreeMap(java.util.TreeMap) HashSet(java.util.HashSet) Cacheable(org.onebusaway.container.cache.Cacheable)

Example 20 with Cacheable

use of org.onebusaway.container.cache.Cacheable in project onebusaway-application-modules by camsys.

the class BlockCalendarServiceImpl method getBlockInstance.

/**
 **
 * {@link BlockCalendarService} Interface
 ***
 */
@Cacheable(isValueSerializable = false)
@Override
public BlockInstance getBlockInstance(AgencyAndId blockId, long serviceDate) {
    BlockEntry block = _transitGraphDao.getBlockEntryForId(blockId);
    if (block == null)
        throw new IllegalArgumentException("unknown block: " + blockId);
    List<BlockConfigurationEntry> configurations = block.getConfigurations();
    int index = 0;
    Date date = new Date(serviceDate);
    InstanceState state = new InstanceState(serviceDate);
    /**
     * See the specific contract for {@link BlockEntry#getConfigurations()}
     * about the sort order of configurations
     */
    for (BlockConfigurationEntry configuration : configurations) {
        if (allServiceIdsAreActiveForServiceDate(configuration, date)) {
            return new BlockInstance(configuration, state);
        }
        index++;
    }
    return null;
}
Also used : InstanceState(org.onebusaway.transit_data_federation.services.blocks.InstanceState) BlockEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockEntry) BlockInstance(org.onebusaway.transit_data_federation.services.blocks.BlockInstance) BlockConfigurationEntry(org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry) Date(java.util.Date) Cacheable(org.onebusaway.container.cache.Cacheable)

Aggregations

Cacheable (org.onebusaway.container.cache.Cacheable)23 AgencyAndId (org.onebusaway.gtfs.model.AgencyAndId)10 ArrayList (java.util.ArrayList)8 HashSet (java.util.HashSet)7 RouteCollectionEntry (org.onebusaway.transit_data_federation.services.transit_graph.RouteCollectionEntry)6 StopEntry (org.onebusaway.transit_data_federation.services.transit_graph.StopEntry)6 TripEntry (org.onebusaway.transit_data_federation.services.transit_graph.TripEntry)6 HashMap (java.util.HashMap)4 AgencyEntry (org.onebusaway.transit_data_federation.services.transit_graph.AgencyEntry)4 Date (java.util.Date)3 LocalizedServiceId (org.onebusaway.gtfs.model.calendar.LocalizedServiceId)3 ServiceDate (org.onebusaway.gtfs.model.calendar.ServiceDate)3 RouteBean (org.onebusaway.transit_data.model.RouteBean)3 ShapePoints (org.onebusaway.transit_data_federation.model.ShapePoints)3 BlockConfigurationEntry (org.onebusaway.transit_data_federation.services.transit_graph.BlockConfigurationEntry)3 BlockEntry (org.onebusaway.transit_data_federation.services.transit_graph.BlockEntry)3 FactoryMap (org.onebusaway.collections.FactoryMap)2 NoSuchAgencyServiceException (org.onebusaway.exceptions.NoSuchAgencyServiceException)2 CoordinateBounds (org.onebusaway.geospatial.model.CoordinateBounds)2 CoordinatePoint (org.onebusaway.geospatial.model.CoordinatePoint)2