use of org.onebusaway.transit_data_federation.services.transit_graph.StopEntry in project onebusaway-application-modules by camsys.
the class StopScheduleServiceImpl method getServiceDateSummariesForStop.
@Override
public List<ServiceDateSummary> getServiceDateSummariesForStop(AgencyAndId stopId, boolean includePrivateService) {
StopEntry stop = _transitGraphDao.getStopEntryForId(stopId, true);
Set<ServiceIdActivation> allServiceIds = getAllServiceIdsForStop(stop, includePrivateService);
Map<ServiceDate, Set<ServiceIdActivation>> serviceIdsByDate = new FactoryMap<ServiceDate, Set<ServiceIdActivation>>(new HashSet<ServiceIdActivation>());
for (ServiceIdActivation serviceIds : allServiceIds) {
Set<ServiceDate> serviceDates = _calendarService.getServiceDatesForServiceIds(serviceIds);
for (ServiceDate serviceDate : serviceDates) serviceIdsByDate.get(serviceDate).add(serviceIds);
}
Map<Set<ServiceIdActivation>, List<ServiceDate>> datesByServiceIds = new FactoryMap<Set<ServiceIdActivation>, List<ServiceDate>>(new ArrayList<ServiceDate>());
for (Map.Entry<ServiceDate, Set<ServiceIdActivation>> entry : serviceIdsByDate.entrySet()) {
ServiceDate serviceDate = entry.getKey();
Set<ServiceIdActivation> serviceIds = entry.getValue();
datesByServiceIds.get(serviceIds).add(serviceDate);
}
List<ServiceDateSummary> summaries = new ArrayList<ServiceDateSummary>();
for (Map.Entry<Set<ServiceIdActivation>, List<ServiceDate>> entry : datesByServiceIds.entrySet()) {
Set<ServiceIdActivation> serviceIds = entry.getKey();
List<ServiceDate> serviceDates = entry.getValue();
Collections.sort(serviceDates);
summaries.add(new ServiceDateSummary(serviceIds, serviceDates));
}
Collections.sort(summaries);
return summaries;
}
use of org.onebusaway.transit_data_federation.services.transit_graph.StopEntry 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;
}
use of org.onebusaway.transit_data_federation.services.transit_graph.StopEntry 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;
}
use of org.onebusaway.transit_data_federation.services.transit_graph.StopEntry 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);
}
use of org.onebusaway.transit_data_federation.services.transit_graph.StopEntry in project onebusaway-application-modules by camsys.
the class StopsBeanServiceImpl method getStopsIdsForAgencyId.
@Override
public ListBean<String> getStopsIdsForAgencyId(String agencyId) {
AgencyEntry agency = _transitGraphDao.getAgencyForId(agencyId);
if (agency == null)
throw new NoSuchAgencyServiceException(agencyId);
List<String> ids = new ArrayList<String>();
for (StopEntry stop : agency.getStops()) {
AgencyAndId id = stop.getId();
ids.add(AgencyAndIdLibrary.convertToString(id));
}
return new ListBean<String>(ids, false);
}
Aggregations