Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug in GtfsRtVehicleFeed and add vehicle ids to schedule adherence report #23

Closed
wants to merge 15 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.transitclock.api.utils.AgencyTimezoneCache;
import org.transitclock.service.VehiclesServiceImpl;
import org.transitclock.service.contract.VehiclesInterface;
import org.transitclock.service.dto.IpcAvl;
import org.transitclock.service.dto.IpcVehicleConfig;
import org.transitclock.service.dto.IpcVehicleGtfsRealtime;
import org.transitclock.service.contract.VehiclesInterface;
import org.transitclock.service.VehiclesServiceImpl;
import org.transitclock.utils.Time;

import java.rmi.RemoteException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
Expand Down Expand Up @@ -146,7 +145,7 @@ private FeedMessage createMessage(Collection<IpcVehicleGtfsRealtime> vehicles) {
for (IpcVehicleGtfsRealtime vehicle : vehicles) {

IpcAvl newAvl = new IpcAvl(
vehicle.getVehicleName(),
vehicle.getId(),
vehicle.getAvl().getTime(),
vehicle.getAvl().getLatitude(),
vehicle.getAvl().getLongitude(),
Expand Down
86 changes: 54 additions & 32 deletions app/src/main/java/org/transitclock/api/resources/TransitimeApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,7 @@
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.servers.Server;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import jakarta.ws.rs.BeanParam;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -36,25 +21,16 @@
import org.transitclock.domain.structs.Agency;
import org.transitclock.domain.structs.ExportTable;
import org.transitclock.domain.structs.Location;
import org.transitclock.service.dto.IpcActiveBlock;
import org.transitclock.service.dto.IpcBlock;
import org.transitclock.service.dto.IpcCalendar;
import org.transitclock.service.dto.IpcDirectionsForRoute;
import org.transitclock.service.dto.IpcPrediction;
import org.transitclock.service.dto.IpcPredictionsForRouteStopDest;
import org.transitclock.service.dto.IpcRoute;
import org.transitclock.service.dto.IpcRouteSummary;
import org.transitclock.service.dto.IpcSchedule;
import org.transitclock.service.dto.IpcServerStatus;
import org.transitclock.service.dto.IpcTrip;
import org.transitclock.service.dto.IpcTripPattern;
import org.transitclock.service.dto.IpcVehicle;
import org.transitclock.service.dto.IpcVehicleConfig;
import org.transitclock.service.contract.ConfigInterface;
import org.transitclock.service.contract.PredictionsInterface;
import org.transitclock.service.contract.PredictionsInterface.RouteStop;
import org.transitclock.service.contract.ServerStatusInterface;
import org.transitclock.service.contract.VehiclesInterface;
import org.transitclock.service.dto.*;

import java.rmi.RemoteException;
import java.util.*;
import java.util.stream.Collectors;

/**
* Contains the API commands for the Transitime API for getting real-time vehicle and prediction
Expand Down Expand Up @@ -215,7 +191,7 @@ public Response getVehiclesToBlock(
public Response getAvlReport(
@BeanParam StandardParameters stdParameters,
@Parameter(description = "Vehicle id") @QueryParam(value = "v") String vehicleId,
@Parameter(description = "Begin date(MM-DD-YYYY.") @QueryParam(value = "beginDate") String beginDate,
@Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD)") @QueryParam(value = "beginDate") String beginDate,
@Parameter(description = "Num days.", required = false) @QueryParam(value = "numDays") int numDays,
@Parameter(description = "Begin time(HH:MM)") @QueryParam(value = "beginTime") String beginTime,
@Parameter(description = "End time(HH:MM)") @QueryParam(value = "endTime") String endTime)
Expand Down Expand Up @@ -310,7 +286,7 @@ public Response getTrips(
public Response scheduleAdhReport(
@BeanParam StandardParameters stdParameters,
@Parameter(description = "Route id") @QueryParam(value = "r") String routeId,
@Parameter(description = "Begin date(MM-DD-YYYY.") @QueryParam(value = "beginDate") String beginDate,
@Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD)") @QueryParam(value = "beginDate") String beginDate,
@Parameter(description = "Num days.", required = false) @QueryParam(value = "numDays") int numDays,
@Parameter(description = "Begin time(HH:MM)") @QueryParam(value = "beginTime") String beginTime,
@Parameter(description = "End time(HH:MM)") @QueryParam(value = "endTime") String endTime,
Expand Down Expand Up @@ -357,6 +333,43 @@ public Response getLastAvlJsonData(@BeanParam StandardParameters stdParameters)
}
}

@Operation(
summary = "Returns schedule adherence report for single stop.",
description = "Returns schedule adherence report for single stop.",
tags = {"report", "stop"})
@Path("/reports/schedStopAdh")
@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response reportForStopById(
@BeanParam StandardParameters stdParameters,
@Parameter(description = "Stop Id", required = true) @QueryParam(value = "id") String stopId,
@Parameter(description = "Begin date(MM-DD-YYYY or YYYY-MM-DD)", required = true) @QueryParam(value = "beginDate") String beginDate,
@Parameter(description = "Num days.", required = true) @QueryParam(value = "numDays") int numDays,
@Parameter(description = "Begin time(HH:MM)") @QueryParam(value = "beginTime") String beginTime,
@Parameter(description = "End time(HH:MM)") @QueryParam(value = "endTime") String endTime,
@Parameter(description = "Allowable early in mins(default 1.0)") @QueryParam(value = "allowableEarly")
String allowableEarly,
@Parameter(description = "Allowable late in mins(default 4.0") @QueryParam(value = "allowableLate")
String allowableLate)
throws WebApplicationException {
stdParameters.validate();
try {
String response = Reports.getReportForStopById(
stdParameters.getAgencyId(),
stopId,
beginDate,
allowableEarly,
allowableLate,
beginTime,
endTime,
numDays);
return stdParameters.createResponse(response);
} catch (Exception e) {
// If problem getting data then return a Bad Request
throw WebUtils.badRequestException(e);
}
}

/**
* Handles the vehicleIds command. Returns list of vehicle IDs.
*
Expand Down Expand Up @@ -1019,6 +1032,15 @@ public Response getRouteDetails(

ipcRoutes = new ArrayList<IpcRoute>();
ipcRoutes.add(route);
} else if (stopId != null) {

ipcRoutes = inter.getRoutesByStopId(stopId);

// If the stop doesn't exist then throw exception such that
// Bad Request with an appropriate message is returned.
if (ipcRoutes == null || ipcRoutes.isEmpty())
throw WebUtils.badRequestException("Routes for stop ID= " + stopId + " does not exist.");

} else {
// Multiple routes specified
ipcRoutes = inter.getRoutes(routeIdsOrShortNames);
Expand Down
Loading