use of org.onebusaway.transit_data_federation.siri.SiriExtensionWrapper in project onebusaway-application-modules by camsys.
the class SearchResultFactoryImplTest method runGetStopResult.
// Support methods
private StopResult runGetStopResult(List<ServiceAlertBean> serviceAlerts) {
StopsForRouteBean stopsForRouteBean = mock(StopsForRouteBean.class);
List<StopGroupingBean> stopGroupingBeans = new ArrayList<StopGroupingBean>();
when(stopsForRouteBean.getStopGroupings()).thenReturn(stopGroupingBeans);
StopGroupingBean stopGroupingBean = mock(StopGroupingBean.class);
stopGroupingBeans.add(stopGroupingBean);
List<StopGroupBean> stopGroups = new ArrayList<StopGroupBean>();
StopGroupBean stopGroupBean = mock(StopGroupBean.class);
stopGroups.add(stopGroupBean);
when(stopGroupingBean.getStopGroups()).thenReturn(stopGroups);
List<String> stopIds = new ArrayList<String>();
when(stopGroupBean.getStopIds()).thenReturn(stopIds);
NameBean nameBean = mock(NameBean.class);
when(nameBean.getType()).thenReturn("destination");
when(stopGroupBean.getName()).thenReturn(nameBean);
List<String> stopGroupBeanStopIds = new ArrayList<String>();
stopGroupBeanStopIds.add(TEST_STOP_ID);
when(stopGroupBean.getStopIds()).thenReturn(stopGroupBeanStopIds);
when(stopGroupBean.getId()).thenReturn(TEST_STOP_ID);
stopIds.add(TEST_STOP_ID);
List<RouteBean> routeBeans = new ArrayList<RouteBean>();
routeBeans.add(createRouteBean());
StopBean stopBean = mock(StopBean.class);
when(stopBean.getId()).thenReturn(TEST_STOP_ID);
when(stopBean.getRoutes()).thenReturn(routeBeans);
List<MonitoredStopVisitStructure> monitoredStopVisits = new ArrayList<MonitoredStopVisitStructure>();
MonitoredStopVisitStructure monitoredStopVisitStructure = mock(MonitoredStopVisitStructure.class);
monitoredStopVisits.add(monitoredStopVisitStructure);
MonitoredVehicleJourneyStructure monVehJourney = mock(MonitoredVehicleJourneyStructure.class);
when(monitoredStopVisitStructure.getMonitoredVehicleJourney()).thenReturn(monVehJourney);
when(monitoredStopVisitStructure.getRecordedAtTime()).thenReturn(new Date(TEST_TIME));
LineRefStructure lineRefStructure = mock(LineRefStructure.class);
when(monVehJourney.getLineRef()).thenReturn(lineRefStructure);
when(lineRefStructure.getValue()).thenReturn(ROUTE_ID);
DirectionRefStructure directionRef = mock(DirectionRefStructure.class);
when(monVehJourney.getDirectionRef()).thenReturn(directionRef);
when(directionRef.getValue()).thenReturn(TEST_STOP_ID);
NaturalLanguageStringStructure natLangStrStructure = mock(NaturalLanguageStringStructure.class);
when(natLangStrStructure.getValue()).thenReturn(TEST_DESTINATION_NAME);
when(monVehJourney.getDestinationName()).thenReturn(natLangStrStructure);
MonitoredCallStructure monCall = mock(MonitoredCallStructure.class);
ExtensionsStructure extensions = mock(ExtensionsStructure.class);
SiriExtensionWrapper siriExtensionWrapper = mock(SiriExtensionWrapper.class);
SiriDistanceExtension distances = mock(SiriDistanceExtension.class);
when(distances.getPresentableDistance()).thenReturn(TEST_PRESENTABLE_DISTANCE);
when(siriExtensionWrapper.getDistances()).thenReturn(distances);
when(extensions.getAny()).thenReturn(siriExtensionWrapper);
when(monCall.getExtensions()).thenReturn(extensions);
when(monVehJourney.getMonitoredCall()).thenReturn(monCall);
when(_realtimeService.getMonitoredStopVisitsForStop(eq(TEST_STOP_ID), eq(0), anyLong())).thenReturn(monitoredStopVisits);
when(_transitDataService.getStopsForRoute(anyString())).thenReturn(stopsForRouteBean);
when(_realtimeService.getServiceAlertsForRouteAndDirection(ROUTE_ID, TEST_STOP_ID)).thenReturn(serviceAlerts);
SearchResultFactoryImpl srf = new SearchResultFactoryImpl(_transitDataService, _realtimeService, _configurationService);
Set<RouteBean> routeFilter = new HashSet<RouteBean>();
StopResult result = (StopResult) srf.getStopResult(stopBean, routeFilter);
return result;
}
use of org.onebusaway.transit_data_federation.siri.SiriExtensionWrapper in project onebusaway-application-modules by camsys.
the class RealtimeServiceImpl method getVehicleActivityForRoute.
/**
* SIRI METHODS
*/
@Override
public List<VehicleActivityStructure> getVehicleActivityForRoute(String routeId, String directionId, int maximumOnwardCalls, long currentTime, boolean showRawLocation) {
List<VehicleActivityStructure> output = new ArrayList<VehicleActivityStructure>();
ListBean<TripDetailsBean> trips = getAllTripsForRoute(routeId, currentTime);
for (TripDetailsBean tripDetails : trips.getList()) {
// filter out interlined routes
if (routeId != null && !tripDetails.getTrip().getRoute().getId().equals(routeId))
continue;
// filtered out by user
if (tripDetails.getTrip().getDirectionId() != null) {
if (directionId != null && !tripDetails.getTrip().getDirectionId().equals(directionId)) {
continue;
}
}
if (!_presentationService.include(tripDetails.getStatus()))
continue;
VehicleActivityStructure activity = new VehicleActivityStructure();
// Check for Realtime Data
if (!tripDetails.getStatus().isPredicted()) {
activity.setRecordedAtTime(new Date(getTime()));
} else {
activity.setRecordedAtTime(new Date(tripDetails.getStatus().getLastUpdateTime()));
}
List<TimepointPredictionRecord> timePredictionRecords = null;
timePredictionRecords = _transitDataService.getPredictionRecordsForTrip(AgencyAndId.convertFromString(routeId).getAgencyId(), tripDetails.getStatus());
activity.setMonitoredVehicleJourney(new MonitoredVehicleJourney());
SiriSupport.fillMonitoredVehicleJourney(activity.getMonitoredVehicleJourney(), tripDetails.getTrip(), tripDetails.getStatus(), null, OnwardCallsMode.VEHICLE_MONITORING, _presentationService, _transitDataService, maximumOnwardCalls, timePredictionRecords, tripDetails.getStatus().isPredicted(), currentTime, showRawLocation);
output.add(activity);
}
Collections.sort(output, new Comparator<VehicleActivityStructure>() {
public int compare(VehicleActivityStructure arg0, VehicleActivityStructure arg1) {
try {
SiriExtensionWrapper wrapper0 = (SiriExtensionWrapper) arg0.getMonitoredVehicleJourney().getMonitoredCall().getExtensions().getAny();
SiriExtensionWrapper wrapper1 = (SiriExtensionWrapper) arg1.getMonitoredVehicleJourney().getMonitoredCall().getExtensions().getAny();
return wrapper0.getDistances().getDistanceFromCall().compareTo(wrapper1.getDistances().getDistanceFromCall());
} catch (Exception e) {
return -1;
}
}
});
return output;
}
use of org.onebusaway.transit_data_federation.siri.SiriExtensionWrapper in project onebusaway-application-modules by camsys.
the class SiriSupport method getMonitoredCallStructure.
private static MonitoredCallStructure getMonitoredCallStructure(StopBean stopBean, PresentationService presentationService, double distanceOfCallAlongTrip, double distanceOfVehicleFromCall, int visitNumber, int index, TimepointPredictionRecord prediction, boolean hasRealtimeData, long responseTimestamp, long scheduledArrivalTime) {
MonitoredCallStructure monitoredCallStructure = new MonitoredCallStructure();
monitoredCallStructure.setVisitNumber(BigInteger.valueOf(visitNumber));
StopPointRefStructure stopPointRef = new StopPointRefStructure();
stopPointRef.setValue(stopBean.getId());
monitoredCallStructure.setStopPointRef(stopPointRef);
NaturalLanguageStringStructure stopPoint = new NaturalLanguageStringStructure();
stopPoint.setValue(stopBean.getName());
monitoredCallStructure.setStopPointName(stopPoint);
if (prediction != null) {
if (!hasRealtimeData) {
monitoredCallStructure.setExpectedArrivalTime(new Date(prediction.getTimepointScheduledTime()));
monitoredCallStructure.setExpectedDepartureTime(new Date(prediction.getTimepointScheduledTime()));
} else // do not allow predicted times to be less than ResponseTimestamp
if (prediction.getTimepointPredictedArrivalTime() < responseTimestamp) {
/*
* monitoredCall has less precision than onwardCall (date vs. timestamp)
* which results in a small amount of error when converting back to timestamp.
* Add a second here to prevent negative values from showing up in the UI
* (actual precision of the value is 1 minute, so a second has little influence)
*/
monitoredCallStructure.setExpectedArrivalTime(new Date(responseTimestamp + 1000));
monitoredCallStructure.setExpectedDepartureTime(new Date(responseTimestamp + 1000));
} else {
monitoredCallStructure.setExpectedArrivalTime(new Date(prediction.getTimepointPredictedArrivalTime()));
monitoredCallStructure.setExpectedDepartureTime(new Date(prediction.getTimepointPredictedArrivalTime()));
}
} else if (!hasRealtimeData) {
monitoredCallStructure.setExpectedArrivalTime(new Date(scheduledArrivalTime));
monitoredCallStructure.setExpectedDepartureTime(new Date(scheduledArrivalTime));
}
// setting the scheduled arrival time.
if (monitoredCallStructure.getExpectedArrivalTime() != null) {
monitoredCallStructure.setAimedArrivalTime(new Date(scheduledArrivalTime));
}
// siri extensions
SiriExtensionWrapper wrapper = new SiriExtensionWrapper();
ExtensionsStructure distancesExtensions = new ExtensionsStructure();
SiriDistanceExtension distances = new SiriDistanceExtension();
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setGroupingUsed(false);
distances.setStopsFromCall(index);
distances.setCallDistanceAlongRoute(NumberUtils.toDouble(df.format(distanceOfCallAlongTrip)));
distances.setDistanceFromCall(NumberUtils.toDouble(df.format(distanceOfVehicleFromCall)));
distances.setPresentableDistance(presentationService.getPresentableDistance(distances));
long deviation = 0L;
if (monitoredCallStructure.getExpectedArrivalTime() != null && monitoredCallStructure.getAimedArrivalTime() != null) {
// get schedule deviation in milliseconds
long deviationSeconds = monitoredCallStructure.getExpectedArrivalTime().getTime() - monitoredCallStructure.getAimedArrivalTime().getTime();
deviation = Math.round(deviationSeconds / (1000.0 * 60.0));
}
wrapper.setDeviation(String.valueOf(deviation));
wrapper.setDistances(distances);
distancesExtensions.setAny(wrapper);
monitoredCallStructure.setExtensions(distancesExtensions);
return monitoredCallStructure;
}
use of org.onebusaway.transit_data_federation.siri.SiriExtensionWrapper in project onebusaway-application-modules by camsys.
the class SearchResultFactoryImpl method getPresentableDistance.
private String getPresentableDistance(MonitoredVehicleJourneyStructure journey, long updateTime, boolean isStopContext) {
MonitoredCallStructure monitoredCall = journey.getMonitoredCall();
SiriExtensionWrapper wrapper = (SiriExtensionWrapper) monitoredCall.getExtensions().getAny();
SiriDistanceExtension distanceExtension = wrapper.getDistances();
String message = "";
String distance = "<strong>" + distanceExtension.getPresentableDistance() + "</strong>";
NaturalLanguageStringStructure progressStatus = journey.getProgressStatus();
// at terminal label only appears in stop results
if (isStopContext && progressStatus != null && progressStatus.getValue().contains("layover")) {
if (journey.getOriginAimedDepartureTime() != null) {
DateFormat formatter = DateFormat.getTimeInstance(DateFormat.SHORT);
if (journey.getOriginAimedDepartureTime().getTime() < new Date().getTime()) {
message += "at terminal";
} else {
message += "at terminal, scheduled to depart " + formatter.format(journey.getOriginAimedDepartureTime());
}
} else {
message += "at terminal";
}
} else if (isStopContext && progressStatus != null && progressStatus.getValue().contains("prevTrip")) {
message += "+ scheduled layover at terminal";
}
int staleTimeout = _configurationService.getConfigurationValueAsInteger("display.staleTimeout", 120);
long age = (SystemTime.currentTimeMillis() - updateTime) / 1000;
if (age > staleTimeout) {
if (message.length() > 0) {
message += ", ";
}
message += "old data";
}
if (message.length() > 0)
return distance + " (" + message + ")";
else
return distance;
}
use of org.onebusaway.transit_data_federation.siri.SiriExtensionWrapper in project onebusaway-application-modules by camsys.
the class SearchResultFactoryImpl method getPresentableTime.
private String getPresentableTime(MonitoredVehicleJourneyStructure journey, long updateTime, boolean isStopContext) {
NaturalLanguageStringStructure progressStatus = journey.getProgressStatus();
MonitoredCallStructure monitoredCall = journey.getMonitoredCall();
if (!isStopContext) {
return null;
}
int staleTimeout = _configurationService.getConfigurationValueAsInteger("display.staleTimeout", 120);
long age = (SystemTime.currentTimeMillis() - updateTime) / 1000;
if (age > staleTimeout) {
return null;
}
if (monitoredCall.getExpectedArrivalTime() != null) {
long predictedArrival = monitoredCall.getExpectedArrivalTime().getTime();
SiriExtensionWrapper wrapper = (SiriExtensionWrapper) monitoredCall.getExtensions().getAny();
SiriDistanceExtension distanceExtension = wrapper.getDistances();
String distance = distanceExtension.getPresentableDistance();
double minutes = Math.floor((predictedArrival - updateTime) / 60 / 1000);
String timeString = Math.round(minutes) + " minute" + ((Math.abs(minutes) != 1) ? "s" : "");
if (progressStatus != null && progressStatus.getValue().contains("prevTrip")) {
return timeString;
} else {
return "<strong>" + timeString + "</strong>" + ", " + distance;
}
}
return null;
}
Aggregations