Skip to content

Commit

Permalink
refactor(Updates to address PR feedback): New reroute tracking respon…
Browse files Browse the repository at this point in the history
…se and updates around this
  • Loading branch information
br648 committed Jan 15, 2025
1 parent 7eac962 commit cf7113f
Show file tree
Hide file tree
Showing 7 changed files with 757 additions and 690 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.opentripplanner.middleware.triptracker.payload.TrackPayload;
import org.opentripplanner.middleware.triptracker.payload.UpdatedTrackingPayload;
import org.opentripplanner.middleware.triptracker.response.EndTrackingResponse;
import org.opentripplanner.middleware.triptracker.response.RerouteResponse;
import org.opentripplanner.middleware.triptracker.response.TrackingResponse;
import org.opentripplanner.middleware.utils.HttpUtils;
import org.opentripplanner.middleware.utils.JsonUtils;
Expand Down Expand Up @@ -76,8 +77,8 @@ public void bind(final SparkSwagger restApi) {
.post(path("/reroute")
.withDescription("Reroute from the traveler's current location to the original trip destination.")
.withProduces(JSON_ONLY)
.withRequestType(UpdatedTrackingPayload.class)
.withResponseType(TrackingResponse.class),
.withRequestType(TrackPayload.class)
.withResponseType(RerouteResponse.class),
(request, response) -> ManageTripTracking.rerouteTracking(request), JsonUtils::toJson);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,9 @@ private boolean isTrackingOngoing() {
* to that returned from OTP, so the existing trip itinerary is used and therefore preserved.
*/
public void processLegTransition(NotificationType notificationType, TravelerPosition travelerPosition) throws CloneNotSupportedException {
matchingItinerary = trip.itinerary.clone();
if (trip.journeyState.matchingItinerary != null) {
matchingItinerary = trip.journeyState.matchingItinerary.clone();
}
OtpUser tripOwner = getOtpUser();
Set<OtpUser> notifyUsers = getLegTransitionNotifyUsers(trip);
notifyUsers.forEach(observer -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import org.opentripplanner.middleware.triptracker.interactions.TripActions;
import org.opentripplanner.middleware.triptracker.interactions.busnotifiers.BusOperatorActions;
import org.opentripplanner.middleware.triptracker.response.EndTrackingResponse;
import org.opentripplanner.middleware.triptracker.response.RerouteResponse;
import org.opentripplanner.middleware.triptracker.response.TrackingResponse;
import org.opentripplanner.middleware.utils.Coordinates;
import spark.Request;
Expand Down Expand Up @@ -67,7 +68,20 @@ public static TrackingResponse startTracking(Request request) {
return null;
}

private static TrackingResponse doUpdateTracking(Request request, TripTrackingData tripData, boolean create) {
private static TrackingResponse doUpdateTracking(
Request request,
TripTrackingData tripData,
boolean create
) {
return doUpdateTracking(request, tripData, create, false);
}

private static TrackingResponse doUpdateTracking(
Request request,
TripTrackingData tripData,
boolean create,
boolean rerouted
) {
try {
TrackedJourney trackedJourney;
if (create) {
Expand Down Expand Up @@ -99,7 +113,11 @@ private static TrackingResponse doUpdateTracking(Request request, TripTrackingDa
LegTransitionNotification.checkForLegTransition(tripStatus, travelerPosition, tripData.trip);

// Provide response.
TripInstruction instruction = TravelerLocator.getInstruction(tripStatus, travelerPosition, create);
TripInstruction instruction = TravelerLocator.getInstruction(
tripStatus,
travelerPosition,
create || rerouted
);

// Perform interactions such as triggering traffic signals when approaching segments so configured.
// It is assumed to be ok to repeatedly perform the interaction.
Expand Down Expand Up @@ -177,19 +195,24 @@ public static EndTrackingResponse forciblyEndTracking(Request request) {
/**
* Attempt to reroute trip and provide appropriate response.
*/
public static TrackingResponse rerouteTracking(Request request) {
public static RerouteResponse rerouteTracking(Request request) {
TripTrackingData tripData = TripTrackingData.fromRequestTripId(request);
if (tripData != null) {
var trackedJourney = tripData.journey;
if (trackedJourney != null) {
if (rerouteTrip(tripData)) {
return doUpdateTracking(request, tripData, false);
var reroutedItinerary = rerouteTrip(tripData);
if (reroutedItinerary != null) {
return new RerouteResponse(
doUpdateTracking(request, tripData, false, true),
reroutedItinerary
);
} else {
return new TrackingResponse(
return new RerouteResponse(
TRIP_TRACKING_UPDATE_FREQUENCY_SECONDS,
"No itinerary found!",
trackedJourney.id,
TripStatus.DEVIATED.name()
TripStatus.DEVIATED.name(),
null
);
}
} else {
Expand All @@ -203,12 +226,14 @@ public static TrackingResponse rerouteTracking(Request request) {
/**
* Attempt to reroute from the traveler's current location to the trip's original destination.
*/
public static boolean rerouteTrip(TripTrackingData tripData) {
public static Itinerary rerouteTrip(TripTrackingData tripData) {
if (tripData != null) {
var trackedJourney = tripData.journey;
return trackedJourney != null && updateTripWithNewItinerary(trackedJourney);
if (trackedJourney != null) {
return updateTripWithNewItinerary(trackedJourney);
}
}
return false;
return null;
}

/**
Expand All @@ -225,15 +250,15 @@ private static void registerRerouting(TrackedJourney trackedJourney) {
/**
* Retrieve a new itinerary from OTP and update the associated trip's matching itinerary.
*/
private static boolean updateTripWithNewItinerary(TrackedJourney trackedJourney) {
private static Itinerary updateTripWithNewItinerary(TrackedJourney trackedJourney) {
Itinerary itinerary = getItineraryFromOtpResponse(trackedJourney);
if (itinerary != null) {
trackedJourney.trip.journeyState.matchingItinerary = itinerary;
Persistence.monitoredTrips.replace(trackedJourney.trip.id, trackedJourney.trip);
registerRerouting(trackedJourney);
return true;
return itinerary;
}
return false;
return null;
}

/**
Expand All @@ -243,7 +268,7 @@ private static Itinerary getItineraryFromOtpResponse(TrackedJourney trackedJourn
try {
Supplier<OtpResponse> otpResponseProvider = getOtpResponseProvider();
rerouteVariables = setOtpGraphQLVariables(
trackedJourney.trip.otp2QueryParams,new Coordinates(trackedJourney.lastLocation())
trackedJourney.trip.otp2QueryParams, new Coordinates(trackedJourney.lastLocation())
);
TripPlan plan = otpResponseProvider.get().plan;
return plan == null ? null : getShortestDuration(plan.itineraries);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.opentripplanner.middleware.triptracker.response;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.opentripplanner.middleware.otp.response.Itinerary;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RerouteResponse extends TrackingResponse {

Itinerary itinerary;

public RerouteResponse() {
}

public RerouteResponse(int frequencySeconds, String instruction, String journeyId, String tripStatus, Itinerary itinerary) {
super(frequencySeconds, instruction, journeyId, tripStatus);
this.itinerary = itinerary;
}

public RerouteResponse(TrackingResponse trackingResponse, Itinerary itinerary) {
super(trackingResponse);
this.itinerary = itinerary;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ public TrackingResponse() {
// do nothing.
}

public TrackingResponse(TrackingResponse trackingResponse) {
this.frequencySeconds = trackingResponse.frequencySeconds;
this.instruction = trackingResponse.instruction;
this.journeyId = trackingResponse.journeyId;
this.tripStatus = trackingResponse.tripStatus;
}

public TrackingResponse(int frequencySeconds, String instruction, String journeyId, String tripStatus) {
this.frequencySeconds = frequencySeconds;
this.instruction = instruction;
Expand Down
Loading

0 comments on commit cf7113f

Please sign in to comment.