From 6a7c89c8eb155d19e140c3976d563c8b9705d2fb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Mar 2025 21:47:24 +0100 Subject: [PATCH 01/13] Remove REST API --- .../model/ApiTravelOptionsMakerTest.java | 170 ---- .../ext/restapi/mapping/AgencyMapper.java | 34 - .../ext/restapi/mapping/AlertMapper.java | 46 - .../ext/restapi/mapping/BikeAccessMapper.java | 17 - .../restapi/mapping/BookingInfoMapper.java | 37 - .../restapi/mapping/BookingMethodMapper.java | 33 - .../restapi/mapping/BookingTimeMapper.java | 14 - .../restapi/mapping/ContactInfoMapper.java | 22 - .../ext/restapi/mapping/DirectionMapper.java | 14 - .../ext/restapi/mapping/FeedInfoMapper.java | 24 - .../restapi/mapping/FeedScopedIdMapper.java | 22 - .../ext/restapi/mapping/ItineraryMapper.java | 1 - .../ext/restapi/mapping/LegMapper.java | 48 - .../LegacyVehicleRoutingOptimizeType.java | 25 - .../ext/restapi/mapping/ModeMapper.java | 26 - .../ext/restapi/mapping/RouteMapper.java | 72 -- .../ext/restapi/mapping/RouteTypeMapper.java | 30 - .../ext/restapi/mapping/StopMapper.java | 98 -- .../mapping/StopTimesInPatternMapper.java | 30 - .../restapi/mapping/SystemNoticeMapper.java | 29 - .../ext/restapi/mapping/TransferMapper.java | 17 - .../ext/restapi/mapping/TripMapper.java | 62 -- .../restapi/mapping/TripPatternMapper.java | 48 - .../ext/restapi/mapping/TripPlanMapper.java | 30 - .../mapping/TripSearchMetadataMapper.java | 24 - .../ext/restapi/mapping/TripTimeMapper.java | 46 - .../mapping/VehicleRentalStationMapper.java | 32 - .../ext/restapi/mapping/WalkStepMapper.java | 4 - .../WheelchairAccessibilityMapper.java | 18 - .../ext/restapi/model/ApiAgency.java | 36 - .../ext/restapi/model/ApiAlert.java | 13 - .../ext/restapi/model/ApiBookingInfo.java | 107 --- .../ext/restapi/model/ApiBookingTime.java | 33 - .../ext/restapi/model/ApiContactInfo.java | 76 -- .../ext/restapi/model/ApiFeedInfo.java | 36 - .../ext/restapi/model/ApiItinerary.java | 12 - .../ext/restapi/model/ApiLeg.java | 20 - .../ext/restapi/model/ApiPatternDetail.java | 11 - .../ext/restapi/model/ApiPatternShort.java | 8 - .../ext/restapi/model/ApiRealTimeState.java | 53 -- .../ext/restapi/model/ApiRoute.java | 44 - .../ext/restapi/model/ApiRouteShort.java | 16 - .../ext/restapi/model/ApiRouterInfo.java | 113 --- .../ext/restapi/model/ApiRouterList.java | 9 - .../ext/restapi/model/ApiStop.java | 53 -- .../ext/restapi/model/ApiStopShort.java | 27 - .../restapi/model/ApiStopTimesInPattern.java | 9 - .../ext/restapi/model/ApiSystemNotice.java | 32 - .../ext/restapi/model/ApiTransfer.java | 11 - .../ext/restapi/model/ApiTravelOption.java | 61 -- .../restapi/model/ApiTravelOptionsMaker.java | 145 --- .../ext/restapi/model/ApiTrip.java | 53 -- .../ext/restapi/model/ApiTripPlan.java | 23 - .../restapi/model/ApiTripSearchMetadata.java | 60 -- .../ext/restapi/model/ApiTripShort.java | 10 - .../ext/restapi/model/ApiTripTimeShort.java | 25 - .../model/ApiVehicleRentalStation.java | 30 - .../model/ApiVehicleRentalStationList.java | 9 - .../ext/restapi/model/ApiWalkStep.java | 2 - .../ext/restapi/model/ElevationMetadata.java | 14 - .../restapi/model/TripPlannerResponse.java | 109 --- .../ext/restapi/resources/BikeRental.java | 84 -- .../ext/restapi/resources/IndexAPI.java | 628 ------------- .../restapi/resources/PlannerResource.java | 112 --- .../resources/RequestToPreferencesMapper.java | 240 ----- .../ext/restapi/resources/Routers.java | 76 -- .../restapi/resources/RoutingResource.java | 855 ------------------ .../restapi/resources/ValidateParameters.java | 61 -- .../ext/restapi/resources/package-info.md | 4 - .../opentripplanner/apis/APIEndpoints.java | 12 - .../apis/gtfs/mapping/StreetNoteMapper.java | 3 - .../support/mapping/StreetNoteMapper.java | 47 - .../framework/application/OTPFeature.java | 1 - .../graphql/GraphQLResponseSerializer.java | 7 - .../resources/PlannerResourceTest.java | 59 -- doc/user/Configuration.md | 1 - 76 files changed, 4523 deletions(-) delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md delete mode 100644 application/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java delete mode 100644 application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java deleted file mode 100644 index cf1acc021fb..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java +++ /dev/null @@ -1,170 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import org.junit.jupiter.api.Test; -import org.opentripplanner.transit.model.basic.TransitMode; - -/** - * Created by mabu on 28.7.2015. - */ -public class ApiTravelOptionsMakerTest { - - @Test - public void testMakeOptions() throws Exception { - boolean hasParkRide = false; - boolean hasBikeRide = false; - boolean hasBikeShare = false; - - HashSet transitModes = new HashSet<>(); - transitModes.add(TransitMode.BUS); - - List options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - - Set expected = new HashSet<>(); - expected.add(new ApiTravelOption("TRANSIT,WALK", "TRANSIT")); - expected.add(new ApiTravelOption("BUS,WALK", "BUS")); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("TRANSIT,BICYCLE", "TRANSIT_BICYCLE")); - expected.add(new ApiTravelOption("CAR,WALK,TRANSIT", "KISSRIDE")); - assertEquals(expected, new HashSet<>(options)); - - transitModes.add(TransitMode.RAIL); - - hasBikeRide = true; - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("TRANSIT,WALK", "TRANSIT")); - expected.add(new ApiTravelOption("BUS,WALK", "BUS")); - expected.add(new ApiTravelOption("RAIL,WALK", "RAIL")); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("TRANSIT,BICYCLE", "TRANSIT_BICYCLE")); - expected.add(new ApiTravelOption("BICYCLE_PARK,WALK,TRANSIT", "BIKERIDE")); - expected.add(new ApiTravelOption("CAR,WALK,TRANSIT", "KISSRIDE")); - - assertEquals(expected, new HashSet<>(options)); - - hasBikeRide = false; - - hasBikeShare = true; - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("TRANSIT,WALK", "TRANSIT")); - expected.add(new ApiTravelOption("BUS,WALK", "BUS")); - expected.add(new ApiTravelOption("RAIL,WALK", "RAIL")); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("WALK,BICYCLE_RENT", "BICYCLERENT")); - expected.add(new ApiTravelOption("TRANSIT,BICYCLE", "TRANSIT_BICYCLE")); - expected.add(new ApiTravelOption("TRANSIT,WALK,BICYCLE_RENT", "TRANSIT_BICYCLERENT")); - expected.add(new ApiTravelOption("CAR,WALK,TRANSIT", "KISSRIDE")); - - assertEquals(expected, new HashSet<>(options)); - - hasBikeShare = false; - hasParkRide = true; - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("TRANSIT,WALK", "TRANSIT")); - expected.add(new ApiTravelOption("BUS,WALK", "BUS")); - expected.add(new ApiTravelOption("RAIL,WALK", "RAIL")); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("TRANSIT,BICYCLE", "TRANSIT_BICYCLE")); - expected.add(new ApiTravelOption("CAR_PARK,WALK,TRANSIT", "PARKRIDE")); - expected.add(new ApiTravelOption("CAR,WALK,TRANSIT", "KISSRIDE")); - - assertEquals(expected, new HashSet<>(options)); - - hasBikeShare = true; - hasParkRide = true; - hasBikeRide = true; - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("TRANSIT,WALK", "TRANSIT")); - expected.add(new ApiTravelOption("BUS,WALK", "BUS")); - expected.add(new ApiTravelOption("RAIL,WALK", "RAIL")); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("WALK,BICYCLE_RENT", "BICYCLERENT")); - expected.add(new ApiTravelOption("TRANSIT,BICYCLE", "TRANSIT_BICYCLE")); - expected.add(new ApiTravelOption("TRANSIT,WALK,BICYCLE_RENT", "TRANSIT_BICYCLERENT")); - expected.add(new ApiTravelOption("CAR_PARK,WALK,TRANSIT", "PARKRIDE")); - expected.add(new ApiTravelOption("BICYCLE_PARK,WALK,TRANSIT", "BIKERIDE")); - expected.add(new ApiTravelOption("CAR,WALK,TRANSIT", "KISSRIDE")); - - assertEquals(expected, new HashSet<>(options)); - - transitModes = new HashSet<>(); - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - expected.add(new ApiTravelOption("WALK,BICYCLE_RENT", "BICYCLERENT")); - - assertEquals(expected, new HashSet<>(options)); - - hasBikeRide = false; - hasParkRide = false; - hasBikeShare = false; - - options = ApiTravelOptionsMaker.makeOptions( - transitModes, - hasBikeShare, - hasBikeRide, - hasParkRide - ); - expected = new HashSet<>(); - expected.add(new ApiTravelOption("WALK", "WALK")); - expected.add(new ApiTravelOption("BICYCLE", "BICYCLE")); - expected.add(new ApiTravelOption("CAR", "CAR")); - - assertEquals(expected, new HashSet<>(options)); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java deleted file mode 100644 index 5a86968153a..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiAgency; -import org.opentripplanner.transit.model.organization.Agency; - -public class AgencyMapper { - - public static List mapToApi(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(AgencyMapper::mapToApi).collect(Collectors.toList()); - } - - public static ApiAgency mapToApi(Agency domain) { - if (domain == null) { - return null; - } - ApiAgency api = new ApiAgency(); - - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.name = domain.getName(); - api.url = domain.getUrl(); - api.timezone = domain.getTimezone().getId(); - api.lang = domain.getLang(); - api.phone = domain.getPhone(); - api.fareUrl = domain.getFareUrl(); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java deleted file mode 100644 index 8fbfa71111f..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.time.Instant; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Optional; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiAlert; -import org.opentripplanner.routing.alertpatch.TransitAlert; - -public class AlertMapper { - - private final Locale locale; - - public AlertMapper(Locale locale) { - this.locale = locale; - } - - public List mapToApi(Collection alerts) { - // Using {@code null} and not an empty set will minimize the JSON removing the - // {@code alerts} from the result. - if (alerts == null || alerts.isEmpty()) { - return null; - } - - return alerts.stream().map(this::mapToApi).collect(Collectors.toList()); - } - - ApiAlert mapToApi(TransitAlert domain) { - ApiAlert api = new ApiAlert(); - api.alertHeaderText = domain.headerText().map(h -> h.toString(locale)).orElse(null); - api.alertDescriptionText = domain.descriptionText().map(t -> t.toString(locale)).orElse(null); - api.alertUrl = domain.url().map(u -> u.toString(locale)).orElse(null); - - api.effectiveStartDate = ofNullableInstant(domain.getEffectiveStartDate()); - api.effectiveEndDate = ofNullableInstant(domain.getEffectiveEndDate()); - - return api; - } - - private static Date ofNullableInstant(Instant instant) { - return Optional.ofNullable(instant).map(Date::from).orElse(null); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java deleted file mode 100644 index 3ceb86b4459..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.transit.model.network.BikeAccess; - -public class BikeAccessMapper { - - public static int mapToApi(BikeAccess bikeAccess) { - if (bikeAccess == null) { - return 0; - } - return switch (bikeAccess) { - case ALLOWED -> 1; - case NOT_ALLOWED -> 2; - default -> 0; - }; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java deleted file mode 100644 index eafa81195b5..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.ext.restapi.model.ApiBookingInfo; -import org.opentripplanner.transit.model.timetable.booking.BookingInfo; - -public class BookingInfoMapper { - - static ApiBookingInfo mapBookingInfoForPickup(BookingInfo info) { - return mapBookingInfo(info, true); - } - - static ApiBookingInfo mapBookingInfoForDropOff(BookingInfo info) { - return mapBookingInfo(info, false); - } - - /** - * @param isPickup either pickup or dropOff message must be set, not both. We only want to show - * the pick-up message for pickups, and the drop-off message for drop-offs. - */ - private static ApiBookingInfo mapBookingInfo(BookingInfo info, boolean isPickup) { - if (info == null) { - return null; - } - - return new ApiBookingInfo( - ContactInfoMapper.mapContactInfo(info.getContactInfo()), - BookingMethodMapper.mapBookingMethods(info.bookingMethods()), - BookingTimeMapper.mapBookingTime(info.getEarliestBookingTime()), - BookingTimeMapper.mapBookingTime(info.getLatestBookingTime()), - info.getMinimumBookingNotice().orElse(null), - info.getMaximumBookingNotice().orElse(null), - info.getMessage(), - isPickup ? info.getPickupMessage() : null, - !isPickup ? info.getDropOffMessage() : null - ); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java deleted file mode 100644 index 0ab743e1cb2..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.EnumSet; -import java.util.Set; -import java.util.stream.Collectors; -import org.opentripplanner.transit.model.timetable.booking.BookingMethod; - -public class BookingMethodMapper { - - static Set mapBookingMethods(EnumSet m) { - if (m == null) { - return null; - } - return m.stream().map(BookingMethodMapper::mapBookingMethods).collect(Collectors.toSet()); - } - - private static String mapBookingMethods(BookingMethod m) { - switch (m) { - case CALL_DRIVER: - return "CALL_DRIVER"; - case CALL_OFFICE: - return "CALL_OFFICE"; - case ONLINE: - return "ONLINE"; - case PHONE_AT_STOP: - return "PHONE_AT_STOP"; - case TEXT_MESSAGE: - return "TEXT_MESSAGE"; - default: - return null; - } - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java deleted file mode 100644 index 8b3034532fc..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.ext.restapi.model.ApiBookingTime; -import org.opentripplanner.transit.model.timetable.booking.BookingTime; - -public class BookingTimeMapper { - - static ApiBookingTime mapBookingTime(BookingTime time) { - if (time == null) { - return null; - } - return new ApiBookingTime(time.getTime().toSecondOfDay(), time.getDaysPrior()); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java deleted file mode 100644 index 452e15a0cb5..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.ext.restapi.model.ApiContactInfo; -import org.opentripplanner.transit.model.organization.ContactInfo; - -public class ContactInfoMapper { - - static ApiContactInfo mapContactInfo(ContactInfo info) { - if (info == null) { - return null; - } - return new ApiContactInfo( - info.getContactPerson(), - info.getPhoneNumber(), - info.geteMail(), - info.getFaxNumber(), - info.getInfoUrl(), - info.getBookingUrl(), - info.getAdditionalDetails() - ); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java deleted file mode 100644 index ea510b1fdc7..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.transit.model.timetable.Direction; - -public class DirectionMapper { - - public static Integer mapToApi(Direction direction) { - if (direction == Direction.UNKNOWN) { - return null; - } - - return direction.gtfsCode; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java deleted file mode 100644 index 203ade5749e..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.ext.restapi.model.ApiFeedInfo; -import org.opentripplanner.model.FeedInfo; - -public class FeedInfoMapper { - - public static ApiFeedInfo mapToApi(FeedInfo domain) { - if (domain == null) { - return null; - } - ApiFeedInfo api = new ApiFeedInfo(); - - api.id = domain.getId(); - api.publisherName = domain.getPublisherName(); - api.publisherUrl = domain.getPublisherUrl(); - api.lang = domain.getLang(); - api.startDate = LocalDateMapper.mapToApi(domain.getStartDate()); - api.endDate = LocalDateMapper.mapToApi(domain.getEndDate()); - api.version = domain.getVersion(); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java index 619c306fbbc..efd9ac1a3b5 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java @@ -1,37 +1,15 @@ package org.opentripplanner.ext.restapi.mapping; -import jakarta.ws.rs.BadRequestException; -import org.opentripplanner.transit.model.framework.AbstractTransitEntity; import org.opentripplanner.transit.model.framework.FeedScopedId; public class FeedScopedIdMapper { private static final String SEPARATOR = ":"; - /** @throws BadRequestException if id is not parsable. */ - public static FeedScopedId mapToDomain(String name, String api) { - try { - if (api == null) { - return null; - } - - String[] parts = api.split(SEPARATOR, 2); - return new FeedScopedId(parts[0], parts[1]); - } catch (IndexOutOfBoundsException e) { - throw new BadRequestException( - "'" + name + "' is not a valid id on the form: FEED_ID" + SEPARATOR + "ENTITY_ID" - ); - } - } - public static String mapToApi(FeedScopedId arg) { if (arg == null) { return null; } return arg.getFeedId() + SEPARATOR + arg.getId(); } - - public static String mapIdToApi(AbstractTransitEntity entity) { - return entity == null ? null : mapToApi(entity.getId()); - } } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java index 2fba4311258..2ba9a9b0bb3 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java @@ -48,7 +48,6 @@ public ApiItinerary mapItinerary(Itinerary domain) { api.arrivedAtDestinationWithRentedBicycle = domain.isArrivedAtDestinationWithRentedVehicle(); api.fare = fareMapper.mapFare(domain); api.legs = legMapper.mapLegs(domain.legs()); - api.systemNotices = SystemNoticeMapper.mapSystemNotices(domain.systemNotices()); api.accessibilityScore = domain.accessibilityScore(); return api; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index f97bcef1955..aaf435c0837 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -7,12 +7,9 @@ import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; -import org.opentripplanner.apis.support.mapping.StreetNoteMapper; -import org.opentripplanner.ext.restapi.model.ApiAlert; import org.opentripplanner.ext.restapi.model.ApiLeg; import org.opentripplanner.framework.geometry.EncodedPolyline; import org.opentripplanner.framework.i18n.I18NStringMapper; -import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; import org.opentripplanner.model.plan.TransitLeg; @@ -20,8 +17,6 @@ public class LegMapper { private final WalkStepMapper walkStepMapper; - private final StreetNoteMapper streetNoteMaperMapper; - private final AlertMapper alertMapper; private final PlaceMapper placeMapper; private final boolean addIntermediateStops; @@ -29,8 +24,6 @@ public class LegMapper { public LegMapper(Locale locale, boolean addIntermediateStops) { this.walkStepMapper = new WalkStepMapper(locale); - this.streetNoteMaperMapper = new StreetNoteMapper(locale); - this.alertMapper = new AlertMapper(locale); this.placeMapper = new PlaceMapper(locale); this.addIntermediateStops = addIntermediateStops; this.i18NStringMapper = new I18NStringMapper(locale); @@ -131,23 +124,9 @@ public ApiLeg mapLeg( api.legGeometry = EncodedPolyline.encode(domain.getLegGeometry()); api.legElevation = mapElevation(domain.getElevationProfile()); api.steps = walkStepMapper.mapWalkSteps(domain.getWalkSteps()); - api.alerts = concatenateAlerts( - streetNoteMaperMapper.mapToApi(domain.getStreetNotes()), - alertMapper.mapToApi(domain.getTransitAlerts()) - ); - api.boardRule = getBoardAlightMessage(domain.getBoardRule()); - api.alightRule = getBoardAlightMessage(domain.getAlightRule()); - - api.pickupBookingInfo = BookingInfoMapper.mapBookingInfoForPickup( - domain.getPickupBookingInfo() - ); - api.dropOffBookingInfo = BookingInfoMapper.mapBookingInfoForDropOff( - domain.getDropOffBookingInfo() - ); api.rentedBike = domain.getRentedVehicle(); api.walkingBike = domain.getWalkingBike(); - api.accessibilityScore = domain.accessibilityScore(); return api; } @@ -156,31 +135,4 @@ private Double round3Decimals(double value) { return Math.round(value * 1000d) / 1000d; } - private static String getBoardAlightMessage(PickDrop boardAlightType) { - if (boardAlightType == null) { - return null; - } - switch (boardAlightType) { - case NONE: - return "impossible"; - case CALL_AGENCY: - return "mustPhone"; - case COORDINATE_WITH_DRIVER: - return "coordinateWithDriver"; - default: - return null; - } - } - - private static List concatenateAlerts(List a, List b) { - if (a == null) { - return b; - } else if (b == null) { - return a; - } else { - List ret = new ArrayList<>(a); - ret.addAll(b); - return ret; - } - } } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java deleted file mode 100644 index 675e8541048..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegacyVehicleRoutingOptimizeType.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.routing.core.VehicleRoutingOptimizeType; - -/** - * Bicycle and scooter optimization types that are only meant to be used by the REST API. Related to - * {@link VehicleRoutingOptimizeType} - */ -public enum LegacyVehicleRoutingOptimizeType { - QUICK, - SAFE, - FLAT, - GREENWAYS, - TRIANGLE; - - public static VehicleRoutingOptimizeType map(LegacyVehicleRoutingOptimizeType type) { - return switch (type) { - case QUICK -> VehicleRoutingOptimizeType.SHORTEST_DURATION; - case FLAT -> VehicleRoutingOptimizeType.FLAT_STREETS; - case SAFE -> VehicleRoutingOptimizeType.SAFE_STREETS; - case GREENWAYS -> VehicleRoutingOptimizeType.SAFEST_STREETS; - case TRIANGLE -> VehicleRoutingOptimizeType.TRIANGLE; - }; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java index 49bd2619149..12ff19dc971 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java @@ -1,36 +1,10 @@ package org.opentripplanner.ext.restapi.mapping; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import org.opentripplanner.model.plan.Leg; -import org.opentripplanner.model.plan.StreetLeg; -import org.opentripplanner.model.plan.TransitLeg; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.basic.TransitMode; public class ModeMapper { - public static String mapToApi(Leg domain) { - if (domain == null) { - return null; - } - if (domain instanceof StreetLeg sl) { - return mapToApi(sl.getMode()); - } - if (domain instanceof TransitLeg tl) { - return mapToApi(tl.getMode()); - } - throw new IllegalStateException("Unhandled leg type: " + domain); - } - - public static List mapToApi(Set domain) { - if (domain == null) { - return null; - } - return domain.stream().map(ModeMapper::mapToApi).collect(Collectors.toList()); - } - public static String mapToApi(TraverseMode domain) { if (domain == null) { return null; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java deleted file mode 100644 index f6a32532238..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiRoute; -import org.opentripplanner.ext.restapi.model.ApiRouteShort; -import org.opentripplanner.framework.i18n.I18NStringMapper; -import org.opentripplanner.transit.model.network.Route; -import org.opentripplanner.transit.model.organization.Branding; - -public class RouteMapper { - - public static List mapToApi(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(RouteMapper::mapToApi).collect(Collectors.toList()); - } - - public static ApiRoute mapToApi(Route domain) { - if (domain == null) { - return null; - } - I18NStringMapper stringMapper = new I18NStringMapper(null); - ApiRoute api = new ApiRoute(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.agency = AgencyMapper.mapToApi(domain.getAgency()); - api.shortName = domain.getShortName(); - api.longName = stringMapper.mapToApi(domain.getLongName()); - api.mode = ModeMapper.mapToApi(domain.getMode()); - api.type = domain.getGtfsType() != null - ? domain.getGtfsType() - : RouteTypeMapper.mapToApi(domain.getMode()); - api.desc = domain.getDescription(); - api.url = domain.getUrl(); - api.color = domain.getColor(); - api.textColor = domain.getTextColor(); - api.bikesAllowed = BikeAccessMapper.mapToApi(domain.getBikesAllowed()); - api.sortOrder = domain.getGtfsSortOrder(); - - Branding branding = domain.getBranding(); - if (branding != null) { - api.brandingUrl = branding.getUrl(); - } - - return api; - } - - public static List mapToApiShort(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(RouteMapper::mapToApiShort).collect(Collectors.toList()); - } - - public static ApiRouteShort mapToApiShort(Route domain) { - if (domain == null) { - return null; - } - I18NStringMapper stringMapper = new I18NStringMapper(null); - ApiRouteShort api = new ApiRouteShort(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.shortName = domain.getShortName(); - api.longName = stringMapper.mapToApi(domain.getLongName()); - api.mode = ModeMapper.mapToApi(domain.getMode()); - api.color = domain.getColor(); - api.agencyName = domain.getAgency().getName(); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java deleted file mode 100644 index 9dede395e80..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.transit.model.basic.TransitMode; - -public class RouteTypeMapper { - - private static final int DEFAULT_ROUTE_TYPE = -1; - - public static int mapToApi(TransitMode domain) { - if (domain == null) { - return DEFAULT_ROUTE_TYPE; - } - - return switch (domain) { - case RAIL -> 2; - case COACH, BUS -> 3; - case SUBWAY -> 1; - case TRAM -> 0; - case FERRY -> 4; - case AIRPLANE -> 1100; - case CABLE_CAR -> 5; - case GONDOLA -> 6; - case FUNICULAR -> 7; - case TROLLEYBUS -> 11; - case MONORAIL -> 12; - case TAXI -> 1500; - case CARPOOL -> 1551; - }; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java deleted file mode 100644 index e183fdc44f6..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiStop; -import org.opentripplanner.ext.restapi.model.ApiStopShort; -import org.opentripplanner.framework.i18n.I18NStringMapper; -import org.opentripplanner.transit.model.site.StopLocation; - -public class StopMapper { - - public static List mapToApi(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(StopMapper::mapToApi).collect(Collectors.toList()); - } - - public static ApiStop mapToApi(StopLocation domain) { - return mapToApi(domain, true); - } - - public static ApiStop mapToApi(StopLocation domain, boolean extended) { - if (domain == null) { - return null; - } - - ApiStop api = new ApiStop(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.lat = domain.getLat(); - api.lon = domain.getLon(); - api.code = domain.getCode(); - api.name = domain.getName().toString(); - if (extended) { - String desc = domain.getDescription() != null ? domain.getDescription().toString() : null; - api.desc = desc; - api.zoneId = domain.getFirstZoneAsString(); - api.url = I18NStringMapper.mapToApi(domain.getUrl(), null); - api.locationType = 0; - api.stationId = FeedScopedIdMapper.mapIdToApi(domain.getParentStation()); - api.parentStation = mapToParentStationOldId(domain); - //api.stopTimezone = stop.getTimezone(); - api.wheelchairBoarding = WheelchairAccessibilityMapper.mapToApi( - domain.getWheelchairAccessibility() - ); - //api.direction = stop.getDirection(); - } - return api; - } - - public static ApiStopShort mapToApiShort(StopLocation domain) { - if (domain == null) { - return null; - } - - ApiStopShort api = new ApiStopShort(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.code = domain.getCode(); - api.name = domain.getName().toString(); - api.lat = domain.getLat(); - api.lon = domain.getLon(); - api.url = I18NStringMapper.mapToApi(domain.getUrl(), null); - api.stationId = FeedScopedIdMapper.mapIdToApi(domain.getParentStation()); - // parentStation may be missing on the stop returning null. - // TODO harmonize these names, maybe use "station" everywhere - api.cluster = mapToParentStationOldId(domain); - - return api; - } - - /** @param distance in integral meters, to avoid serializing a bunch of decimal places. */ - public static ApiStopShort mapToApiShort(StopLocation domain, double distance) { - if (domain == null) { - return null; - } - - ApiStopShort api = mapToApiShort(domain); - api.dist = (int) distance; - - return api; - } - - public static List mapToApiShort(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(StopMapper::mapToApiShort).toList(); - } - - /** - * Get the parent station id (without feed-scope) for the given station element, this method - * should only be used to fetch old ids for beeing backward compatible. - */ - private static String mapToParentStationOldId(StopLocation stop) { - return stop.isPartOfStation() ? stop.getParentStation().getId().getId() : null; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java deleted file mode 100644 index d917bac9203..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiStopTimesInPattern; -import org.opentripplanner.model.StopTimesInPattern; - -public class StopTimesInPatternMapper { - - public static List mapToApi(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(StopTimesInPatternMapper::mapToApi).collect(Collectors.toList()); - } - - public static ApiStopTimesInPattern mapToApi(StopTimesInPattern domain) { - if (domain == null) { - return null; - } - - ApiStopTimesInPattern api = new ApiStopTimesInPattern(); - - api.pattern = TripPatternMapper.mapToApiShort(domain.pattern); - api.times = TripTimeMapper.mapToApi(domain.times); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java deleted file mode 100644 index 1c79a4a7074..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiSystemNotice; -import org.opentripplanner.model.SystemNotice; - -public final class SystemNoticeMapper { - - private SystemNoticeMapper() {} - - public static List mapSystemNotices(Collection domainList) { - // Using {@code null} and not an empty set will minimize the JSON removing the - // {@code systemNotices} from the result. - if (domainList == null || domainList.isEmpty()) { - return null; - } - - return domainList - .stream() - .map(SystemNoticeMapper::mapSystemNotice) - .collect(Collectors.toList()); - } - - public static ApiSystemNotice mapSystemNotice(SystemNotice domain) { - return new ApiSystemNotice(domain.tag(), domain.text()); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java deleted file mode 100644 index 49b87f25779..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.ext.restapi.model.ApiTransfer; -import org.opentripplanner.model.PathTransfer; - -public class TransferMapper { - - public static ApiTransfer mapToApi(PathTransfer domain) { - if (domain == null) { - return null; - } - ApiTransfer api = new ApiTransfer(); - api.toStopId = FeedScopedIdMapper.mapToApi(domain.to.getId()); - api.distance = domain.getDistanceMeters(); - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java deleted file mode 100644 index 1f7abd3897a..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.opentripplanner.ext.restapi.model.ApiTrip; -import org.opentripplanner.ext.restapi.model.ApiTripShort; -import org.opentripplanner.framework.i18n.I18NStringMapper; -import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.model.timetable.Trip; - -public class TripMapper { - - public static ApiTrip mapToApi(Trip obj) { - if (obj == null) { - return null; - } - - ApiTrip api = new ApiTrip(); - api.id = FeedScopedIdMapper.mapToApi(obj.getId()); - api.routeId = FeedScopedIdMapper.mapIdToApi(obj.getRoute()); - api.serviceId = FeedScopedIdMapper.mapToApi(obj.getServiceId()); - api.tripShortName = obj.getShortName(); - api.tripHeadsign = I18NStringMapper.mapToApi(obj.getHeadsign(), null); - api.routeShortName = obj.getRoute().getShortName(); - final Integer directionId = DirectionMapper.mapToApi(obj.getDirection()); - if (directionId != null) { - api.directionId = Integer.toString(directionId); - } - api.blockId = obj.getGtfsBlockId(); - api.shapeId = FeedScopedIdMapper.mapToApi(obj.getShapeId()); - api.wheelchairAccessible = WheelchairAccessibilityMapper.mapToApi(obj.getWheelchairBoarding()); - api.bikesAllowed = BikeAccessMapper.mapToApi(obj.getBikesAllowed()); - - return api; - } - - public static ApiTripShort mapToApiShort(Trip domain) { - if (domain == null) { - return null; - } - - ApiTripShort api = new ApiTripShort(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.tripHeadsign = I18NStringMapper.mapToApi(domain.getHeadsign(), null); - api.serviceId = FeedScopedIdMapper.mapToApi(domain.getServiceId()); - FeedScopedId shape = domain.getShapeId(); - - // TODO OTP2 - All ids should be fully qualified including feed scope id. - api.shapeId = shape == null ? null : shape.getId(); - api.direction = DirectionMapper.mapToApi(domain.getDirection()); - - return api; - } - - public static List mapToApiShort(Stream domain) { - if (domain == null) { - return null; - } - return domain.map(TripMapper::mapToApiShort).collect(Collectors.toList()); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java deleted file mode 100644 index ba68979c73f..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiPatternDetail; -import org.opentripplanner.ext.restapi.model.ApiPatternShort; -import org.opentripplanner.transit.model.network.TripPattern; - -public class TripPatternMapper { - - public static List mapToApiShort(Collection domainList) { - if (domainList == null) { - return null; - } - return domainList.stream().map(TripPatternMapper::mapToApiShort).collect(Collectors.toList()); - } - - public static ApiPatternShort mapToApiShort(TripPattern domain) { - if (domain == null) { - return null; - } - return mapToApiShort(domain, ApiPatternShort::new); - } - - public static ApiPatternDetail mapToApiDetailed(TripPattern domain) { - if (domain == null) { - return null; - } - - ApiPatternDetail api = mapToApiShort(domain, ApiPatternDetail::new); - api.stops = StopMapper.mapToApiShort(domain.getStops()); - api.trips = TripMapper.mapToApiShort(domain.scheduledTripsAsStream()); - return api; - } - - private static T mapToApiShort( - TripPattern domain, - Supplier create - ) { - T api = create.get(); - api.id = FeedScopedIdMapper.mapToApi(domain.getId()); - api.desc = domain.getName(); - api.routeId = FeedScopedIdMapper.mapIdToApi(domain.getRoute()); - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java deleted file mode 100644 index 891afcf9542..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Date; -import java.util.Locale; -import org.opentripplanner.ext.restapi.model.ApiTripPlan; -import org.opentripplanner.model.plan.TripPlan; - -public class TripPlanMapper { - - private final ItineraryMapper itineraryMapper; - private final PlaceMapper placeMapper; - - public TripPlanMapper(Locale locale, boolean addIntermediateStops) { - this.itineraryMapper = new ItineraryMapper(locale, addIntermediateStops); - this.placeMapper = new PlaceMapper(locale); - } - - public ApiTripPlan mapTripPlan(TripPlan domain) { - if (domain == null) { - return null; - } - ApiTripPlan api = new ApiTripPlan(); - api.date = Date.from(domain.date); - // The origin/destination do not have arrival/departure times; Hence {@code null} is used. - api.from = placeMapper.mapPlace(domain.from, null, null, null, null); - api.to = placeMapper.mapPlace(domain.to, null, null, null, null); - api.itineraries = itineraryMapper.mapItineraries(domain.itineraries); - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java deleted file mode 100644 index db92e821493..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.time.Instant; -import org.opentripplanner.ext.restapi.model.ApiTripSearchMetadata; -import org.opentripplanner.routing.api.response.TripSearchMetadata; - -public class TripSearchMetadataMapper { - - public static ApiTripSearchMetadata mapTripSearchMetadata(TripSearchMetadata domain) { - if (domain == null) { - return null; - } - - ApiTripSearchMetadata api = new ApiTripSearchMetadata(); - api.searchWindowUsed = (int) domain.searchWindowUsed.toSeconds(); - api.nextDateTime = mapInstantToMs(domain.nextDateTime); - api.prevDateTime = mapInstantToMs(domain.prevDateTime); - return api; - } - - private static Long mapInstantToMs(Instant instant) { - return instant == null ? null : instant.toEpochMilli(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java deleted file mode 100644 index 38041304c1c..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiRealTimeState; -import org.opentripplanner.ext.restapi.model.ApiTripTimeShort; -import org.opentripplanner.framework.i18n.I18NStringMapper; -import org.opentripplanner.model.TripTimeOnDate; - -public class TripTimeMapper { - - public static List mapToApi(Collection domain) { - if (domain == null) { - return null; - } - return domain.stream().map(TripTimeMapper::mapToApi).collect(Collectors.toList()); - } - - public static ApiTripTimeShort mapToApi(TripTimeOnDate domain) { - if (domain == null) { - return null; - } - - ApiTripTimeShort api = new ApiTripTimeShort(); - - api.stopId = FeedScopedIdMapper.mapToApi(domain.getStop().getId()); - api.stopIndex = domain.getStopIndex(); - api.stopCount = domain.getStopCount(); - api.scheduledArrival = domain.getScheduledArrival(); - api.scheduledDeparture = domain.getScheduledDeparture(); - api.realtimeArrival = domain.getRealtimeArrival(); - api.realtimeDeparture = domain.getRealtimeDeparture(); - api.arrivalDelay = domain.getArrivalDelay(); - api.departureDelay = domain.getDepartureDelay(); - api.timepoint = domain.isTimepoint(); - api.realtime = domain.isRealtime(); - api.realtimeState = ApiRealTimeState.RealTimeState(domain.getRealTimeState()); - api.blockId = domain.getBlockId(); - api.headsign = I18NStringMapper.mapToApi(domain.getHeadsign(), null); - api.tripId = FeedScopedIdMapper.mapToApi(domain.getTrip().getId()); - api.serviceDay = domain.getServiceDayMidnight(); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java deleted file mode 100644 index 2f68448fdf4..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import java.util.List; -import java.util.Locale; -import org.opentripplanner.ext.restapi.model.ApiVehicleRentalStation; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; - -public class VehicleRentalStationMapper { - - public static ApiVehicleRentalStation mapToApi(VehicleRentalPlace domain, Locale locale) { - if (domain == null) { - return null; - } - - ApiVehicleRentalStation api = new ApiVehicleRentalStation(); - - api.id = domain.getStationId(); - api.name = domain.getName().toString(locale); - api.x = domain.getLongitude(); - api.y = domain.getLatitude(); - api.bikesAvailable = domain.getVehiclesAvailable(); - api.spacesAvailable = domain.getSpacesAvailable(); - api.allowDropoff = domain.isAllowDropoff(); - api.isFloatingBike = domain.isFloatingVehicle(); - api.isCarStation = domain.isCarStation(); - api.networks = List.of(domain.getNetwork()); - api.realTimeData = domain.isRealTimeData(); - api.rentalUris = domain.getRentalUris(); - - return api; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java index 1c1aa48f589..d1814511307 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java @@ -7,18 +7,15 @@ import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.apis.support.mapping.StreetNoteMapper; import org.opentripplanner.ext.restapi.model.ApiWalkStep; import org.opentripplanner.model.plan.WalkStep; public class WalkStepMapper { - private final StreetNoteMapper alertsMapper; private final Locale locale; public WalkStepMapper(Locale locale) { this.locale = locale; - this.alertsMapper = new StreetNoteMapper(locale); } public List mapWalkSteps(Collection domain) { @@ -51,7 +48,6 @@ public ApiWalkStep mapWalkStep(WalkStep domain) { } api.elevation = mapElevation(domain.getElevationProfile()); api.walkingBike = domain.isWalkingBike(); - api.alerts = alertsMapper.mapToApi(domain.getStreetNotes()); return api; } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java deleted file mode 100644 index e0aafeaee05..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import org.opentripplanner.transit.model.basic.Accessibility; - -public class WheelchairAccessibilityMapper { - - public static Integer mapToApi(Accessibility domain) { - if (domain == null) { - return 0; - } - - return switch (domain) { - case NO_INFORMATION -> 0; - case POSSIBLE -> 1; - case NOT_POSSIBLE -> 2; - }; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java deleted file mode 100644 index d1c15b7f6f6..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.util.Objects; - -public class ApiAgency implements Serializable { - - public String id; - public String name; - public String url; - public String timezone; - public String lang; - public String phone; - public String fareUrl; - - @Override - public int hashCode() { - return Objects.hash(id); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiAgency apiAgency = (ApiAgency) o; - return Objects.equals(id, apiAgency.id); - } - - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java deleted file mode 100644 index a503a7d18e2..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.Date; - -public class ApiAlert { - - public String alertHeaderText; - public String alertDescriptionText; - public String alertUrl; - /** null means unknown */ - public Date effectiveStartDate; - public Date effectiveEndDate; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java deleted file mode 100644 index 830321a3737..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.time.Duration; -import java.util.Set; -import org.opentripplanner.utils.tostring.ToStringBuilder; - -/** - * Info about how a trip might be booked at a particular stop. All of this is pass-through - * information, except information about booking time and booking notice. - */ -public class ApiBookingInfo implements Serializable { - - /** - * How to contact the agency to book a trip or requests information. - */ - public final ApiContactInfo contactInfo; - - /** - * What booking methods are available at this stop time. - */ - public final Set bookingMethods; - - /** - * Cannot be set at the same time as minimumBookingNotice or maximumBookingNotice - */ - public final ApiBookingTime earliestBookingTime; - - /** - * Cannot be set at the same time as minimumBookingNotice or maximumBookingNotice - */ - public final ApiBookingTime latestBookingTime; - - /** - * Cannot be set at the same time as earliestBookingTime or latestBookingTime - */ - public final Integer minimumBookingNoticeSeconds; - - /** - * Cannot be set at the same time as earliestBookingTime or latestBookingTime - */ - public final Integer maximumBookingNoticeSeconds; - - /** - * Message to riders utilizing service at a stop_time when booking on-demand pickup and drop off. - * Meant to provide minimal information to be transmitted within a user interface about the action - * a rider must take in order to utilize the service. - */ - public final String message; - - /** - * Functions in the same way as message but used when riders have on-demand pickup only. - */ - public final String pickupMessage; - - /** - * Functions in the same way as message but used when riders have on-demand drop off only. - */ - public final String dropOffMessage; - - public ApiBookingInfo( - ApiContactInfo contactInfo, - Set bookingMethods, - ApiBookingTime earliestBookingTime, - ApiBookingTime latestBookingTime, - Duration minimumBookingNotice, - Duration maximumBookingNotice, - String message, - String pickupMessage, - String dropOffMessage - ) { - this.contactInfo = contactInfo; - this.bookingMethods = bookingMethods; - this.message = message; - this.pickupMessage = pickupMessage; - this.dropOffMessage = dropOffMessage; - - this.earliestBookingTime = earliestBookingTime; - this.latestBookingTime = latestBookingTime; - if (minimumBookingNotice != null) { - this.minimumBookingNoticeSeconds = (int) minimumBookingNotice.toSeconds(); - } else { - this.minimumBookingNoticeSeconds = null; - } - - if (maximumBookingNotice != null) { - this.maximumBookingNoticeSeconds = (int) maximumBookingNotice.toSeconds(); - } else { - this.maximumBookingNoticeSeconds = null; - } - } - - @Override - public String toString() { - return ToStringBuilder.of(getClass()) - .addObj("contactInfo", contactInfo) - .addCol("bookingMethods", bookingMethods) - .addObj("earliestBookingTime", earliestBookingTime) - .addObj("latestBookingTime", latestBookingTime) - .addNum("minimumBookingNoticeSeconds", minimumBookingNoticeSeconds) - .addNum("maximumBookingNoticeSeconds", maximumBookingNoticeSeconds) - .addStr("message", message) - .addStr("pickupMessage", pickupMessage) - .addStr("dropOffMessage", dropOffMessage) - .toString(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java deleted file mode 100644 index f2a8d5767ff..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import org.opentripplanner.utils.tostring.ToStringBuilder; - -/** - * Represents either an earliest or latest time a trip can be booked relative to the departure day - * of the trip. - */ -public class ApiBookingTime implements Serializable { - - /** - * The latest time at which the trip must be booked. - *

- * Unit: seconds since midnight - */ - public final int time; - - /** - * How many days in advance this trip must be booked. - */ - public final int daysPrior; - - public ApiBookingTime(int time, int daysPrior) { - this.time = time; - this.daysPrior = daysPrior; - } - - @Override - public String toString() { - return ToStringBuilder.of(getClass()).addNum("time", time).addNum("daysPrior", time).toString(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java deleted file mode 100644 index ef57bb0f7e5..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import org.opentripplanner.utils.tostring.ToStringBuilder; - -/** - * How to contact the agency to book a trip or requests information. - */ -public class ApiContactInfo implements Serializable { - - /** - * The person's name responsible to administer the trip. - */ - public final String contactPerson; - - /** - * Phone number to book the trip or request information. - */ - public final String phoneNumber; - - /** - * Email address to book the trip or request information. - */ - public final String eMail; - - /** - * Fax number to book the trip or request information. Very important. - */ - public final String faxNumber; - - /** - * URL to a website about general information about the service. - */ - public final String infoUrl; - - /** - * URL to a website to book the service. - */ - public final String bookingUrl; - - /** - * Any other comment that does not fit anywhere else. - */ - public final String additionalDetails; - - public ApiContactInfo( - String contactPerson, - String phoneNumber, - String eMail, - String faxNumber, - String infoUrl, - String bookingUrl, - String additionalDetails - ) { - this.contactPerson = contactPerson; - this.phoneNumber = phoneNumber; - this.eMail = eMail; - this.faxNumber = faxNumber; - this.infoUrl = infoUrl; - this.bookingUrl = bookingUrl; - this.additionalDetails = additionalDetails; - } - - @Override - public String toString() { - return ToStringBuilder.of(getClass()) - .addStr("contactPerson", contactPerson) - .addStr("phoneNumber", phoneNumber) - .addStr("eMail", eMail) - .addStr("faxNumber", faxNumber) - .addStr("infoUrl", infoUrl) - .addStr("bookingUrl", bookingUrl) - .addStr("additionalDetails", additionalDetails) - .toString(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java deleted file mode 100644 index 1b96ee0759d..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.util.Objects; - -public final class ApiFeedInfo implements Serializable { - - public String id; - public String publisherName; - public String publisherUrl; - public String lang; - public String startDate; - public String endDate; - public String version; - - @Override - public int hashCode() { - return Objects.hash(id); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiFeedInfo that = (ApiFeedInfo) o; - return id.equals(that.id); - } - - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java index 0bce9426fd8..bef710cd99c 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Map; import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; /** * An Itinerary is one complete way of getting from the start location to the end location. @@ -87,17 +86,6 @@ public class ApiItinerary { */ public List legs = new ArrayList<>(); - /** - * A itinerary can be tagged with a system notice. System notices should only be added to a - * response if explicit asked for in the request. - *

- * For example when tuning or manually testing the itinerary-filter-chain it you can enable the - * {@link ItineraryFilterPreferences#debug} and instead of removing itineraries from the result the - * itineraries would be tagged by the filters instead. This enable investigating, why an expected - * itinerary is missing from the result set. - */ - public List systemNotices = null; - /** * This itinerary has a greater slope than the user requested (but there are no possible * itineraries with a good slope). diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java index f056a852bc3..0779755fd85 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java @@ -191,8 +191,6 @@ public class ApiLeg { */ public List steps; - public List alerts; - public String routeShortName; public String routeLongName; @@ -201,10 +199,6 @@ public class ApiLeg { public String alightRule; - public ApiBookingInfo pickupBookingInfo; - - public ApiBookingInfo dropOffBookingInfo; - public Boolean rentedBike; /** @@ -215,20 +209,6 @@ public class ApiLeg { @Deprecated public Boolean walkingBike; - /** - * An experimental feature for calculating a numeric score between 0 and 1 which indicates - * how accessible the itinerary is as a whole. This is not a very scientific method but just - * a rough guidance that expresses certainty or uncertainty about the accessibility. - * - * The intended audience for this score are frontend developers wanting to show a simple UI - * rather than having to iterate over all the stops and trips. - * - * Note: the information to calculate this score are all available to the frontend, however - * calculating them on the backend makes life a little easier and changes are automatically - * applied to all frontends. - */ - public Float accessibilityScore; - /** * The leg's duration in seconds */ diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java deleted file mode 100644 index d24f7f35c12..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.ArrayList; -import java.util.Collection; - -public class ApiPatternDetail extends ApiPatternShort { - - /* Maybe these should just be lists of IDs only, since there are stops and trips subendpoints. */ - public Collection stops = new ArrayList<>(); - public Collection trips = new ArrayList<>(); -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java deleted file mode 100644 index d2acd234f47..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -public class ApiPatternShort { - - public String id; - public String desc; - public String routeId; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java deleted file mode 100644 index d9a068349ec..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import org.opentripplanner.transit.model.timetable.RealTimeState; - -/** - * The real-time state of a trip - */ -public enum ApiRealTimeState { - /** - * The trip information comes from the GTFS feed, i.e. no real-time update has been applied. - */ - SCHEDULED, - - /** - * The trip information has been updated, but the trip pattern stayed the same as the trip pattern - * of the scheduled trip. - */ - UPDATED, - - /** - * The trip has been canceled by a real-time update. - */ - CANCELED, - - /** - * The trip has been added using a real-time update, i.e. the trip was not present in the GTFS - * feed. - */ - ADDED, - - /** - * The trip information has been updated and resulted in a different trip pattern compared to the - * trip pattern of the scheduled trip. - */ - MODIFIED; - - public static ApiRealTimeState RealTimeState(RealTimeState other) { - switch (other) { - case SCHEDULED: - return ApiRealTimeState.SCHEDULED; - case UPDATED: - return ApiRealTimeState.UPDATED; - case CANCELED: - return ApiRealTimeState.CANCELED; - case ADDED: - return ApiRealTimeState.ADDED; - case MODIFIED: - return ApiRealTimeState.MODIFIED; - default: - throw new IllegalArgumentException(); - } - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java deleted file mode 100644 index d4ce90d9b23..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java +++ /dev/null @@ -1,44 +0,0 @@ -/* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.util.Objects; - -public final class ApiRoute implements Serializable { - - public String id; - public ApiAgency agency; - public String shortName; - public String longName; - public String mode; - public int type; - public String desc; - public String url; - public String color; - public String textColor; - public int bikesAllowed = 0; - public Integer sortOrder; - public String brandingUrl; - - @Override - public int hashCode() { - return Objects.hash(id); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiRoute apiRoute = (ApiRoute) o; - return Objects.equals(id, apiRoute.id); - } - - @Override - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java deleted file mode 100644 index a62dcc4bdb6..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -public class ApiRouteShort { - - public String id; - public String shortName; - public String longName; - public String mode; - public String color; - public String agencyName; - - @Override - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java deleted file mode 100644 index e552900cd25..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.Date; -import java.util.List; -import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.ext.restapi.mapping.ModeMapper; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.service.vehicleparking.VehicleParkingService; -import org.opentripplanner.service.vehiclerental.VehicleRentalService; -import org.opentripplanner.service.worldenvelope.model.WorldEnvelope; -import org.opentripplanner.transit.service.TransitService; - -@SuppressWarnings("unused") -public class ApiRouterInfo { - - /** Keep ref to domain object, but avoid exposing it */ - private final WorldEnvelope envelope; - public final boolean hasBikePark; - public final boolean hasCarPark; - public final boolean hasVehicleParking; - public String routerId; - public Geometry polygon; - public Date buildTime; - public long transitServiceStarts; - public long transitServiceEnds; - public List transitModes; - public boolean hasParkRide; - public boolean hasBikeSharing; - public List travelOptions; - - /** TODO: Do not pass in the graph here, do this in a mapper instead. */ - public ApiRouterInfo( - String routerId, - Graph graph, - TransitService transitService, - VehicleRentalService vehicleRentalService, - VehicleParkingService vehicleParkingService, - WorldEnvelope envelope - ) { - this.routerId = routerId; - this.polygon = graph.getConvexHull(); - this.buildTime = Date.from(graph.buildTime); - this.transitServiceStarts = transitService.getTransitServiceStarts().toEpochSecond(); - this.transitServiceEnds = transitService.getTransitServiceEnds().toEpochSecond(); - this.transitModes = ModeMapper.mapToApi(transitService.listTransitModes()); - this.envelope = envelope; - this.hasBikeSharing = mapHasBikeSharing(vehicleRentalService); - this.hasBikePark = mapHasBikePark(vehicleParkingService); - this.hasCarPark = mapHasCarPark(vehicleParkingService); - this.hasParkRide = this.hasCarPark; - this.hasVehicleParking = mapHasVehicleParking(vehicleParkingService); - this.travelOptions = ApiTravelOptionsMaker.makeOptions( - graph, - vehicleRentalService, - vehicleParkingService, - transitService - ); - } - - public boolean mapHasBikeSharing(VehicleRentalService service) { - if (service == null) { - return false; - } - - //at least 2 bike sharing stations are needed for useful bike sharing - return service.getVehicleRentalPlaces().size() > 1; - } - - public boolean mapHasBikePark(VehicleParkingService service) { - if (service == null) { - return false; - } - return service.listBikeParks().stream().findAny().isPresent(); - } - - public boolean mapHasCarPark(VehicleParkingService service) { - if (service == null) { - return false; - } - return service.listCarParks().stream().findAny().isPresent(); - } - - public boolean mapHasVehicleParking(VehicleParkingService service) { - if (service == null) { - return false; - } - return service.listVehicleParkings().stream().findAny().isPresent(); - } - - public double getLowerLeftLatitude() { - return envelope.lowerLeft().latitude(); - } - - public double getLowerLeftLongitude() { - return envelope.lowerLeft().longitude(); - } - - public double getUpperRightLatitude() { - return envelope.upperRight().latitude(); - } - - public double getUpperRightLongitude() { - return envelope.upperRight().longitude(); - } - - public double getCenterLatitude() { - return envelope.center().latitude(); - } - - public double getCenterLongitude() { - return envelope.center().longitude(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java deleted file mode 100644 index dd7ef3544af..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.ArrayList; -import java.util.List; - -public class ApiRouterList { - - public List routerInfo = new ArrayList<>(); -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java deleted file mode 100644 index abe4adb623a..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java +++ /dev/null @@ -1,53 +0,0 @@ -/* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.util.Objects; - -public class ApiStop implements Serializable { - - public String id; - public String name; - public Double lat; - public Double lon; - public String code; - public String desc; - public String zoneId; - public String url; - public Integer locationType; - - /** The fully qualified parent station id including the feedId. */ - public String stationId; - - /** @deprecated Use "stationId" instead */ - @Deprecated - public String parentStation; - - public Integer wheelchairBoarding; - public String direction; - private String timezone; - private Integer vehicleType; - private String platformCode; - - @Override - public int hashCode() { - return Objects.hash(id); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiStop apiStop = (ApiStop) o; - return id.equals(apiStop.id); - } - - @Override - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java deleted file mode 100644 index 1eafd760248..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonInclude.Include; - -public class ApiStopShort { - - public String id; - public String code; - public String name; - public double lat; - public double lon; - public String url; - - /** - * The fully qualified parent station id including the feedId. - */ - public String stationId; - - /** @deprecated Use "stationId" instead */ - @Deprecated - public String cluster; - - /** Distance to the stop when it is returned from a location-based query. */ - @JsonInclude(Include.NON_NULL) - public Integer dist; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java deleted file mode 100644 index 405c200651b..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.List; - -public class ApiStopTimesInPattern { - - public ApiPatternShort pattern; - public List times; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java deleted file mode 100644 index dc7eb51177e..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import org.opentripplanner.routing.alertpatch.TransitAlert; -import org.opentripplanner.transit.model.basic.Notice; - -/** - * A system notice is used to tag elements with system information. - *

- * One use-case is to run a routing search in debug-filter-mode and instead of removing itineraries - * from the result, the itineraries could be tagged instead. These notices are meant for system - * testers and developers and should not be used for end user notification or alerts. - * - * @see TransitAlert for end user alerts - * @see Notice for end user notices - */ -public class ApiSystemNotice { - - /** - * An id or code identifying the notice. Use a descriptive tag like: 'transit-walking-filter'. - */ - public final String tag; - - /** - * An english text explaining why the element is tagged, and/or what the tag means. - */ - public final String text; - - public ApiSystemNotice(String tag, String text) { - this.tag = tag; - this.text = text; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java deleted file mode 100644 index 38cede8c1f1..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -/** Represents a transfer from a stop */ -public class ApiTransfer { - - /** The stop we are connecting to */ - public String toStopId; - - /** the on-street distance of the transfer (meters) */ - public double distance; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java deleted file mode 100644 index d09de672d91..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.HashSet; -import java.util.Objects; - -/** - * This class is used to send to client which Travel Options are possible on this server - *

- * This options are used in client "Travel by" drop down. - *

- * Each travel option consist of two variables: - value is a value which is sent to the server if - * this is chosen ("TRANSIT, WALK", "CAR", etc.) - name is a name with which client can nicely name - * this option even if specific value changes ("TRANSIT", "PARKRIDE", "TRANSIT_BICYCLE", etc.) - *

- * Travel options are created from {@link org.opentripplanner.routing.graph.Graph} transitModes - * variable and based if park & ride, bike & ride, bike sharing is supported. List itself is - * created in {@link ApiTravelOptionsMaker#makeOptions(HashSet, boolean, boolean, boolean)} - * - * @see ApiTravelOptionsMaker#makeOptions(HashSet, boolean, boolean, boolean) * Created by mabu on - * 28.7.2015. - */ -public class ApiTravelOption { - - public String value; - public String name; - - public ApiTravelOption(String value, String name) { - this.value = value; - this.name = name; - } - - /** - * Creates TravelOption where value and name are same - */ - public ApiTravelOption(String value) { - this.value = value; - this.name = value; - } - - @Override - public int hashCode() { - return Objects.hash(value, name); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiTravelOption that = (ApiTravelOption) o; - return Objects.equals(value, that.value) && Objects.equals(name, that.name); - } - - @Override - public String toString() { - return "TravelOption{" + "value='" + value + '\'' + ", name='" + name + '\'' + '}'; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java deleted file mode 100644 index 65fec7867cb..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import org.opentripplanner.api.parameter.ApiRequestMode; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.service.vehicleparking.VehicleParkingService; -import org.opentripplanner.service.vehiclerental.VehicleRentalService; -import org.opentripplanner.transit.model.basic.TransitMode; -import org.opentripplanner.transit.service.TransitService; - -/** - * Class which creates "Travel by" options list from supported transit modes and which extra modes - * are supported (bike sharing, bike & ride, park & ride) - *

- * This list is then returned to the client which shows it in UI. Created by mabu on 28.7.2015. - */ -public final class ApiTravelOptionsMaker { - - private static final List staticTravelOptions; - - static { - staticTravelOptions = new ArrayList<>(3); - staticTravelOptions.add(new ApiTravelOption(ApiRequestMode.WALK.toString())); - staticTravelOptions.add(new ApiTravelOption(ApiRequestMode.BICYCLE.toString())); - staticTravelOptions.add(new ApiTravelOption(ApiRequestMode.CAR.toString())); - } - - public static List makeOptions( - Graph graph, - VehicleRentalService vehicleRentalService, - VehicleParkingService vehicleParkingService, - TransitService transitService - ) { - return makeOptions( - transitService.listTransitModes(), - vehicleRentalService.hasRentalBikes(), - vehicleParkingService.hasBikeParking(), - vehicleParkingService.hasCarParking() - ); - } - - public static List makeOptions( - Set transitModes, - boolean hasBikeSharing, - boolean hasBikeRide, - boolean hasParkRide - ) { - List travelOptions = new ArrayList<>(16); - - //Adds Transit, and all the transit modes - if (!transitModes.isEmpty()) { - travelOptions.add( - new ApiTravelOption( - String.join(",", ApiRequestMode.TRANSIT.toString(), ApiRequestMode.WALK.toString()), - ApiRequestMode.TRANSIT.toString() - ) - ); - - for (TransitMode transitMode : transitModes) { - travelOptions.add( - new ApiTravelOption( - String.join(",", transitMode.toString(), ApiRequestMode.WALK.toString()), - transitMode.toString() - ) - ); - } - } - - travelOptions.addAll(staticTravelOptions); - - if (hasBikeSharing) { - travelOptions.add( - new ApiTravelOption( - String.join(",", ApiRequestMode.WALK.toString(), "BICYCLE_RENT"), - "BICYCLERENT" - ) - ); - } - - //If transit modes exists. - if (!transitModes.isEmpty()) { - //Adds bicycle transit mode - travelOptions.add( - new ApiTravelOption( - String.join(",", ApiRequestMode.TRANSIT.toString(), ApiRequestMode.BICYCLE.toString()), - String.join("_", ApiRequestMode.TRANSIT.toString(), ApiRequestMode.BICYCLE.toString()) - ) - ); - if (hasBikeSharing) { - travelOptions.add( - new ApiTravelOption( - String.join( - ",", - ApiRequestMode.TRANSIT.toString(), - ApiRequestMode.WALK.toString(), - "BICYCLE_RENT" - ), - "TRANSIT_BICYCLERENT" - ) - ); - } - if (hasParkRide) { - travelOptions.add( - new ApiTravelOption( - String.join( - ",", - "CAR_PARK", - ApiRequestMode.WALK.toString(), - ApiRequestMode.TRANSIT.toString() - ), - "PARKRIDE" - ) - ); - } - if (hasBikeRide) { - travelOptions.add( - new ApiTravelOption( - String.join( - ",", - "BICYCLE_PARK", - ApiRequestMode.WALK.toString(), - ApiRequestMode.TRANSIT.toString() - ), - "BIKERIDE" - ) - ); - } - travelOptions.add( - new ApiTravelOption( - String.join( - ",", - ApiRequestMode.CAR.toString(), - ApiRequestMode.WALK.toString(), - ApiRequestMode.TRANSIT.toString() - ), - "KISSRIDE" - ) - ); - } - - return travelOptions; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java deleted file mode 100644 index 3ff0626c9a8..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; -import java.util.Objects; - -public class ApiTrip implements Serializable { - - public String id; - public String routeId; - public String serviceId; - public String tripShortName; - public String tripHeadsign; - public String routeShortName; - public String directionId; - public String blockId; - public String shapeId; - - /** - * 0: No accessibility information for the trip. 1: Vehicle being used on this particular trip can - * accommodate at least one rider in a wheelchair. 2: No riders in wheelchairs can be accommodated - * on this trip. - */ - public int wheelchairAccessible = 0; - /** - * 0 = unknown / unspecified, 1 = bikes allowed, 2 = bikes NOT allowed - */ - public int bikesAllowed = 0; - - /** Custom extension for KCM to specify a fare per-trip */ - public String fareId; - - @Override - public int hashCode() { - return Objects.hash(id); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - ApiTrip apiTrip = (ApiTrip) o; - return id.equals(apiTrip.id); - } - - @Override - public String toString() { - return ""; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java deleted file mode 100644 index bfb812b69c3..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -/** - * A TripPlan is a set of ways to get from point A to point B at time T. - */ -public class ApiTripPlan { - - /** The time and date of travel */ - public Date date; - - /** The origin */ - public ApiPlace from; - - /** The destination */ - public ApiPlace to; - - /** List of itineraries. */ - public List itineraries = new ArrayList<>(); -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java deleted file mode 100644 index abe5a74337f..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -/** - * Meta-data about the trip search performed. - */ -public class ApiTripSearchMetadata { - - /** - * This is the time window used by the raptor search. The window is an optional parameter and OTP - * might override it/dynamically assign a new value. - *

- * If the {@code numOfItineraries} request parameter is set, optimal itineraries are removed from - * the end of the result. Be aware of this when adding the results of more than on search - * together. If the client support paging/scrolling, do not use the {@code numOfItineraries} - * parameter, cache or hide the last part of the returned list of itineraries instead. - *

- * Unit : seconds - */ - public int searchWindowUsed; - - /** - * This is the suggested search time for the "next page" or time-window. Insert it together with - * the {@link #searchWindowUsed} in the request to get a new set of trips following in the - * time-window AFTER the current search. No duplicate trips should be returned, unless a trip is - * delayed and new real-time-data is available. - *

- * Be careful to use paging/scrolling with the {@code numOfItineraries} parameter set. It is safe - * to scroll forward when the {@code arriveBy=false}, but not if {@code arriveBy=true}. If you - * need to find the trips that arrive immediately AFTER the latest-arrival-time, be sure NOT to - * set the {@code numOfItineraries} request parameter in the next request. - *

- * If OTP for some reason is not able to calculate this value then it will be {@code null}. - *

- * Unit : epoch milliseconds - * - * @deprecated Use the request/response cursor instead. - */ - @Deprecated - public Long nextDateTime; - - /** - * This is the suggested search time for the "previous page" or time window. Insert it together - * with the {@link #searchWindowUsed} in the request to get a new set of trips preceding in the - * time-window BEFORE the current search. No duplicate trips should be returned, unless a trip is - * delayed and new real-time-data is available. - *

- * Be careful to use paging/scrolling with the {@code numOfItineraries} parameter set. It is safe - * to scroll backward when the {@code arriveBy=true}, but not if {@code arriveBy=false}. If you - * need to find the trips that depart immediately BEFORE the earliest-departure-time, be sure NOT - * to set the {@code numOfItineraries} request parameter in the next request. - *

- * If OTP for some reason is not able to calculate this value then it will be {@code null}. - *

- * Unit : epoch milliseconds - * - * @deprecated Use the request/response cursor instead. - */ - @Deprecated - public Long prevDateTime; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java deleted file mode 100644 index cedfa471d4a..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -public class ApiTripShort { - - public String id; - public String tripHeadsign; - public String serviceId; - public String shapeId; - public Integer direction; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java deleted file mode 100644 index bab8e9a6977..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.io.Serializable; - -public class ApiTripTimeShort implements Serializable { - - private static final int UNDEFINED = -1; - - public String stopId; - public int stopIndex; - public int stopCount; - public int scheduledArrival = UNDEFINED; - public int scheduledDeparture = UNDEFINED; - public int realtimeArrival = UNDEFINED; - public int realtimeDeparture = UNDEFINED; - public int arrivalDelay = UNDEFINED; - public int departureDelay = UNDEFINED; - public boolean timepoint = false; - public boolean realtime = false; - public ApiRealTimeState realtimeState = ApiRealTimeState.SCHEDULED; - public long serviceDay; - public String tripId; - public String blockId; - public String headsign; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java deleted file mode 100644 index 8431ac5c387..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.List; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; - -public class ApiVehicleRentalStation { - - public String id; - public String name; - public double x, y; //longitude, latitude - public int bikesAvailable = Integer.MAX_VALUE; - public int spacesAvailable = Integer.MAX_VALUE; - public boolean allowDropoff = true; - public boolean isFloatingBike = false; - public boolean isCarStation = false; - - /** - * List of compatible network names. Null (default) to be compatible with all. - */ - public List networks = null; - - /** - * Whether this station has real-time data available currently. If no real-time data, users should - * take bikesAvailable/spacesAvailable with a pinch of salt, as they are always the total capacity - * divided by two. - */ - public boolean realTimeData = true; - - public VehicleRentalStationUris rentalUris; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java deleted file mode 100644 index c97a18c337e..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.ArrayList; -import java.util.List; - -public class ApiVehicleRentalStationList { - - public List stations = new ArrayList<>(); -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java index 363a01cb7b5..526c8a65941 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java @@ -85,8 +85,6 @@ public class ApiWalkStep { */ public Boolean walkingBike; - public List alerts; - public String toString() { String direction = absoluteDirection.toString(); if (relativeDirection != null) { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java deleted file mode 100644 index b885883b17e..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -/** - * Contains elevation-specific metadata to be included in the response - *

- * Created by demory on 2/16/17. - */ - -public class ElevationMetadata { - - public Double ellipsoidToGeoidDifference; - - public Boolean geoidElevation; -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java deleted file mode 100644 index 28cce2dd669..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import jakarta.ws.rs.core.UriInfo; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import org.opentripplanner.api.error.PlannerError; -import org.opentripplanner.api.resource.DebugOutput; - -/** Represents a trip planner response, will be serialized into XML or JSON by Jersey */ -public class TripPlannerResponse { - - /** A dictionary of the parameters provided in the request that triggered this response. */ - public HashMap requestParameters; - private ApiTripPlan plan; - private ApiTripSearchMetadata metadata; - private String previousPageCursor; - private String nextPageCursor; - - private PlannerError error = null; - - /** Debugging and profiling information */ - public DebugOutput debugOutput = null; - - public ElevationMetadata elevationMetadata = null; - - /** This no-arg constructor exists to make JAX-RS happy. */ - @SuppressWarnings("unused") - private TripPlannerResponse() {} - - /** Construct an new response initialized with all the incoming query parameters. */ - public TripPlannerResponse(UriInfo info) { - this.requestParameters = new HashMap<>(); - if (info == null) { - // in tests where there is no HTTP request, just leave the map empty - return; - } - for (Entry> e : info.getQueryParameters().entrySet()) { - // include only the first instance of each query parameter - requestParameters.put(e.getKey(), e.getValue().get(0)); - } - } - - // NOTE: the order the getter methods below is semi-important, in that Jersey will use the - // same order for the elements in the JS or XML serialized response. The traditional order - // is request params, followed by plan, followed by errors. - - /** The actual trip plan. */ - public ApiTripPlan getPlan() { - return plan; - } - - public void setPlan(ApiTripPlan plan) { - this.plan = plan; - } - - /** - * Use the cursor to get the previous page of results. Insert the cursor into the request and post - * it to get the previous page. - *

- * The previous page is a set of itineraries departing BEFORE the first itinerary in the result - * for a depart after search. When using the default sort order the previous set of itineraries is - * inserted before the current result. - *

- * Note! The behavior is undefined if timetableView is off. This is possible to support, but - * require more information to be included in the cursor. - */ - public String getPreviousPageCursor() { - return previousPageCursor; - } - - public void setPreviousPageCursor(String pageCursor) { - this.previousPageCursor = pageCursor; - } - - /** - * Use the cursor to get the next page of results. Insert the cursor into the request and post it - * to get the next page. - *

- * The next page is a set of itineraries departing AFTER the last itinerary in this result. - *

- * Note! The behavior is undefined if timetableView is off. This is possible to support, but - * require more information to be included in the cursor. - */ - public String getNextPageCursor() { - return nextPageCursor; - } - - public void setNextPageCursor(String pageCursor) { - this.nextPageCursor = pageCursor; - } - - /** The error (if any) that this response raised. */ - public PlannerError getError() { - return error; - } - - public void setError(PlannerError error) { - this.error = error; - } - - public ApiTripSearchMetadata getMetadata() { - return metadata; - } - - public void setMetadata(ApiTripSearchMetadata metadata) { - this.metadata = metadata; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java deleted file mode 100644 index 0da598f8a3f..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java +++ /dev/null @@ -1,84 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.ext.restapi.mapping.VehicleRentalStationMapper; -import org.opentripplanner.ext.restapi.model.ApiVehicleRentalStation; -import org.opentripplanner.ext.restapi.model.ApiVehicleRentalStationList; -import org.opentripplanner.service.vehiclerental.VehicleRentalService; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; -import org.opentripplanner.standalone.api.OtpServerRequestContext; - -@Path("/routers/{ignoreRouterId}/bike_rental") -public class BikeRental { - - private final OtpServerRequestContext serverContext; - - public BikeRental( - /** - * @deprecated The support for multiple routers are removed from OTP2. - * See https://github.com/opentripplanner/OpenTripPlanner/issues/2760 - */ - @Deprecated @PathParam("ignoreRouterId") String ignoreRouterId, - @Context OtpServerRequestContext serverContext - ) { - this.serverContext = serverContext; - } - - /** Envelopes are in latitude, longitude format */ - public static Envelope getEnvelope(String lowerLeft, String upperRight) { - String[] lowerLeftParts = lowerLeft.split(","); - String[] upperRightParts = upperRight.split(","); - - return new Envelope( - Double.parseDouble(lowerLeftParts[1]), - Double.parseDouble(upperRightParts[1]), - Double.parseDouble(lowerLeftParts[0]), - Double.parseDouble(upperRightParts[0]) - ); - } - - @GET - @Produces(MediaType.APPLICATION_JSON) - public ApiVehicleRentalStationList getBikeRentalStations( - @QueryParam("lowerLeft") String lowerLeft, - @QueryParam("upperRight") String upperRight, - @QueryParam("locale") String locale_param - ) { - OtpServerRequestContext serverContext = this.serverContext; - - VehicleRentalService vehicleRentalService = serverContext.vehicleRentalService(); - Locale locale = locale_param != null && !locale_param.isBlank() - ? Locale.forLanguageTag(locale_param.replaceAll("-", "_")) - : Locale.ENGLISH; - if (vehicleRentalService == null) { - return new ApiVehicleRentalStationList(); - } - Envelope envelope; - if (lowerLeft != null) { - envelope = getEnvelope(lowerLeft, upperRight); - } else { - envelope = new Envelope(-180, 180, -90, 90); - } - Collection stations = vehicleRentalService.getVehicleRentalPlaces(); - List out = new ArrayList<>(); - for (VehicleRentalPlace station : stations) { - if (envelope.contains(station.getLongitude(), station.getLatitude())) { - out.add(VehicleRentalStationMapper.mapToApi(station, locale)); - } - } - ApiVehicleRentalStationList brsl = new ApiVehicleRentalStationList(); - brsl.stations = out; - return brsl; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java deleted file mode 100644 index 0fa86069453..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java +++ /dev/null @@ -1,628 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.ws.rs.BadRequestException; -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.NotFoundException; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.Response.Status; -import jakarta.ws.rs.core.UriInfo; -import java.text.ParseException; -import java.time.Duration; -import java.time.Instant; -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; -import org.locationtech.jts.geom.Coordinate; -import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.apis.support.SemanticHash; -import org.opentripplanner.ext.restapi.mapping.AgencyMapper; -import org.opentripplanner.ext.restapi.mapping.AlertMapper; -import org.opentripplanner.ext.restapi.mapping.FeedInfoMapper; -import org.opentripplanner.ext.restapi.mapping.FeedScopedIdMapper; -import org.opentripplanner.ext.restapi.mapping.RouteMapper; -import org.opentripplanner.ext.restapi.mapping.StopMapper; -import org.opentripplanner.ext.restapi.mapping.StopTimesInPatternMapper; -import org.opentripplanner.ext.restapi.mapping.TransferMapper; -import org.opentripplanner.ext.restapi.mapping.TripMapper; -import org.opentripplanner.ext.restapi.mapping.TripPatternMapper; -import org.opentripplanner.ext.restapi.mapping.TripTimeMapper; -import org.opentripplanner.ext.restapi.model.ApiAgency; -import org.opentripplanner.ext.restapi.model.ApiAlert; -import org.opentripplanner.ext.restapi.model.ApiFeedInfo; -import org.opentripplanner.ext.restapi.model.ApiPatternShort; -import org.opentripplanner.ext.restapi.model.ApiRoute; -import org.opentripplanner.ext.restapi.model.ApiRouteShort; -import org.opentripplanner.ext.restapi.model.ApiStop; -import org.opentripplanner.ext.restapi.model.ApiStopShort; -import org.opentripplanner.ext.restapi.model.ApiStopTimesInPattern; -import org.opentripplanner.ext.restapi.model.ApiTransfer; -import org.opentripplanner.ext.restapi.model.ApiTrip; -import org.opentripplanner.ext.restapi.model.ApiTripShort; -import org.opentripplanner.ext.restapi.model.ApiTripTimeShort; -import org.opentripplanner.framework.geometry.EncodedPolyline; -import org.opentripplanner.model.StopTimesInPattern; -import org.opentripplanner.model.TripTimeOnDate; -import org.opentripplanner.routing.graphfinder.DirectGraphFinder; -import org.opentripplanner.standalone.api.OtpServerRequestContext; -import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.model.network.Route; -import org.opentripplanner.transit.model.network.TripPattern; -import org.opentripplanner.transit.model.organization.Agency; -import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.model.timetable.Trip; -import org.opentripplanner.transit.service.ArrivalDeparture; -import org.opentripplanner.transit.service.TransitService; -import org.opentripplanner.utils.time.ServiceDateUtils; - -// TODO move to org.opentripplanner.api.resource, this is a Jersey resource class - -@Path("/routers/{ignoreRouterId}/index") // It would be nice to get rid of the final /index. -@Produces(MediaType.APPLICATION_JSON) // One @Produces annotation for all endpoints. -public class IndexAPI { - - private static final double MAX_STOP_SEARCH_RADIUS = 5000; - - private final OtpServerRequestContext serverContext; - - /* Needed to check whether query parameter map is empty, rather than chaining " && x == null"s */ - @Context - UriInfo uriInfo; - - public IndexAPI( - @Context OtpServerRequestContext serverContext, - /** - * @deprecated The support for multiple routers are removed from OTP2. - * See https://github.com/opentripplanner/OpenTripPlanner/issues/2760 - */ - @PathParam("ignoreRouterId") String ignoreRouterId - ) { - this.serverContext = serverContext; - } - - @GET - @Path("/feeds") - public Collection getFeeds() { - return transitService().listFeedIds(); - } - - @GET - @Path("/feeds/{feedId}") - public ApiFeedInfo getFeedInfo(@PathParam("feedId") String feedId) { - var feedInfo = FeedInfoMapper.mapToApi(transitService().getFeedInfo(feedId)); - return validateExist("FeedInfo", feedInfo, "feedId", feedId); - } - - /** Return a list of all agencies in the graph. */ - @GET - @Path("/agencies/{feedId}") - public Collection getAgencies(@PathParam("feedId") String feedId) { - Collection agencies = transitService() - .listAgencies() - .stream() - .filter(agency -> agency.getId().getFeedId().equals(feedId)) - .collect(Collectors.toList()); - validateExist("Agency", agencies, "feedId", feedId); - return AgencyMapper.mapToApi(agencies); - } - - /** Return specific agency in the graph, by ID. */ - @GET - @Path("/agencies/{feedId}/{agencyId}") - public ApiAgency httpGgetAgency( - @PathParam("feedId") String feedId, - @PathParam("agencyId") String agencyId - ) { - return AgencyMapper.mapToApi(agency(feedId, agencyId)); - } - - /** Return all routes for the specific agency. */ - @GET - @Path("/agencies/{feedId}/{agencyId}/routes") - public Response getAgencyRoutes( - @PathParam("feedId") String feedId, - @PathParam("agencyId") String agencyId, - /** Choose short or long form of results. */ - @QueryParam("detail") @DefaultValue("false") Boolean detail - ) { - var agency = agency(feedId, agencyId); - - Collection routes = transitService() - .listRoutes() - .stream() - .filter(r -> r.getAgency() == agency) - .collect(Collectors.toList()); - - if (detail) { - return Response.status(Status.OK).entity(RouteMapper.mapToApi(routes)).build(); - } else { - return Response.status(Status.OK).entity(RouteMapper.mapToApiShort(routes)).build(); - } - } - - /** - * Return all alerts for an agency - */ - @GET - @Path("/agencies/{feedId}/{agencyId}/alerts") - public Collection getAlertsForTrip( - @PathParam("feedId") String feedId, - @PathParam("agencyId") String agencyId - ) { - var alertMapper = new AlertMapper(null); // TODO: Add locale - var id = new FeedScopedId(feedId, agencyId); - return alertMapper.mapToApi(transitService().getTransitAlertService().getAgencyAlerts(id)); - } - - /** Return specific transit stop in the graph, by ID. */ - @GET - @Path("/stops/{stopId}") - public ApiStop getStop(@PathParam("stopId") String stopIdString) { - return StopMapper.mapToApi(stop(stopIdString)); - } - - /** Return a list of all stops within a circle around the given coordinate. */ - @SuppressWarnings("ConstantConditions") - @GET - @Path("/stops") - public List getStopsInRadius( - @QueryParam("minLat") Double minLat, - @QueryParam("minLon") Double minLon, - @QueryParam("maxLat") Double maxLat, - @QueryParam("maxLon") Double maxLon, - @QueryParam("lat") Double lat, - @QueryParam("lon") Double lon, - @QueryParam("radius") Double radius - ) { - /* When no parameters are supplied, return all stops. */ - if (uriInfo.getQueryParameters().isEmpty()) { - return StopMapper.mapToApiShort(transitService().listStopLocations()); - } - - /* If any of the circle parameters are specified, expect a circle not a box. */ - boolean expectCircle = (lat != null || lon != null || radius != null); - if (expectCircle) { - verifyParams() - .withinBounds("lat", lat, -90.0, 90.0) - .withinBounds("lon", lon, -180, 180) - .positiveOrZero("radius", radius) - .validate(); - - radius = Math.min(radius, MAX_STOP_SEARCH_RADIUS); - - return new DirectGraphFinder(serverContext.transitService()::findRegularStopsByBoundingBox) - .findClosestStops(new Coordinate(lon, lat), radius) - .stream() - .map(it -> StopMapper.mapToApiShort(it.stop, it.distance)) - .collect(Collectors.toList()); - } else { - /* We're not circle mode, we must be in box mode. */ - verifyParams() - .withinBounds("minLat", minLat, -90.0, 90.0) - .withinBounds("maxLat", maxLat, -90.0, 90.0) - .withinBounds("minLon", minLon, -180.0, 180.0) - .withinBounds("maxLon", maxLon, -180.0, 180.0) - .lessThan("minLat", minLat, "maxLat", maxLat) - .lessThan("minLon", minLon, "maxLon", maxLon) - .validate(); - - Envelope envelope = new Envelope( - new Coordinate(minLon, minLat), - new Coordinate(maxLon, maxLat) - ); - - var stops = transitService().findRegularStopsByBoundingBox(envelope); - return stops.stream().map(StopMapper::mapToApiShort).toList(); - } - } - - @GET - @Path("/stops/{stopId}/routes") - public List getRoutesForStop(@PathParam("stopId") String stopId) { - var stop = stop(stopId); - return transitService() - .findPatterns(stop) - .stream() - .map(TripPattern::getRoute) - .map(RouteMapper::mapToApiShort) - .collect(Collectors.toList()); - } - - @GET - @Path("/stops/{stopId}/patterns") - public List getPatternsForStop(@PathParam("stopId") String stopId) { - var stop = stop(stopId); - return transitService() - .findPatterns(stop) - .stream() - .map(TripPatternMapper::mapToApiShort) - .collect(Collectors.toList()); - } - - /** - * Return upcoming vehicle arrival/departure times at the given stop. - * - * @param stopIdString Stop ID in Agency:Stop ID format - * @param startTimeSeconds Start time for the search. Seconds from UNIX epoch - * @param timeRange Searches forward for timeRange seconds from startTime - * @param numberOfDepartures Number of departures to fetch per pattern - */ - @GET - @Path("/stops/{stopId}/stoptimes") - public Collection getStopTimesForStop( - @PathParam("stopId") String stopIdString, - @QueryParam("startTime") long startTimeSeconds, - @QueryParam("timeRange") @DefaultValue("86400") int timeRange, - @QueryParam("numberOfDepartures") @DefaultValue("2") int numberOfDepartures, - @QueryParam("omitNonPickups") boolean omitNonPickups - ) { - Instant startTime = startTimeSeconds == 0 - ? Instant.now() - : Instant.ofEpochSecond(startTimeSeconds); - - return transitService() - .findStopTimesInPattern( - stop(stopIdString), - startTime, - Duration.ofSeconds(timeRange), - numberOfDepartures, - omitNonPickups ? ArrivalDeparture.DEPARTURES : ArrivalDeparture.BOTH, - false - ) - .stream() - .map(StopTimesInPatternMapper::mapToApi) - .collect(Collectors.toList()); - } - - /** - * Return upcoming vehicle arrival/departure times at the given stop. - * - * @param date in YYYYMMDD or YYYY-MM-DD format - */ - @GET - @Path("/stops/{stopId}/stoptimes/{date}") - public List getStoptimesForStopAndDate( - @PathParam("stopId") String stopId, - @PathParam("date") String date, - @QueryParam("omitNonPickups") boolean omitNonPickups - ) { - var stop = stop(stopId); - var serviceDate = parseServiceDate("date", date); - List stopTimes = transitService() - .findStopTimesInPattern( - stop, - serviceDate, - omitNonPickups ? ArrivalDeparture.DEPARTURES : ArrivalDeparture.BOTH, - true - ); - return StopTimesInPatternMapper.mapToApi(stopTimes); - } - - /** - * Return the generated transfers a stop in the graph, by stop ID - */ - @GET - @Path("/stops/{stopId}/transfers") - public Collection getTransfers(@PathParam("stopId") String stopId) { - var stop = stop(stopId); - - // get the transfers for the stop - return transitService() - .findPathTransfers(stop) - .stream() - .map(TransferMapper::mapToApi) - .collect(Collectors.toList()); - } - - /** - * Return all alerts for a stop - */ - @GET - @Path("/stops/{stopId}/alerts") - public Collection getAlertsForStop(@PathParam("stopId") String stopId) { - var alertMapper = new AlertMapper(null); // TODO: Add locale - var id = createId("stopId", stopId); - return alertMapper.mapToApi(transitService().getTransitAlertService().getStopAlerts(id)); - } - - /** Return a list of all routes in the graph. */ - // with repeated hasStop parameters, replaces old routesBetweenStops - @GET - @Path("/routes") - public List getRoutes(@QueryParam("hasStop") List stopIds) { - Collection routes = transitService().listRoutes(); - // Filter routes to include only those that pass through all given stops - if (stopIds != null) { - // Protective copy, we are going to calculate the intersection destructively - routes = new ArrayList<>(routes); - for (String stopId : stopIds) { - var stop = stop(stopId); - Set routesHere = new HashSet<>(); - for (TripPattern pattern : transitService().findPatterns(stop)) { - routesHere.add(pattern.getRoute()); - } - routes.retainAll(routesHere); - } - } - return RouteMapper.mapToApiShort(routes); - } - - /** Return specific route in the graph, for the given ID. */ - @GET - @Path("/routes/{routeId}") - public ApiRoute getRoute(@PathParam("routeId") String routeId) { - return RouteMapper.mapToApi(route(routeId)); - } - - /** Return all stop patterns used by trips on the given route. */ - @GET - @Path("/routes/{routeId}/patterns") - public List getPatternsForRoute(@PathParam("routeId") String routeId) { - Collection patterns = transitService().findPatterns(route(routeId)); - return TripPatternMapper.mapToApiShort(patterns); - } - - /** Return all stops in any pattern on a given route. */ - @GET - @Path("/routes/{routeId}/stops") - public List getStopsForRoute(@PathParam("routeId") String routeId) { - var route = route(routeId); - - Set stops = new HashSet<>(); - Collection patterns = transitService().findPatterns(route); - for (TripPattern pattern : patterns) { - stops.addAll(pattern.getStops()); - } - return StopMapper.mapToApiShort(stops); - } - - /** Return all trips in any pattern on the given route. */ - @GET - @Path("/routes/{routeId}/trips") - public List getTripsForRoute(@PathParam("routeId") String routeId) { - var route = route(routeId); - - var patterns = transitService().findPatterns(route); - return patterns - .stream() - .flatMap(TripPattern::scheduledTripsAsStream) - .map(TripMapper::mapToApiShort) - .collect(Collectors.toList()); - } - - /** - * Return all alerts for a route - */ - @GET - @Path("/routes/{routeId}/alerts") - public Collection getAlertsForRoute(@PathParam("routeId") String routeId) { - var alertMapper = new AlertMapper(null); // TODO: Add locale - var id = createId("routeId", routeId); - return alertMapper.mapToApi(transitService().getTransitAlertService().getRouteAlerts(id)); - } - - // Not implemented, results would be too voluminous. - // @Path("/trips") - - @GET - @Path("/trips/{tripId}") - public ApiTrip getTrip(@PathParam("tripId") String tripId) { - return TripMapper.mapToApi(trip(tripId)); - } - - @GET - @Path("/trips/{tripId}/stops") - public List getStopsForTrip(@PathParam("tripId") String tripId) { - Collection stops = tripPatternForTripId(tripId).getStops(); - return StopMapper.mapToApiShort(stops); - } - - @GET - @Path("/trips/{tripId}/semanticHash") - public String getSemanticHashForTrip(@PathParam("tripId") String tripId) { - var trip = trip(tripId); - return SemanticHash.forTripPattern(tripPattern(trip), trip); - } - - @GET - @Path("/trips/{tripId}/stoptimes") - public List getStoptimesForTrip(@PathParam("tripId") String tripId) { - var trip = trip(tripId); - var pattern = tripPattern(trip); - // Note, we need the updated timetable not the scheduled one (which contains no real-time updates). - var table = transitService() - .findTimetable(pattern, LocalDate.now(transitService().getTimeZone())); - var tripTimesOnDate = TripTimeOnDate.fromTripTimes(table, trip); - return TripTimeMapper.mapToApi(tripTimesOnDate); - } - - /** Return geometry for the trip as a packed coordinate sequence */ - @GET - @Path("/trips/{tripId}/geometry") - public EncodedPolyline getGeometryForTrip(@PathParam("tripId") String tripId) { - var pattern = tripPatternForTripId(tripId); - return EncodedPolyline.encode(pattern.getGeometry()); - } - - /** - * Return all alerts for a trip - */ - @GET - @Path("/trips/{tripId}/alerts") - public Collection getAlertsForTrip(@PathParam("tripId") String tripId) { - var alertMapper = new AlertMapper(null); // TODO: Add locale - var id = createId("tripId", tripId); - return alertMapper.mapToApi(transitService().getTransitAlertService().getTripAlerts(id)); - } - - @GET - @Path("/patterns") - public List getPatterns() { - Collection patterns = transitService().listTripPatterns(); - return TripPatternMapper.mapToApiShort(patterns); - } - - @GET - @Path("/patterns/{patternId}") - public ApiPatternShort getPattern(@PathParam("patternId") String patternId) { - var pattern = tripPattern(patternId); - return TripPatternMapper.mapToApiDetailed(pattern); - } - - @GET - @Path("/patterns/{patternId}/trips") - public List getTripsForPattern(@PathParam("patternId") String patternId) { - var trips = tripPattern(patternId).scheduledTripsAsStream(); - return TripMapper.mapToApiShort(trips); - } - - @GET - @Path("/patterns/{patternId}/stops") - public List getStopsForPattern(@PathParam("patternId") String patternId) { - var stops = tripPattern(patternId).getStops(); - return StopMapper.mapToApiShort(stops); - } - - @GET - @Path("/patterns/{patternId}/semanticHash") - public String getSemanticHashForPattern(@PathParam("patternId") String patternId) { - var tripPattern = tripPattern(patternId); - return SemanticHash.forTripPattern(tripPattern, null); - } - - /** Return geometry for the pattern as a packed coordinate sequence */ - @GET - @Path("/patterns/{patternId}/geometry") - public EncodedPolyline getGeometryForPattern(@PathParam("patternId") String patternId) { - var line = tripPattern(patternId).getGeometry(); - return EncodedPolyline.encode(line); - } - - /** - * Return all alerts for a pattern - */ - @GET - @Path("/patterns/{patternId}/alerts") - public Collection getAlertsForPattern(@PathParam("patternId") String patternId) { - var alertMapper = new AlertMapper(null); // TODO: Add locale - var pattern = tripPattern(patternId); - return alertMapper.mapToApi( - transitService() - .getTransitAlertService() - .getDirectionAndRouteAlerts(pattern.getDirection(), pattern.getRoute().getId()) - ); - } - - // TODO include pattern ID for each trip in responses - - /** - * List basic information about all service IDs. This is a placeholder endpoint and is not - * implemented yet. - */ - @GET - @Path("/services") - public Response getServices() { - // TODO complete: index.serviceForId.values(); - return Response.status(Status.OK).entity("NONE").build(); - } - - /** - * List details about a specific service ID including which dates it runs on. Replaces the old - * /calendar. This is a placeholder endpoint and is not implemented yet. - */ - @GET - @Path("/services/{serviceId}") - public Response getServices(@PathParam("serviceId") String serviceId) { - // TODO complete: index.serviceForId.get(serviceId); - return Response.status(Status.OK).entity("NONE").build(); - } - - /* PRIVATE METHODS */ - - private static FeedScopedId createId(String name, String value) { - return FeedScopedIdMapper.mapToDomain(name, value); - } - - @SuppressWarnings("SameParameterValue") - private static LocalDate parseServiceDate(String label, String date) { - try { - return ServiceDateUtils.parseString(date); - } catch (ParseException e) { - throw new BadRequestException( - "Unable to parse date, not on format: YYYY-MM-DD. " + label + ": '" + date + "'" - ); - } - } - - private static ValidateParameters verifyParams() { - return new ValidateParameters(); - } - - private static T validateExist(String eName, T entity, String keyLabel, Object key) { - if (entity != null) { - return entity; - } else { - throw notFoundException(eName, keyLabel, key); - } - } - - private static NotFoundException notFoundException(String eName, String keyLbl, Object key) { - return notFoundException(eName, keyLbl + ": " + key); - } - - private static NotFoundException notFoundException(String entity, String details) { - return new NotFoundException(entity + " not found. " + details); - } - - private Agency agency(String feedId, String agencyId) { - var agency = transitService().getAgency(new FeedScopedId(feedId, agencyId)); - if (agency == null) { - throw notFoundException("Agency", "feedId: " + feedId + ", agencyId: " + agencyId); - } - return agency; - } - - private StopLocation stop(String stopId) { - var stop = transitService().getRegularStop(createId("stopId", stopId)); - return validateExist("Stop", stop, "stopId", stop); - } - - private Route route(String routeId) { - var route = transitService().getRoute(createId("routeId", routeId)); - return validateExist("Route", route, "routeId", routeId); - } - - private Trip trip(String tripId) { - var trip = transitService().getTrip(createId("tripId", tripId)); - return validateExist("Trip", trip, "tripId", tripId); - } - - private TripPattern tripPattern(String tripPatternId) { - var id = createId("patternId", tripPatternId); - var pattern = transitService().getTripPattern(id); - return validateExist("TripPattern", pattern, "patternId", tripPatternId); - } - - private TripPattern tripPatternForTripId(String tripId) { - return tripPattern(trip(tripId)); - } - - private TripPattern tripPattern(Trip trip) { - var pattern = transitService().findPattern(trip); - return validateExist("TripPattern", pattern, "trip", trip.getId()); - } - - private TransitService transitService() { - return serverContext.transitService(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java deleted file mode 100644 index 1d5b97087b5..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java +++ /dev/null @@ -1,112 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.UriInfo; -import org.glassfish.grizzly.http.server.Request; -import org.opentripplanner.api.common.Message; -import org.opentripplanner.api.error.PlannerError; -import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; -import org.opentripplanner.apis.transmodel.ResponseTooLargeException; -import org.opentripplanner.ext.restapi.mapping.TripPlanMapper; -import org.opentripplanner.ext.restapi.mapping.TripSearchMetadataMapper; -import org.opentripplanner.ext.restapi.model.ElevationMetadata; -import org.opentripplanner.ext.restapi.model.TripPlannerResponse; -import org.opentripplanner.framework.application.OTPRequestTimeoutException; -import org.opentripplanner.routing.error.RoutingValidationException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * This is the primary entry point for the trip planning web service. All parameters are passed in - * the query string. These parameters are defined as fields in the abstract RoutingResource - * superclass, which also has methods for building routing requests from query parameters. This - * allows multiple web services to have the same set of query parameters. In order for inheritance - * to work, the REST resources are request-scoped (constructed at each request) rather than - * singleton-scoped (a single instance existing for the lifetime of the OTP server). - */ -@Path("routers/{ignoreRouterId}/plan") -// final element needed here rather than on method to distinguish from routers API -public class PlannerResource extends RoutingResource { - - private static final Logger LOG = LoggerFactory.getLogger(PlannerResource.class); - - /** - * @deprecated The support for multiple routers are removed from OTP2. See - * https://github.com/opentripplanner/OpenTripPlanner/issues/2760 - */ - @Deprecated - @PathParam("ignoreRouterId") - private String ignoreRouterId; - - // We inject info about the incoming request so we can include the incoming query - // parameters in the outgoing response. This is a TriMet requirement. - // Jersey uses @Context to inject internal types and @InjectParam or @Resource for DI objects. - @GET - @Produces(MediaType.APPLICATION_JSON) - public Response plan(@Context UriInfo uriInfo, @Context Request grizzlyRequest) { - /* - * TODO: add Lang / Locale parameter, and thus get localized content (Messages & more...) - * TODO: from/to inputs should be converted / geocoded / etc... here, and maybe send coords - * or vertex ids to planner (or error back to user) - * TODO: org.opentripplanner.routing.module.PathServiceImpl has COOORD parsing. Abstract that - * out so it's used here too... - */ - - // Create response object, containing a copy of all request parameters. Maybe they should be in the debug section of the response. - TripPlannerResponse response = new TripPlannerResponse(uriInfo); - try { - /* Fill in request fields from query parameters via shared superclass method, catching any errors. */ - var request = super.buildRequest(uriInfo.getQueryParameters()); - - // Route - var res = serverContext.routingService().route(request); - - // Map to API - // TODO VIA (Leonard) - we should store the default showIntermediateStops somewhere - TripPlanMapper tripPlanMapper = new TripPlanMapper(request.locale(), showIntermediateStops); - response.setPlan(tripPlanMapper.mapTripPlan(res.getTripPlan())); - if (res.getPreviousPageCursor() != null) { - response.setPreviousPageCursor(res.getPreviousPageCursor().encode()); - } - if (res.getNextPageCursor() != null) { - response.setNextPageCursor(res.getNextPageCursor().encode()); - } - response.setMetadata(TripSearchMetadataMapper.mapTripSearchMetadata(res.getMetadata())); - if (!res.getRoutingErrors().isEmpty()) { - // The api can only return one error message, so the first one is mapped - response.setError(PlannerErrorMapper.mapMessage(res.getRoutingErrors().get(0))); - } - - /* Populate up the elevation metadata */ - response.elevationMetadata = new ElevationMetadata(); - response.elevationMetadata.ellipsoidToGeoidDifference = serverContext.graph() - .ellipsoidToGeoidDifference; - response.elevationMetadata.geoidElevation = request.preferences().system().geoidElevation(); - - response.debugOutput = res.getDebugTimingAggregator().finishedRendering(); - } catch (RoutingValidationException e) { - if (e.isFromToLocationNotFound()) { - response.setError(new PlannerError(Message.GEOCODE_FROM_TO_NOT_FOUND)); - } else if (e.isFromLocationNotFound()) { - response.setError(new PlannerError(Message.GEOCODE_FROM_NOT_FOUND)); - } else if (e.isToLocationNotFound()) { - response.setError(new PlannerError(Message.GEOCODE_TO_NOT_FOUND)); - } else { - LOG.error("System error - unhandled error case?", e); - response.setError(new PlannerError(Message.SYSTEM_ERROR)); - } - } catch (OTPRequestTimeoutException | ResponseTooLargeException e) { - response.setError(new PlannerError(Message.UNPROCESSABLE_REQUEST)); - } catch (Exception e) { - LOG.error("System error", e); - response.setError(new PlannerError(Message.SYSTEM_ERROR)); - } - return Response.ok().entity(response).build(); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java deleted file mode 100644 index 9c37c0bdade..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java +++ /dev/null @@ -1,240 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.validation.constraints.NotNull; -import java.util.function.Consumer; -import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; -import org.opentripplanner.routing.algorithm.filterchain.api.TransitGeneralizedCostFilterParams; -import org.opentripplanner.routing.api.request.framework.CostLinearFunction; -import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; -import org.opentripplanner.routing.api.request.preference.Relax; -import org.opentripplanner.routing.api.request.preference.RoutingPreferences; -import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; -import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; -import org.opentripplanner.utils.lang.ObjectUtils; - -class RequestToPreferencesMapper { - - private final RoutingResource req; - private final RoutingPreferences.Builder preferences; - private final boolean isPlannedForNow; - - RequestToPreferencesMapper( - RoutingResource req, - RoutingPreferences.Builder preferences, - boolean isPlannedForNow - ) { - this.req = req; - this.preferences = preferences; - this.isPlannedForNow = isPlannedForNow; - } - - void map() { - mapCar(); - mapWalk(); - mapBike(); - mapScooter(); - - var boardAndAlightSlack = mapTransit(); - - mapTransfer(boardAndAlightSlack); - - mapItineraryFilter(); - mapSystem(); - } - - private void mapCar() { - preferences.withCar(car -> { - setIfNotNull(req.carReluctance, car::withReluctance); - car.withParking(parking -> { - mapParking(parking); - setIfNotNull(req.carParkCost, parking::withCost); - setIfNotNull(req.carParkTime, parking::withTime); - }); - car.withRental(this::mapRental); - }); - } - - private void mapWalk() { - preferences.withWalk(walk -> { - setIfNotNull(req.walkReluctance, walk::withReluctance); - setIfNotNull(req.walkSpeed, walk::withSpeed); - setIfNotNull(req.walkBoardCost, walk::withBoardCost); - setIfNotNull(req.walkSafetyFactor, walk::withSafetyFactor); - }); - } - - private void mapBike() { - preferences.withBike(bike -> { - setIfNotNull(req.bikeSpeed, bike::withSpeed); - setIfNotNull(req.bikeReluctance, bike::withReluctance); - setIfNotNull(req.bikeBoardCost, bike::withBoardCost); - setIfNotNull(req.bikeOptimizeType, optimizeType -> - bike.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) - ); - - if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { - bike.withOptimizeTriangle(triangle -> { - setIfNotNull(req.triangleTimeFactor, triangle::withTime); - setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); - setIfNotNull(req.triangleSafetyFactor, triangle::withSafety); - }); - } - - bike.withParking(parking -> { - mapParking(parking); - setIfNotNull(req.bikeParkCost, parking::withCost); - setIfNotNull(req.bikeParkTime, parking::withTime); - }); - bike.withRental(this::mapRental); - bike.withWalking(walk -> { - setIfNotNull(req.bikeWalkingSpeed, walk::withSpeed); - setIfNotNull(req.bikeWalkingReluctance, walk::withReluctance); - setIfNotNull(req.bikeSwitchTime, walk::withMountDismountTime); - setIfNotNull(req.bikeSwitchCost, walk::withMountDismountCost); - }); - }); - } - - private void mapScooter() { - preferences.withScooter(scooter -> { - setIfNotNull(req.bikeSpeed, scooter::withSpeed); - setIfNotNull(req.bikeReluctance, scooter::withReluctance); - setIfNotNull(req.bikeOptimizeType, optimizeType -> - scooter.withOptimizeType(LegacyVehicleRoutingOptimizeType.map(optimizeType)) - ); - - if (req.bikeOptimizeType == LegacyVehicleRoutingOptimizeType.TRIANGLE) { - scooter.withOptimizeTriangle(triangle -> { - setIfNotNull(req.triangleTimeFactor, triangle::withTime); - setIfNotNull(req.triangleSlopeFactor, triangle::withSlope); - setIfNotNull(req.triangleSafetyFactor, triangle::withSafety); - }); - } - - scooter.withRental(this::mapRental); - }); - } - - private BoardAndAlightSlack mapTransit() { - preferences.withTransit(tr -> { - setIfNotNull(req.boardSlack, tr::withDefaultBoardSlackSec); - setIfNotNull(req.alightSlack, tr::withDefaultAlightSlackSec); - setIfNotNull(req.otherThanPreferredRoutesPenalty, tr::setOtherThanPreferredRoutesPenalty); - setIfNotNull(req.ignoreRealtimeUpdates, tr::setIgnoreRealtimeUpdates); - - if (req.relaxTransitGroupPriority != null) { - tr.withRelaxTransitGroupPriority(CostLinearFunction.of(req.relaxTransitGroupPriority)); - } else { - setIfNotNull(req.relaxTransitSearchGeneralizedCostAtDestination, v -> - tr.withRaptor(r -> r.withRelaxGeneralizedCostAtDestination(v)) - ); - } - }); - - return new BoardAndAlightSlack( - preferences.transit().boardSlack().defaultValueSeconds() + - preferences.transit().alightSlack().defaultValueSeconds() - ); - } - - private void mapTransfer(BoardAndAlightSlack boardAndAlightSlack) { - preferences.withTransfer(transfer -> { - setIfNotNull(req.waitReluctance, transfer::withWaitReluctance); - setIfNotNull(req.transferPenalty, transfer::withCost); - - if (req.minTransferTime != null) { - if (boardAndAlightSlack.value > req.minTransferTime) { - throw new IllegalArgumentException( - "Invalid parameters: 'minTransferTime' must be greater than or equal to board slack plus alight slack" - ); - } - transfer.withSlackSec(req.minTransferTime - boardAndAlightSlack.value); - } - - setIfNotNull(req.nonpreferredTransferPenalty, transfer::withNonpreferredCost); - setIfNotNull(req.maxTransfers, transfer::withMaxTransfers); - setIfNotNull(req.maxAdditionalTransfers, transfer::withMaxAdditionalTransfers); - }); - } - - private void mapRental(VehicleRentalPreferences.Builder rental) { - setIfNotNull( - req.allowKeepingRentedBicycleAtDestination, - rental::withAllowArrivingInRentedVehicleAtDestination - ); - setIfNotNull(req.allowedVehicleRentalNetworks, rental::withAllowedNetworks); - setIfNotNull(req.bannedVehicleRentalNetworks, rental::withBannedNetworks); - - setIfNotNull(req.keepingRentedBicycleAtDestinationCost, cost -> - rental.withArrivingInRentalVehicleAtDestinationCost((int) Math.round(cost)) - ); - rental.withUseAvailabilityInformation(isPlannedForNow); - } - - private void mapItineraryFilter() { - preferences.withItineraryFilter(filter -> { - setIfNotNull(req.debugItineraryFilter, filter::withDebug); - setIfNotNull(req.groupSimilarityKeepOne, filter::withGroupSimilarityKeepOne); - setIfNotNull(req.groupSimilarityKeepThree, filter::withGroupSimilarityKeepThree); - setIfNotNull( - req.groupedOtherThanSameLegsMaxCostMultiplier, - filter::withGroupedOtherThanSameLegsMaxCostMultiplier - ); - filter.withTransitGeneralizedCostLimit(mapTransitGeneralizedCostFilterParams(filter)); - setIfNotNull(req.nonTransitGeneralizedCostLimitFunction, it -> - filter.withNonTransitGeneralizedCostLimit(CostLinearFunction.of(it)) - ); - }); - } - - private TransitGeneralizedCostFilterParams mapTransitGeneralizedCostFilterParams( - ItineraryFilterPreferences.Builder filter - ) { - var costLimitFunction = (req.transitGeneralizedCostLimitFunction == null) - ? filter.original().transitGeneralizedCostLimit().costLimitFunction() - : CostLinearFunction.of(req.transitGeneralizedCostLimitFunction); - - var intervalRelaxFactor = ObjectUtils.ifNotNull( - req.transitGeneralizedCostLimitIntervalRelaxFactor, - filter.original().transitGeneralizedCostLimit().intervalRelaxFactor() - ); - - return new TransitGeneralizedCostFilterParams(costLimitFunction, intervalRelaxFactor); - } - - private void mapParking(VehicleParkingPreferences.Builder builder) { - builder.withRequiredVehicleParkingTags(req.requiredVehicleParkingTags); - builder.withBannedVehicleParkingTags(req.bannedVehicleParkingTags); - } - - private void mapSystem() { - preferences.withSystem(system -> { - setIfNotNull(req.geoidElevation, system::withGeoidElevation); - }); - } - - static void setIfNotNull(T value, @NotNull Consumer body) { - if (value != null) { - body.accept(value); - } - } - - static void mapRelaxIfNotNull(String fx, @NotNull Consumer body) { - if (fx == null) { - return; - } - var a = fx.split("[\\sxXuUvVtT*+]+"); - if (a.length != 2) { - return; - } - body.accept(new Relax(Double.parseDouble(a[0]), Integer.parseInt(a[1]))); - } - - /** - * The combined value of board and alight slack is used in the initialization of transfer - * preferences. - *

- * This class is used to pass a type-safe value from one phase of the mapping to another. This - * enforces the mapping order: 'transit' before 'transfer'. */ - private record BoardAndAlightSlack(int value) {} -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java deleted file mode 100644 index 6c805560b8b..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.annotation.security.PermitAll; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MediaType; -import org.opentripplanner.ext.restapi.model.ApiRouterInfo; -import org.opentripplanner.ext.restapi.model.ApiRouterList; -import org.opentripplanner.routing.error.GraphNotFoundException; -import org.opentripplanner.standalone.api.OtpServerRequestContext; - -/** - * This REST API endpoint returns some meta-info about a router. OTP2 does no longer support - * remotely loading, reloading, and evicting graphs on a running server (Supported in OTP1). - *

- * The HTTP verbs are used as follows: - *

- * GET - see the registered routerIds(there is just one: default) with the graph. - *

- * The HTTP request URLs are of the form /otp/routers/{routerId}. The {routerId} is kept to be - * backward compatible, but the value is ignored. There is only one router, the "default" and that - * is returned - even if you specify something else. - */ -@Path("/routers") -@PermitAll // exceptions on methods -public class Routers { - - private final OtpServerRequestContext serverContext; - - public Routers(@Context OtpServerRequestContext serverContext) { - this.serverContext = serverContext; - } - - /** - * Return the "default" router information. - */ - @GET - @Path("{ignoreRouterId}") - @Produces(MediaType.APPLICATION_JSON) - public ApiRouterInfo getGraphId(@PathParam("ignoreRouterId") String ignore) { - return getRouterInfo(); - } - - /** - * Returns a list of routers and their bounds. A list with one item, the "default" router, is - * returned. - * - * @return a representation of the graphs and their geographic bounds, in JSON or XML depending on - * the Accept header in the HTTP request. - */ - @GET - @Produces(MediaType.APPLICATION_JSON) - public ApiRouterList getRouterIds() { - ApiRouterList routerList = new ApiRouterList(); - routerList.routerInfo.add(getRouterInfo()); - return routerList; - } - - private ApiRouterInfo getRouterInfo() { - try { - return new ApiRouterInfo( - "default", - serverContext.graph(), - serverContext.transitService(), - serverContext.vehicleRentalService(), - serverContext.vehicleParkingService(), - serverContext.worldEnvelopeService().envelope().orElseThrow() - ); - } catch (GraphNotFoundException e) { - return null; - } - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java deleted file mode 100644 index 36d3f9e2bdd..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java +++ /dev/null @@ -1,855 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import static org.opentripplanner.api.common.LocationStringParser.fromOldStyleString; -import static org.opentripplanner.ext.restapi.resources.RequestToPreferencesMapper.setIfNotNull; - -import jakarta.ws.rs.DefaultValue; -import jakarta.ws.rs.QueryParam; -import jakarta.ws.rs.core.Context; -import jakarta.ws.rs.core.MultivaluedMap; -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Set; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeConstants; -import javax.xml.datatype.DatatypeFactory; -import javax.xml.datatype.XMLGregorianCalendar; -import org.opentripplanner.api.parameter.QualifiedModeSet; -import org.opentripplanner.ext.dataoverlay.api.DataOverlayParameters; -import org.opentripplanner.ext.restapi.mapping.LegacyVehicleRoutingOptimizeType; -import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.framework.time.ZoneIdFallback; -import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; -import org.opentripplanner.routing.api.request.request.filter.SelectRequest; -import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; -import org.opentripplanner.standalone.api.OtpServerRequestContext; -import org.opentripplanner.standalone.config.framework.file.ConfigFileLoader; -import org.opentripplanner.standalone.config.framework.json.NodeAdapter; -import org.opentripplanner.standalone.config.routerequest.RouteRequestConfig; -import org.opentripplanner.transit.model.basic.MainAndSubMode; -import org.opentripplanner.utils.lang.StringUtils; -import org.opentripplanner.utils.time.DurationUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * This class defines all the JAX-RS query parameters for a path search as fields, allowing them to - * be inherited by other REST resource classes (the trip planner and the Analyst WMS or tile - * resource). They will be properly included in API docs generated by Enunciate. This implies that - * the concrete REST resource subclasses will be request-scoped rather than singleton-scoped. - *

- * All defaults should be specified in the RouteRequest, NOT as annotations on the query - * parameters. JSON router configuration can then overwrite those built-in defaults, and only the - * fields of the resulting prototype routing request for which query parameters are found are - * overwritten here. This establishes a priority chain: RouteRequest field initializers, then JSON - * router config, then query parameters. - *

- * See the configuration for documentation of each field. - */ -@SuppressWarnings({ "FieldMayBeFinal", "unused" }) -public abstract class RoutingResource { - - private static final Logger LOG = LoggerFactory.getLogger(RoutingResource.class); - - /** - * The start location -- either latitude, longitude pair in degrees or a Vertex label. For - * example, 40.714476,-74.005966 or - * mtanyctsubway_A27_S. - */ - @QueryParam("fromPlace") - protected String fromPlace; - - /** The end location (see fromPlace for format). */ - @QueryParam("toPlace") - protected String toPlace; - - /** - * An ordered list of intermediate locations to be visited (see the fromPlace for format). - * Parameter can be specified multiple times. - * - * @deprecated TODO OTP2 - Regression. Not currently working in OTP2. Must be re-implemented - * - using raptor. - */ - @Deprecated - @QueryParam("intermediatePlaces") - protected List intermediatePlaces; - - /** The date that the trip should depart (or arrive, for requests where arriveBy is true). */ - @QueryParam("date") - protected String date; - - /** The time that the trip should depart (or arrive, for requests where arriveBy is true). */ - @QueryParam("time") - protected String time; - - /** - * The length of the search-window in seconds. This parameter is optional. - *

- * The search-window is defined as the duration between the earliest-departure-time(EDT) and the - * latest-departure-time(LDT). OTP will search for all itineraries in this departure window. If - * {@code arriveBy=true} the {@code dateTime} parameter is the latest-arrival-time, so OTP will - * dynamically calculate the EDT. Using a short search-window is faster than using a longer one, - * but the search duration is not linear. Using a \"too\" short search-window will waste resources - * server side, while using a search-window that is too long will be slow. - *

- * OTP will dynamically calculate a reasonable value for the search-window, if not provided. The - * calculation comes with a significant overhead (10-20% extra). Whether you should use the - * dynamic calculated value or pass in a value depends on your use-case. For a travel planner in a - * small geographical area, with a dense network of public transportation, a fixed value between - * 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust it so that - * the number of itineraries on average is around the wanted {@code numItineraries}. Make sure you - * set the {@code numItineraries} to a high number while testing. For a country wide area like - * Norway, using the dynamic search-window is the best. - *

- * When paginating, the search-window is calculated using the {@code numItineraries} in the - * original search together with statistics from the search for the last page. This behaviour is - * configured server side, and can not be overridden from the client. - *

- * The search-window used is returned to the response metadata as {@code searchWindowUsed} for - * debugging purposes. - */ - @QueryParam("searchWindow") - protected String searchWindow; - - /** - * Use the cursor to go to the next "page" of itineraries. Copy the cursor from the last response - * and keep the original request as is. This will enable you to search for itineraries in the next - * or previous time-window. - *

- * This is an optional parameter. - */ - @QueryParam("pageCursor") - public String pageCursor; - - /** - * Search for the best trip options within a time window. If {@code true} two itineraries are - * considered optimal if one is better on arrival time(earliest wins) and the other is better on - * departure time(latest wins). - *

- * In combination with {@code arriveBy} this parameter cover the following 3 use cases: - *

    - *
  • - * Traveler want to find thee best alternative within a time window. Set - * {@code timetableView=true} and {@code arriveBy=false}. This is the default, and if - * the intention of the traveler is unknown it gives the best result, because it includes - * the two next use-cases. Setting the {@code arriveBy=false}, covers the same use-case, - * but the input time is interpreted as latest-arrival-time, and not - * earliest-departure-time. This works great with paging, request next/previous time-window. - *
  • - *
  • - * Traveler want to find the best alternative with departure after a specific time. - * For example: I am at the station now and want to get home as quickly as possible. - * Set {@code timetableView=false} and {@code arriveBy=false}. Do not support paging. - *
  • - *
  • - * Traveler want to find the best alternative with arrival before specific time. For - * example going to a meeting. Do not support paging. - * Set {@code timetableView=false} and {@code arriveBy=true}. - *
  • - *
- * Default: true - */ - @QueryParam("timetableView") - public Boolean timetableView; - - @Deprecated - @QueryParam("arriveBy") - protected Boolean arriveBy; - - /** - * Whether the trip must be wheelchair accessible. - * - * @deprecated TODO OTP2 Regression. Not currently working in OTP2. This is not implemented - * in Raptor yet. - */ - @Deprecated - @QueryParam("wheelchair") - protected Boolean wheelchair; - - @QueryParam("bookingTime") - protected String bookingTime; - - /** - * The maximum time (in seconds) of pre-transit travel when using drive-to-transit (park and ride - * or kiss and ride). Defaults to unlimited. - *

- * See https://github.com/opentripplanner/OpenTripPlanner/issues/2886 - * - * @deprecated TODO OTP2 - Regression. Not currently working in OTP2. - */ - @Deprecated - @QueryParam("maxPreTransitTime") - protected Integer maxPreTransitTime; - - /** - * A multiplier for how bad walking with a bike is, compared to being in transit for equal lengths - * of time. Defaults to 3. - */ - @QueryParam("bikeWalkingReluctance") - protected Double bikeWalkingReluctance; - - @QueryParam("walkReluctance") - protected Double walkReluctance; - - @QueryParam("bikeReluctance") - protected Double bikeReluctance; - - @QueryParam("carReluctance") - protected Double carReluctance; - - /** - * How much worse is waiting for a transit vehicle than being on a transit vehicle, as a - * multiplier. The default value treats wait and on-vehicle time as the same. - *

- * It may be tempting to set this higher than walkReluctance (as studies often find this kind of - * preferences among riders) but the planner will take this literally and walk down a transit line - * to avoid waiting at a stop. This used to be set less than 1 (0.95) which would make waiting - * offboard preferable to waiting onboard in an interlined trip. That is also undesirable. - *

- * If we only tried the shortest possible transfer at each stop to neighboring stop patterns, this - * problem could disappear. - */ - @QueryParam("waitReluctance") - protected Double waitReluctance; - - @QueryParam("walkSpeed") - protected Double walkSpeed; - - @QueryParam("bikeSpeed") - protected Double bikeSpeed; - - @QueryParam("bikeWalkingSpeed") - protected Double bikeWalkingSpeed; - - @QueryParam("bikeSwitchTime") - protected Integer bikeSwitchTime; - - @QueryParam("bikeSwitchCost") - protected Integer bikeSwitchCost; - - @QueryParam("triangleSafetyFactor") - protected Double triangleSafetyFactor; - - @QueryParam("triangleSlopeFactor") - protected Double triangleSlopeFactor; - - @QueryParam("triangleTimeFactor") - protected Double triangleTimeFactor; - - /** - * The set of characteristics that the user wants to optimize for in bicycle and scooter routing. - * @See OptimizeType. - * - * @deprecated TODO OTP2 this should be completely removed and done only with individual cost - * parameters - */ - @Deprecated - @QueryParam("optimize") - protected LegacyVehicleRoutingOptimizeType bikeOptimizeType; - - /** - * The set of modes that a user is willing to use, with qualifiers stating whether vehicles should - * be parked, rented, etc. - *

- * The possible values of the comma-separated list are: - * - *

    - *
  • WALK
  • - *
  • TRANSIT
  • - *
  • BICYCLE
  • - *
  • BICYCLE_RENT
  • - *
  • BICYCLE_PARK
  • - *
  • CAR
  • - *
  • CAR_PARK
  • - *
  • TRAM
  • - *
  • SUBWAY
  • - *
  • RAIL
  • - *
  • BUS
  • - *
  • CABLE_CAR
  • - *
  • FERRY
  • - *
  • GONDOLA
  • - *
  • FUNICULAR
  • - *
  • AIRPLANE
  • - *
- *

- * For a more complete discussion of this parameter see - * Routing modes. - */ - @QueryParam("mode") - protected QualifiedModeSet modes; - - /** - * The minimum time, in seconds, between successive trips on different vehicles. This is designed - * to allow for imperfect schedule adherence. This is a minimum; transfers over longer distances - * might use a longer time. - * - * @deprecated TODO OTP2: Needs to be implemented - */ - @Deprecated - @QueryParam("minTransferTime") - protected Integer minTransferTime; - - /** The maximum number of possible itineraries to return. */ - @QueryParam("numItineraries") - protected Integer numItineraries; - - /** - * The comma-separated list of preferred agencies. - * - * @deprecated TODO OTP2: Needs to be implemented - */ - @Deprecated - @QueryParam("preferredAgencies") - protected String preferredAgencies; - - /** - * The comma-separated list of unpreferred agencies. - * - * @deprecated TODO OTP2: Needs to be implemented - */ - @Deprecated - @QueryParam("unpreferredAgencies") - protected String unpreferredAgencies; - - /** - * The comma-separated list of banned agencies. - */ - @QueryParam("bannedAgencies") - protected String bannedAgencies; - - /** - * Functions the same as banned agencies, except only the listed agencies are allowed. - */ - @QueryParam("whiteListedAgencies") - protected String whiteListedAgencies; - - /** - * Whether intermediate stops -- those that the itinerary passes in a vehicle, but does not board - * or alight at -- should be returned in the response. For example, on a Q train trip from - * Prospect Park to DeKalb Avenue, whether 7th Avenue and Atlantic Avenue should be included. - */ - @QueryParam("showIntermediateStops") - @DefaultValue("false") - protected Boolean showIntermediateStops; - - @QueryParam("walkBoardCost") - protected Integer walkBoardCost; - - @QueryParam("bikeBoardCost") - protected Integer bikeBoardCost; - - @QueryParam("walkSafetyFactor") - protected Double walkSafetyFactor; - - @QueryParam("allowKeepingRentedBicycleAtDestination") - protected Boolean allowKeepingRentedBicycleAtDestination; - - @QueryParam("keepingRentedBicycleAtDestinationCost") - protected Double keepingRentedBicycleAtDestinationCost; - - @QueryParam("allowedVehicleRentalNetworks") - protected Set allowedVehicleRentalNetworks; - - @QueryParam("bannedVehicleRentalNetworks") - protected Set bannedVehicleRentalNetworks; - - @QueryParam("bikeParkTime") - protected Integer bikeParkTime; - - @QueryParam("bikeParkCost") - protected Integer bikeParkCost; - - @QueryParam("carParkTime") - protected Integer carParkTime = 60; - - @QueryParam("carParkCost") - protected Integer carParkCost = 120; - - @QueryParam("requiredVehicleParkingTags") - protected Set requiredVehicleParkingTags = Set.of(); - - @QueryParam("bannedVehicleParkingTags") - protected Set bannedVehicleParkingTags = Set.of(); - - /** - * The comma-separated list of banned routes. The format is agency_[routename][_routeid], so - * TriMet_100 (100 is route short name) or Trimet__42 (two underscores, 42 is the route internal - * ID). - */ - @Deprecated - @QueryParam("bannedRoutes") - protected String bannedRoutes; - - /** - * Functions the same as bannnedRoutes, except only the listed routes are allowed. - */ - @QueryParam("whiteListedRoutes") - @Deprecated - protected String whiteListedRoutes; - - /** - * The list of preferred routes. The format is agency_[routename][_routeid], so TriMet_100 (100 is - * route short name) or Trimet__42 (two underscores, 42 is the route internal ID). - * - * @deprecated TODO OTP2 Needs to be implemented - */ - @Deprecated - @QueryParam("preferredRoutes") - protected String preferredRoutes; - - /** - * The list of unpreferred routes. The format is agency_[routename][_routeid], so TriMet_100 (100 - * is route short name) or Trimet__42 (two underscores, 42 is the route internal ID). - * - * @deprecated TODO OTP2 Needs to be implemented - */ - @Deprecated - @QueryParam("unpreferredRoutes") - protected String unpreferredRoutes; - - /** - * Penalty added for using every route that is not preferred if user set any route as preferred, - * i.e. number of seconds that we are willing to wait for preferred route. - * - * @deprecated TODO OTP2 Needs to be implemented - */ - @Deprecated - @QueryParam("otherThanPreferredRoutesPenalty") - protected Integer otherThanPreferredRoutesPenalty; - - /** - * The comma-separated list of banned trips. The format is feedId:tripId - */ - @QueryParam("bannedTrips") - protected String bannedTrips; - - /** - * A comma-separated list of banned stops. A stop is banned by ignoring its pre-board and - * pre-alight edges. This means the stop will be reachable via the street network. Also, it is - * still possible to travel through the stop. Just boarding and alighting is prohibited. The - * format is agencyId_stopId, so: TriMet_2107 - * - * @deprecated TODO OTP2 This no longer works in OTP2, see issue #2843. - */ - @Deprecated - @QueryParam("bannedStops") - protected String bannedStops; - - /** - * A comma-separated list of banned stops. A stop is banned by ignoring its pre-board and - * pre-alight edges. This means the stop will be reachable via the street network. It is not - * possible to travel through the stop. For example, this parameter can be used when a train - * station is destroyed, such that no trains can drive through the station anymore. The format is - * agencyId_stopId, so: TriMet_2107 - * - * @deprecated TODO OTP2 This no longer works in OTP2, see issue #2843. - */ - @Deprecated - @QueryParam("bannedStopsHard") - protected String bannedStopsHard; - - @QueryParam("transferPenalty") - protected Integer transferPenalty; - - /** - * An additional penalty added to boardings after the first when the transfer is not preferred. - * Preferred transfers also include timed transfers. The value is in OTP's internal weight units, - * which are roughly equivalent to seconds. Set this to a high value to discourage transfers that - * are not preferred. Of course, transfers that save significant time or walking will still be - * taken. When no preferred or timed transfer is defined, this value is ignored. - *

- * TODO OTP2 This JavaDoc needs clarification. What is a "preferred" Transfer, the GTFS - * specification do not have "preferred Transfers". The GTFS spec transfer - * type 0 is _Recommended transfer point_ - is this what is meant? - * - * @deprecated TODO OTP2 Regression. Not currently working in OTP2. We might not implement the - * old functionality the same way, but we will try to map this parameter - * so it does work similar as before. - */ - @Deprecated - @QueryParam("nonpreferredTransferPenalty") - protected Integer nonpreferredTransferPenalty; - - /** - * The maximum number of transfers (that is, one plus the maximum number of boardings) that a trip - * will be allowed. - *

- * Consider using the {@link #transferPenalty} instead of this parameter. - *

- * See https://github.com/opentripplanner/OpenTripPlanner/issues/2886 - * - * @deprecated Use {@link #maxAdditionalTransfers} instead to pass in the max number of - * additional/extra transfers relative to the best trip (with the fewest possible transfers) - * within constraint of the other search parameters. This might be too complicated to explain to - * the customer, so you might stick to the old limit, but that has side-effects where you might - * not find any trips on a day when a critical part of the trip is not available, because of some - * real-time disruption. - */ - @Deprecated - @QueryParam("maxTransfers") - protected Integer maxTransfers; - - /** - * The maximum number of additional transfers in addition to the result with the least number of transfers. - *

- * Consider using the {@link #transferPenalty} instead of this parameter. - */ - @QueryParam("maxAdditionalTransfers") - protected Integer maxAdditionalTransfers; - - /** - * If true, goal direction is turned off and a full path tree is built (specify only once) - * - * @Deprecated - This is not supported in OTP2 any more. - */ - @Deprecated - @QueryParam("batch") - protected Boolean batch; - - /** - * A transit stop required to be the first stop in the search (AgencyId_StopId) - * - * @deprecated TODO OTP2 Is this in use, what is is used for. It seems to overlap with - * the fromPlace parameter. Is is used for onBoard routing only? - */ - @Deprecated - @QueryParam("startTransitStopId") - protected String startTransitStopId; - - /** - * A transit trip acting as a starting "state" for depart-onboard routing (AgencyId_TripId) - * - * @deprecated TODO OTP2 Regression. Not currently working in OTP2. We might not implement the - * old functionality the same way, but we will try to map this parameter - * so it does work similar as before. - */ - @Deprecated - @QueryParam("startTransitTripId") - protected String startTransitTripId; - - /** - * When subtracting initial wait time, do not subtract more than this value, to prevent overly - * optimistic trips. Reasoning is that it is reasonable to delay a trip start 15 minutes to make a - * better trip, but that it is not reasonable to delay a trip start 15 hours; if that is to be - * done, the time needs to be included in the trip time. This number depends on the transit - * system; for transit systems where trips are planned around the vehicles, this number can be - * much higher. For instance, it's perfectly reasonable to delay one's trip 12 hours if one is - * taking a cross-country Amtrak train from Emeryville to Chicago. Has no effect in stock OTP, - * only in Analyst. - *

- * A value of 0 means that initial wait time will not be subtracted out (will be clamped to 0). A - * value of -1 (the default) means that clamping is disabled, so any amount of initial wait time - * will be subtracted out. - * - * @deprecated This parameter is not in use any more. - */ - @Deprecated - @QueryParam("clampInitialWait") - protected Long clampInitialWait; - - /** - * THIS PARAMETER IS NO LONGER IN USE. - *

- * If true, this trip will be reverse-optimized on the fly. Otherwise, reverse-optimization will - * occur once a trip has been chosen (in Analyst, it will not be done at all). - * - * @deprecated This parameter is not in use any more after the transit search switched from AStar - * to Raptor. - */ - @Deprecated - @QueryParam("reverseOptimizeOnTheFly") - protected Boolean reverseOptimizeOnTheFly; - - /** - * The number of seconds to add before boarding a transit leg. It is recommended to use the - * {@code boardTimes} in the {@code router-config.json} to set this for each mode. - *

- * Unit is seconds. Default value is 0. - */ - @QueryParam("boardSlack") - protected Integer boardSlack; - - /** - * The number of seconds to add after alighting a transit leg. It is recommended to use the - * {@code alightTimes} in the {@code router-config.json} to set this for each mode. - *

- * Unit is seconds. Default value is 0. - */ - @QueryParam("alightSlack") - protected Integer alightSlack; - - @QueryParam("locale") - private String locale; - - /** - * If true, realtime updates are ignored during this search. - * - * @deprecated TODO OTP2 Regression. Not currently working in OTP2. - */ - @Deprecated - @QueryParam("ignoreRealtimeUpdates") - protected Boolean ignoreRealtimeUpdates; - - /** - * If true, the remaining weight heuristic is disabled. Currently only implemented for the long - * distance path service. - */ - @QueryParam("disableRemainingWeightHeuristic") - protected Boolean disableRemainingWeightHeuristic; - - /** - * See https://github.com/opentripplanner/OpenTripPlanner/issues/2886 - * - * @deprecated TODO OTP2 This is not useful as a search parameter, but could be used as a - * post search filter to reduce number of itineraries down to an - * acceptable number, but there are probably better ways to do that. - */ - @Deprecated - @QueryParam("maxHours") - private Double maxHours; - - /** - * See https://github.com/opentripplanner/OpenTripPlanner/issues/2886 - * - * @deprecated see {@link #maxHours} - */ - @QueryParam("useRequestedDateTimeInMaxHours") - @Deprecated - private Boolean useRequestedDateTimeInMaxHours; - - /** - * @deprecated This is not supported in OTP2. - */ - @QueryParam("disableAlertFiltering") - @Deprecated - private Boolean disableAlertFiltering; - - @QueryParam("debugItineraryFilter") - protected ItineraryFilterDebugProfile debugItineraryFilter; - - @QueryParam("groupSimilarityKeepOne") - Double groupSimilarityKeepOne; - - @QueryParam("groupSimilarityKeepThree") - Double groupSimilarityKeepThree; - - @QueryParam("groupedOtherThanSameLegsMaxCostMultiplier") - Double groupedOtherThanSameLegsMaxCostMultiplier; - - @QueryParam("transitGeneralizedCostLimitFunction") - String transitGeneralizedCostLimitFunction; - - @QueryParam("transitGeneralizedCostLimitIntervalRelaxFactor") - Double transitGeneralizedCostLimitIntervalRelaxFactor; - - @QueryParam("nonTransitGeneralizedCostLimitFunction") - String nonTransitGeneralizedCostLimitFunction; - - @QueryParam("geoidElevation") - protected Boolean geoidElevation; - - /** - * @deprecated Support has been removed. - */ - @Deprecated - @QueryParam("useVehicleParkingAvailabilityInformation") - protected Boolean useVehicleParkingAvailabilityInformation; - - @QueryParam("relaxTransitGroupPriority") - protected String relaxTransitGroupPriority; - - /** - * Whether non-optimal transit paths at the destination should be returned. - * This is optional. Use values between 1.0 and 2.0. For example to relax 10% use 1.1. - * Values greater than 2.0 are not supported, due to performance reasons. - */ - @QueryParam("relaxTransitSearchGeneralizedCostAtDestination") - protected Double relaxTransitSearchGeneralizedCostAtDestination; - - @QueryParam("debugRaptorStops") - private String debugRaptorStops; - - @QueryParam("debugRaptorPath") - private String debugRaptorPath; - - /** - * This takes a RouteRequest as JSON and uses it as the default before applying other - * parameters. This is intended for debugging only! The RouteRequest is an internal OTP - * class and will change without notice. The JSON is the same as the one in the - * router-config for the "routingDefaults" parameter. - */ - @QueryParam("config") - private String config; - - /** - * somewhat ugly bug fix: the graphService is only needed here for fetching per-graph time zones. - * this should ideally be done when setting the routing context, but at present departure/ arrival - * time is stored in the request as an epoch time with the TZ already resolved, and other code - * depends on this behavior. (AMB) Alternatively, we could eliminate the separate RouteRequest - * objects and just resolve vertices and timezones here right away, but just ignore them in - * semantic equality checks. - */ - @Context - protected OtpServerRequestContext serverContext; - - /** - * Range/sanity check the query parameter fields and build a Request object from them. - * - * @param queryParameters incoming request parameters - */ - protected RouteRequest buildRequest(MultivaluedMap queryParameters) { - final RouteRequest request = defaultRouteRequest(); - - // The routing request should already contain defaults, which are set when it is initialized or - // in the JSON router configuration and cloned. We check whether each parameter was supplied - // before overwriting the default. - setIfNotNull(fromPlace, it -> request.setFrom(fromOldStyleString(it))); - setIfNotNull(toPlace, it -> request.setTo(fromOldStyleString(it))); - - { - //FIXME: move into setter method on routing request - ZoneId tz = ZoneIdFallback.zoneId(serverContext.transitService().getTimeZone()); - if (date == null && time != null) { // Time was provided but not date - LOG.debug("parsing ISO datetime {}", time); - try { - // If the time query param doesn't specify a timezone, use the graph's default. See issue #1373. - DatatypeFactory df = javax.xml.datatype.DatatypeFactory.newInstance(); - XMLGregorianCalendar xmlGregCal = df.newXMLGregorianCalendar(time); - ZonedDateTime dateTime = xmlGregCal.toGregorianCalendar().toZonedDateTime(); - if (xmlGregCal.getTimezone() == DatatypeConstants.FIELD_UNDEFINED) { - dateTime = dateTime.withZoneSameLocal(tz); - } - request.setDateTime(dateTime.toInstant()); - } catch (DatatypeConfigurationException e) { - request.setDateTime(date, time, tz); - } - } else { - request.setDateTime(date, time, tz); - } - - if (bookingTime != null) { - request.setBookingTime(LocalDateTime.parse(bookingTime).atZone(tz).toInstant()); - } - } - - final Duration swDuration = DurationUtils.parseSecondsOrDuration(searchWindow).orElse(null); - setIfNotNull(searchWindow, it -> request.setSearchWindow(swDuration)); - setIfNotNull(pageCursor, request::setPageCursorFromEncoded); - setIfNotNull(timetableView, request::setTimetableView); - setIfNotNull(wheelchair, request::setWheelchair); - setIfNotNull(numItineraries, request::setNumItineraries); - - { - var journey = request.journey(); - /* Temporary code to get bike/car parking and renting working. */ - if (modes != null && !modes.qModes.isEmpty()) { - journey.setModes(modes.getRequestModes()); - } - - setIfNotNull(arriveBy, request::setArriveBy); - - { - var transit = journey.transit(); - var filterBuilder = TransitFilterRequest.of(); - // Filter Agencies - setIfNotNull(preferredAgencies, transit::setPreferredAgenciesFromString); - setIfNotNull(unpreferredAgencies, transit::setUnpreferredAgenciesFromString); - - // Filter Routes - setIfNotNull(preferredRoutes, transit::setPreferredRoutesFromString); - setIfNotNull(unpreferredRoutes, transit::setUnpreferredRoutesFromString); - - // Filter Trips - setIfNotNull(bannedTrips, journey.transit()::setBannedTripsFromString); - - // Excluded entities - setIfNotNull(bannedAgencies, s -> - filterBuilder.addNot(SelectRequest.of().withAgenciesFromString(s).build()) - ); - - setIfNotNull(bannedRoutes, s -> - filterBuilder.addNot(SelectRequest.of().withRoutesFromString(s).build()) - ); - - // Included entities - var selectors = new ArrayList(); - - setIfNotNull(whiteListedAgencies, s -> - selectors.add(SelectRequest.of().withAgenciesFromString(s)) - ); - - setIfNotNull(whiteListedRoutes, s -> - selectors.add(SelectRequest.of().withRoutesFromString(s)) - ); - - List tModes; - if (modes == null) { - tModes = MainAndSubMode.all(); - } else { - // Create modes - tModes = modes.getTransitModes().stream().map(MainAndSubMode::new).toList(); - } - - // Add modes filter to all existing selectors - // If no selectors specified, create new one - if (!selectors.isEmpty()) { - for (var selector : selectors) { - filterBuilder.addSelect(selector.withTransportModes(tModes).build()); - } - } else { - filterBuilder.addSelect(SelectRequest.of().withTransportModes(tModes).build()); - } - - if (tModes.isEmpty()) { - transit.disable(); - } else { - transit.setFilters(List.of(filterBuilder.build())); - } - } - { - var debugRaptor = journey.transit().raptorDebugging(); - setIfNotNull(debugRaptorStops, debugRaptor::withStops); - setIfNotNull(debugRaptorPath, debugRaptor::withPath); - } - } - - if (locale != null) { - request.setLocale(Locale.forLanguageTag(locale.replaceAll("-", "_"))); - } - - request.withPreferences(preferences -> { - // Map all preferences, note dependency on 'isTripPlannedForNow'. - new RequestToPreferencesMapper(this, preferences, request.isTripPlannedForNow()).map(); - - if (OTPFeature.DataOverlay.isOn()) { - var dataOverlayParameters = DataOverlayParameters.parseQueryParams(queryParameters); - if (!dataOverlayParameters.isEmpty()) { - preferences.withSystem(it -> it.withDataOverlay(dataOverlayParameters)); - } - } - }); - return request; - } - - /** - * This method returns the configured default routing request with modifications passed in by the - * `config` parameter. Only if {@code OTPFeature.RestAPIPAssInDefaultConfigAsJson.isOn()}. - */ - private RouteRequest defaultRouteRequest() { - RouteRequest request = serverContext.defaultRouteRequest(); - - if (OTPFeature.RestAPIPassInDefaultConfigAsJson.isOn() && StringUtils.hasValue(config)) { - var source = "Request.config"; - var root = ConfigFileLoader.nodeFromString(config, source); - return RouteRequestConfig.mapRouteRequest(new NodeAdapter(root, source), request); - } else { - return request; - } - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java deleted file mode 100644 index 5a94ca318f7..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java +++ /dev/null @@ -1,61 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import jakarta.ws.rs.BadRequestException; -import java.util.HashSet; -import java.util.Set; - -class ValidateParameters { - - /** This is set to avoid repeating the same error message twice. */ - private final Set errors = new HashSet<>(); - - ValidateParameters positiveOrZero(String name, Double value) { - return assertTrue(value >= 0, pad(name) + " is negative: " + value); - } - - ValidateParameters withinBounds(String name, Double value, double min, double max) { - notNull(name, value); - if (value != null) { - assertTrue( - value >= min || value <= max, - pad(name) + " is not within bounds [" + min + ", " + max + "]" - ); - } - return this; - } - - ValidateParameters lessThan(String aName, Double aSmall, String bName, Double bBig) { - notNull(aName, aSmall); - notNull(bName, bBig); - if (aSmall != null && bBig != null) { - assertTrue(aSmall < bBig, pad(aName) + " in not less than " + pad(bName)); - } - return this; - } - - ValidateParameters notNull(String name, Object value) { - return assertFalse(value == null, pad(name) + " is missing"); - } - - ValidateParameters assertTrue(boolean expr, String message) { - return assertFalse(!expr, message); - } - - ValidateParameters assertFalse(boolean expr, String message) { - if (expr) { - errors.add(message); - } - return this; - } - - void validate() { - if (errors.isEmpty()) { - return; - } - throw new BadRequestException(String.join(", ", errors)); - } - - private String pad(String name) { - return "'" + name + "'"; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md b/application/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md deleted file mode 100644 index a4bb7eb6f4f..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.md +++ /dev/null @@ -1,4 +0,0 @@ -# JAX-RS-annotated REST resource classes - -This package contains the JAX-RS-annotated REST resource classes for the OpenTripPlanner public -API, i.e. the Jersey REST endpoints. diff --git a/application/src/main/java/org/opentripplanner/apis/APIEndpoints.java b/application/src/main/java/org/opentripplanner/apis/APIEndpoints.java index 737637d20b7..a462f1e5b8c 100644 --- a/application/src/main/java/org/opentripplanner/apis/APIEndpoints.java +++ b/application/src/main/java/org/opentripplanner/apis/APIEndpoints.java @@ -1,13 +1,11 @@ package org.opentripplanner.apis; -import static org.opentripplanner.framework.application.OTPFeature.APIBikeRental; import static org.opentripplanner.framework.application.OTPFeature.APIServerInfo; import static org.opentripplanner.framework.application.OTPFeature.APIUpdaterStatus; import static org.opentripplanner.framework.application.OTPFeature.ActuatorAPI; import static org.opentripplanner.framework.application.OTPFeature.DebugRasterTiles; import static org.opentripplanner.framework.application.OTPFeature.DebugUi; import static org.opentripplanner.framework.application.OTPFeature.GtfsGraphQlApi; -import static org.opentripplanner.framework.application.OTPFeature.LegacyRestApi; import static org.opentripplanner.framework.application.OTPFeature.ReportApi; import static org.opentripplanner.framework.application.OTPFeature.SandboxAPIGeocoder; import static org.opentripplanner.framework.application.OTPFeature.SandboxAPIMapboxVectorTilesApi; @@ -28,10 +26,6 @@ import org.opentripplanner.ext.geocoder.GeocoderResource; import org.opentripplanner.ext.parkAndRideApi.ParkAndRideResource; import org.opentripplanner.ext.reportapi.resource.ReportResource; -import org.opentripplanner.ext.restapi.resources.BikeRental; -import org.opentripplanner.ext.restapi.resources.IndexAPI; -import org.opentripplanner.ext.restapi.resources.PlannerResource; -import org.opentripplanner.ext.restapi.resources.Routers; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.application.OTPFeature; @@ -62,12 +56,6 @@ private APIEndpoints() { addIfEnabled(SandboxAPIMapboxVectorTilesApi, VectorTilesResource.class); addIfEnabled(SandboxAPIParkAndRideApi, ParkAndRideResource.class); addIfEnabled(SandboxAPIGeocoder, GeocoderResource.class); - - // scheduled to be removed - addIfEnabled(APIBikeRental, BikeRental.class); - addIfEnabled(LegacyRestApi, Routers.class); - addIfEnabled(LegacyRestApi, PlannerResource.class); - addIfEnabled(LegacyRestApi, IndexAPI.class); } /** diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java index 563200dbba0..f4e99747cdb 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java @@ -9,9 +9,6 @@ public class StreetNoteMapper { - /** - * Similar to {@link org.opentripplanner.apis.support.mapping.StreetNoteMapper ::mapToApi}. - */ public static TransitAlert mapStreetNoteToAlert(StreetNote note) { // TODO: The ID is used only in the mapping, we should instead have two mappers for the fields TransitAlertBuilder alert = TransitAlert.of( diff --git a/application/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java b/application/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java deleted file mode 100644 index 9cde403c2ed..00000000000 --- a/application/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.opentripplanner.apis.support.mapping; - -import java.util.List; -import java.util.Locale; -import java.util.Set; -import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiAlert; -import org.opentripplanner.street.model.note.StreetNote; - -public class StreetNoteMapper { - - private final Locale locale; - - public StreetNoteMapper(Locale locale) { - this.locale = locale; - } - - public List mapToApi(Set newAlerts) { - // Using {@code null} and not an empty set will minimize the JSON removing the - // {@code alerts} from the result. - if (newAlerts == null || newAlerts.isEmpty()) { - return null; - } - - return newAlerts.stream().map(this::mapToApi).collect(Collectors.toList()); - } - - ApiAlert mapToApi(StreetNote domain) { - ApiAlert api = new ApiAlert(); - if (domain.note != null) { - api.alertHeaderText = domain.note.toString(locale); - } - - if (domain.descriptionText != null) { - api.alertDescriptionText = domain.descriptionText.toString(locale); - } - - if (domain.url != null) { - api.alertUrl = domain.url; - } - - api.effectiveStartDate = domain.effectiveStartDate; - api.effectiveEndDate = domain.effectiveEndDate; - - return api; - } -} diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index a0e5ec0cc47..b7da4387bd0 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -113,7 +113,6 @@ public enum OTPFeature { FaresV2(false, true, "Enable import of GTFS-Fares v2 data."), FlexRouting(false, true, "Enable FLEX routing."), GoogleCloudStorage(false, true, "Enable Google Cloud Storage integration."), - LegacyRestApi(false, true, "Enable legacy REST API. This API will be removed in the future."), MultiCriteriaGroupMaxFilter( false, false, diff --git a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java index 1497f63285d..d4fa5556f7d 100644 --- a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java +++ b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java @@ -3,13 +3,6 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import graphql.ExecutionResult; -import graphql.execution.AbortExecutionException; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; import org.opentripplanner.ext.restapi.serialization.JSONObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java b/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java deleted file mode 100644 index 478c35b1a4b..00000000000 --- a/application/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.opentripplanner.ext.restapi.resources; - -import static graphql.Assert.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.opentripplanner.routing.api.request.StreetMode.BIKE_RENTAL; - -import jakarta.ws.rs.core.MultivaluedHashMap; -import jakarta.ws.rs.core.MultivaluedMap; -import java.util.HashMap; -import org.junit.jupiter.api.Test; -import org.opentripplanner.TestServerContext; -import org.opentripplanner._support.time.ZoneIds; -import org.opentripplanner.api.parameter.QualifiedModeSet; -import org.opentripplanner.routing.api.request.RequestModes; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.standalone.api.OtpServerRequestContext; -import org.opentripplanner.transit.service.TimetableRepository; - -class PlannerResourceTest { - - static OtpServerRequestContext context() { - var timetableRepository = new TimetableRepository(); - timetableRepository.initTimeZone(ZoneIds.BERLIN); - return TestServerContext.createServerContext(new Graph(), timetableRepository); - } - - @Test - void defaultValues() { - var resource = new PlannerResource(); - resource.serverContext = context(); - - MultivaluedMap queryParams = new MultivaluedHashMap<>(new HashMap<>()); - var req = resource.buildRequest(queryParams); - assertNotNull(req); - assertEquals(RequestModes.defaultRequestModes(), req.journey().modes()); - } - - @Test - void bicycleRent() { - var resource = new PlannerResource(); - - resource.modes = new QualifiedModeSet("BICYCLE_RENT"); - resource.serverContext = context(); - - MultivaluedMap queryParams = new MultivaluedHashMap<>(new HashMap<>()); - var req = resource.buildRequest(queryParams); - assertFalse(req.journey().transit().enabled()); - assertEquals( - RequestModes.of() - .withDirectMode(BIKE_RENTAL) - .withEgressMode(BIKE_RENTAL) - .withAccessMode(BIKE_RENTAL) - .withTransferMode(BIKE_RENTAL) - .build(), - req.journey().modes() - ); - } -} diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index 090a3586ea0..6f37e824afc 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -247,7 +247,6 @@ Here is a list of all features which can be toggled on/off and their default val | `FaresV2` | Enable import of GTFS-Fares v2 data. | | ✓️ | | `FlexRouting` | Enable FLEX routing. | | ✓️ | | `GoogleCloudStorage` | Enable Google Cloud Storage integration. | | ✓️ | -| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | | ✓️ | | `MultiCriteriaGroupMaxFilter` | Keep the best itinerary with respect to each criteria used in the transit-routing search. For example the itinerary with the lowest cost, fewest transfers, and each unique transit-group (transit-group-priority) is kept, even if the max-limit is exceeded. This is turned off by default for now, until this feature is well tested. | | | | `RealtimeResolver` | When routing with ignoreRealtimeUpdates=true, add an extra step which populates results with real-time data | | ✓️ | | `ReportApi` | Enable the report API. | | ✓️ | From b82a67d128ddb6fa059da06f01d80efb2ad4f350 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Mar 2025 22:38:44 +0100 Subject: [PATCH 02/13] Remove serialization features --- .../ext/restapi/mapping/LegMapper.java | 1 - .../FeedScopedIdDeserializer.java | 29 -------- .../FeedScopedIdKeyDeserializer.java | 18 ----- .../serialization/FeedScopedIdSerializer.java | 40 ----------- .../JSONObjectMapperProvider.java | 72 ------------------- .../graphql/GraphQLResponseSerializer.java | 5 +- .../standalone/server/OTPWebApplication.java | 3 - 7 files changed, 2 insertions(+), 166 deletions(-) delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index aaf435c0837..8d279f13c59 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -134,5 +134,4 @@ public ApiLeg mapLeg( private Double round3Decimals(double value) { return Math.round(value * 1000d) / 1000d; } - } diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java b/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java deleted file mode 100644 index 75b1b58bfee..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.opentripplanner.ext.restapi.serialization; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import java.io.IOException; -import org.opentripplanner.transit.model.framework.FeedScopedId; - -public class FeedScopedIdDeserializer extends JsonDeserializer { - - public static final String SEPARATOR = ":"; - - @Override - public FeedScopedId deserialize(JsonParser jp, DeserializationContext ctxt) - throws IOException, JsonProcessingException { - String string = jp.getValueAsString(); - String[] parts = string.split(SEPARATOR, 2); - return new FeedScopedId(parts[0], parts[1]); - } - - // Gets around type erasure, allowing - // module.addSerializer(new ThingSerializer()) to correctly associate - // this serializer with the proper type. - @Override - public Class handledType() { - return FeedScopedId.class; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java b/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java deleted file mode 100644 index 75270e9dd0b..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.opentripplanner.ext.restapi.serialization; - -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.KeyDeserializer; -import java.io.IOException; -import org.opentripplanner.transit.model.framework.FeedScopedId; - -// Map key (de)serializers are always separate from value ones, because they must be strings. -public class FeedScopedIdKeyDeserializer extends KeyDeserializer { - - public static final String SEPARATOR = ":"; - - @Override - public Object deserializeKey(String key, DeserializationContext ctxt) throws IOException { - String[] parts = key.split(SEPARATOR, 2); - return new FeedScopedId(parts[0], parts[1]); - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java b/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java deleted file mode 100644 index c9c67e675c4..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.opentripplanner.ext.restapi.serialization; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.Version; -import com.fasterxml.jackson.databind.JsonSerializer; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.module.SimpleModule; -import java.io.IOException; -import org.opentripplanner.transit.model.framework.FeedScopedId; - -public class FeedScopedIdSerializer extends JsonSerializer { - - public static final String SEPARATOR = ":"; - - /** This creates a Jackson module including both the serializer and deserializer for AgencyAndIds. */ - public static SimpleModule makeModule() { - Version moduleVersion = new Version(1, 0, 0, null, null, null); - SimpleModule module = new SimpleModule("OTP", moduleVersion); - module.addSerializer(FeedScopedId.class, new FeedScopedIdSerializer()); - module.addDeserializer(FeedScopedId.class, new FeedScopedIdDeserializer()); - // Map key (de)serializers are always separate from value ones, because they must be strings. - module.addKeyDeserializer(FeedScopedId.class, new FeedScopedIdKeyDeserializer()); - return module; - } - - @Override - public void serialize(FeedScopedId a, JsonGenerator gen, SerializerProvider prov) - throws IOException, JsonProcessingException { - gen.writeString(a.getFeedId() + SEPARATOR + a.getId()); - } - - // Gets around type erasure, allowing - // module.addSerializer(new ThingSerializer()) to correctly associate - // this serializer with the proper type. - @Override - public Class handledType() { - return FeedScopedId.class; - } -} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java b/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java deleted file mode 100644 index 8c6adfb44f2..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.opentripplanner.ext.restapi.serialization; - -import com.bedatadriven.jackson.datatype.jts.JtsModule; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.ws.rs.Produces; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.ext.ContextResolver; -import jakarta.ws.rs.ext.Provider; - -/** - * AgencyAndId is a third-party class in One Bus Away which represents a GTFS element's ID, - * including an agency name as identifier scope information since more than one feed may be loaded - * at once. - *

- * While this works when there is only one agency per feed, the true scope of identifiers is the - * feed, and the same agency could appear in multiple feeds. We don't want the key "agencyId" to - * appear in the final OTP API because it will eventually not represent an agency. - *

- * See this ticket: https://github.com/opentripplanner/OpenTripPlanner/issues/1352 - *

- * And this proposal to gtfs-changes: https://groups.google.com/d/msg/gtfs-changes/zVjEoNIPr_Y/4ngWCajPoS0J - *

- * Our solution is to serialize the FeedScopedId as a single string with a separator character - * between the agency and ID. In future versions this scoped identifier will actually represent a - * feed and ID. The important thing is that the API will remain the same, and identifiers fetched - * from one API result can be used in another request with no conflicts. - *

- * TODO - This is no longer the case - the FeedScopedId can be annotated. - * Since FeedScopedId is a third-party class, we can't modify it with a custom serialization method - * or annotations. Instead, we have to let Jackson know which custom serializer class applies to the - * third-party type. According to http://wiki.fasterxml.com/JacksonHowToCustomSerializers "Jackson - * 1.7 added ability to register serializers and deserializes via Module interface. This is the - * recommended way to add custom serializers." - *

- * A Jackson "Module" is a group of extensions to default functionality, used for example to support - * serializing new data types. Modules are registered with an ObjectMapper, which constructs - * ObjectWriters, which are used to do the final JSON writing. In OTP the ObjectWriter construction - * and JSON writing are performed automatically by Jersey. - */ - -@Provider -@Produces(MediaType.APPLICATION_JSON) -public class JSONObjectMapperProvider implements ContextResolver { - - private final ObjectMapper mapper; - - /** - * Pre-instantiate a Jackson ObjectMapper that will be handed off to all incoming Jersey requests, - * and used to construct the ObjectWriters that will produce JSON responses. - */ - public JSONObjectMapperProvider() { - // Create a module, i.e. a group of one or more Jackson extensions. - // Our module includes a single class-serializer relationship. - // Constructors are available for both unnamed, unversioned throwaway modules - // and named, versioned reusable modules. - mapper = new ObjectMapper() - .registerModule(FeedScopedIdSerializer.makeModule()) - .registerModule(new JtsModule()) - .setSerializationInclusion(Include.NON_NULL); // skip null fields - } - - /** - * When serializing any kind of result, use the same ObjectMapper. The "type" parameter will be - * the type of the object being serialized, so you could provide different ObjectMappers for - * different result types. - */ - @Override - public ObjectMapper getContext(Class type) { - return mapper; - } -} diff --git a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java index d4fa5556f7d..26fe971c382 100644 --- a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java +++ b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java @@ -3,14 +3,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import graphql.ExecutionResult; -import org.opentripplanner.ext.restapi.serialization.JSONObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class is responsible for serializing a GraphQL {@link ExecutionResult} into a String, which - * can be returned as the body of the HTTP response. This differs from the mapper provided by {@link - * JSONObjectMapperProvider}, by serializing all fields in the objects, including null fields. + * can be returned as the body of the HTTP response. This differs from the mapper provided by + * the removed REST API, by serializing all fields in the objects, including null fields. */ public class GraphQLResponseSerializer { diff --git a/application/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java b/application/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java index 079dad36f53..4505b7327d7 100644 --- a/application/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java +++ b/application/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java @@ -18,7 +18,6 @@ import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider; import org.opentripplanner.api.common.OTPExceptionMapper; import org.opentripplanner.apis.APIEndpoints; -import org.opentripplanner.ext.restapi.serialization.JSONObjectMapperProvider; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.slf4j.bridge.SLF4JBridgeHandler; @@ -100,8 +99,6 @@ public Set getSingletons() { new OTPExceptionMapper(), // Enable Jackson JSON response serialization new JacksonJsonProvider(), - // Serialize POJOs (unannotated) JSON using Jackson - new JSONObjectMapperProvider(), // Allow injecting the OTP server object into Jersey resource classes makeBinder(contextProvider), // Add performance instrumentation of Jersey requests to micrometer From 187f80a7797ee2450fbe27806e5fecf63728ba38 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Mar 2025 22:44:19 +0100 Subject: [PATCH 03/13] Move mapping code into test --- .../ext/restapi/mapping/EnumMapperTest.java | 3 ++- .../ext/restapi/model/ApiWalkStepTest.java | 1 + .../ext/geocoder/GeocoderResource.java | 5 ++--- .../ext/restapi/model/ApiMoney.java | 3 --- .../apis/gtfs/datafetchers/LegImpl.java | 2 +- .../apis/gtfs}/mapping/LocalDateMapper.java | 2 +- .../algorithm/mapping/SnapshotTestBase.java | 4 ++-- .../restapi/mapping/AbsoluteDirectionMapper.java | 4 ++-- .../mapping}/restapi/mapping/ElevationMapper.java | 2 +- .../mapping}/restapi/mapping/FareMapper.java | 14 +++++++------- .../restapi/mapping/FeedScopedIdMapper.java | 2 +- .../mapping}/restapi/mapping/ItineraryMapper.java | 4 ++-- .../mapping}/restapi/mapping/LegMapper.java | 7 ++++--- .../mapping}/restapi/mapping/ModeMapper.java | 2 +- .../mapping}/restapi/mapping/PlaceMapper.java | 8 ++++---- .../restapi/mapping/RelativeDirectionMapper.java | 4 ++-- .../mapping}/restapi/mapping/VertexTypeMapper.java | 4 ++-- .../mapping}/restapi/mapping/WalkStepMapper.java | 8 ++++---- .../restapi/model/ApiAbsoluteDirection.java | 2 +- .../mapping}/restapi/model/ApiCurrency.java | 2 +- .../mapping}/restapi/model/ApiFareComponent.java | 2 +- .../mapping}/restapi/model/ApiFareProduct.java | 2 +- .../mapping}/restapi/model/ApiFareQualifier.java | 2 +- .../mapping}/restapi/model/ApiItinerary.java | 2 +- .../mapping}/restapi/model/ApiItineraryFares.java | 2 +- .../algorithm/mapping}/restapi/model/ApiLeg.java | 2 +- .../mapping}/restapi/model/ApiLegProducts.java | 2 +- .../algorithm/mapping/restapi/model/ApiMoney.java | 3 +++ .../algorithm/mapping}/restapi/model/ApiPlace.java | 2 +- .../restapi/model/ApiRelativeDirection.java | 2 +- .../restapi/model/ApiVehicleParkingSpaces.java | 2 +- .../model/ApiVehicleParkingWithEntrance.java | 2 +- .../mapping}/restapi/model/ApiVertexType.java | 2 +- .../mapping}/restapi/model/ApiWalkStep.java | 4 +--- 34 files changed, 57 insertions(+), 57 deletions(-) delete mode 100644 application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java rename application/src/{ext/java/org/opentripplanner/ext/restapi => main/java/org/opentripplanner/apis/gtfs}/mapping/LocalDateMapper.java (89%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/AbsoluteDirectionMapper.java (84%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/ElevationMapper.java (89%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/FareMapper.java (83%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/FeedScopedIdMapper.java (81%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/ItineraryMapper.java (93%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/LegMapper.java (93%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/ModeMapper.java (93%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/PlaceMapper.java (92%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/RelativeDirectionMapper.java (88%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/VertexTypeMapper.java (78%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/mapping/WalkStepMapper.java (79%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiAbsoluteDirection.java (72%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiCurrency.java (63%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiFareComponent.java (75%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiFareProduct.java (87%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiFareQualifier.java (77%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiItinerary.java (98%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiItineraryFares.java (90%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiLeg.java (98%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiLegProducts.java (83%) create mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiPlace.java (96%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiRelativeDirection.java (86%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiVehicleParkingSpaces.java (96%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiVehicleParkingWithEntrance.java (98%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiVertexType.java (74%) rename application/src/{ext/java/org/opentripplanner/ext => test/java/org/opentripplanner/routing/algorithm/mapping}/restapi/model/ApiWalkStep.java (97%) diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java index 151c1759a25..27ed2d6b4e7 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java @@ -8,8 +8,9 @@ import java.util.Map; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.opentripplanner.ext.restapi.model.ApiVertexType; import org.opentripplanner.model.plan.VertexType; +import org.opentripplanner.routing.algorithm.mapping.restapi.mapping.VertexTypeMapper; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVertexType; public class EnumMapperTest { diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java index 7f6909bfc2c..68478f6f51d 100644 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java +++ b/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiWalkStep; public class ApiWalkStepTest { diff --git a/application/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java b/application/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java index 1d781f440a5..73d07aadf61 100644 --- a/application/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java +++ b/application/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java @@ -14,7 +14,6 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.mapping.FeedScopedIdMapper; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.site.StopLocation; @@ -102,7 +101,7 @@ private Collection queryStopLocations(String query, boolean autoco sl.getCoordinate().latitude(), sl.getCoordinate().longitude(), stringifyStopLocation(sl), - FeedScopedIdMapper.mapToApi(sl.getId()) + sl.getId().toString() ) ) .collect(Collectors.toList()); @@ -116,7 +115,7 @@ private Collection queryStations(String query, boolean a sc.getCoordinate().latitude(), sc.getCoordinate().longitude(), Objects.toString(sc.getName()), - FeedScopedIdMapper.mapToApi(sc.getId()) + sc.getId().toString() ) ) .collect(Collectors.toList()); diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java b/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java deleted file mode 100644 index a5f3f840bf6..00000000000 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -public record ApiMoney(int cents, ApiCurrency currency) {} diff --git a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java index c102cca9583..7f1d6b2308a 100644 --- a/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java @@ -9,10 +9,10 @@ import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; +import org.opentripplanner.apis.gtfs.mapping.LocalDateMapper; import org.opentripplanner.apis.gtfs.mapping.NumberMapper; import org.opentripplanner.apis.gtfs.mapping.PickDropMapper; import org.opentripplanner.apis.gtfs.mapping.RealtimeStateMapper; -import org.opentripplanner.ext.restapi.mapping.LocalDateMapper; import org.opentripplanner.ext.ridehailing.model.RideEstimate; import org.opentripplanner.ext.ridehailing.model.RideHailingLeg; import org.opentripplanner.framework.graphql.GraphQLUtils; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/LocalDateMapper.java similarity index 89% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java rename to application/src/main/java/org/opentripplanner/apis/gtfs/mapping/LocalDateMapper.java index 09ff79ef9fd..0e3e98ea5cd 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java +++ b/application/src/main/java/org/opentripplanner/apis/gtfs/mapping/LocalDateMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.apis.gtfs.mapping; import java.time.LocalDate; import org.opentripplanner.utils.time.ServiceDateUtils; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java index 208629132f1..8425e221957 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java @@ -39,12 +39,12 @@ import org.opentripplanner.api.parameter.ApiRequestMode; import org.opentripplanner.api.parameter.QualifiedMode; import org.opentripplanner.api.parameter.Qualifier; -import org.opentripplanner.ext.restapi.mapping.ItineraryMapper; -import org.opentripplanner.ext.restapi.model.ApiLeg; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; +import org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ItineraryMapper; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLeg; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java similarity index 84% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java index 8500323c032..6e79906c381 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java @@ -1,7 +1,7 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; -import org.opentripplanner.ext.restapi.model.ApiAbsoluteDirection; import org.opentripplanner.model.plan.AbsoluteDirection; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiAbsoluteDirection; public class AbsoluteDirectionMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java similarity index 89% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java index 192848f04d6..05dbdffaab0 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import org.opentripplanner.model.plan.ElevationProfile; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java similarity index 83% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java index 027c262cb73..b9382cd6e25 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import com.google.common.collect.Multimap; import java.util.Collection; @@ -7,18 +7,18 @@ import java.util.Map; import java.util.Optional; import javax.annotation.Nullable; -import org.opentripplanner.ext.restapi.model.ApiCurrency; -import org.opentripplanner.ext.restapi.model.ApiFareProduct; -import org.opentripplanner.ext.restapi.model.ApiFareQualifier; -import org.opentripplanner.ext.restapi.model.ApiItineraryFares; -import org.opentripplanner.ext.restapi.model.ApiLegProducts; -import org.opentripplanner.ext.restapi.model.ApiMoney; import org.opentripplanner.model.fare.FareMedium; import org.opentripplanner.model.fare.FareProduct; import org.opentripplanner.model.fare.FareProductUse; import org.opentripplanner.model.fare.RiderCategory; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiCurrency; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiFareProduct; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiFareQualifier; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiItineraryFares; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLegProducts; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiMoney; import org.opentripplanner.transit.model.basic.Money; public class FareMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java similarity index 81% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java index efd9ac1a3b5..1a4fc049faf 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java similarity index 93% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java index 2ba9a9b0bb3..77c9c8dee28 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java @@ -1,12 +1,12 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import java.util.Collection; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiItinerary; import org.opentripplanner.model.plan.Itinerary; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiItinerary; public class ItineraryMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java similarity index 93% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java index 8d279f13c59..2d5efac4367 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java @@ -1,18 +1,19 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; -import static org.opentripplanner.ext.restapi.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ElevationMapper.mapElevation; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.List; import java.util.Locale; -import org.opentripplanner.ext.restapi.model.ApiLeg; +import org.opentripplanner.apis.gtfs.mapping.LocalDateMapper; import org.opentripplanner.framework.geometry.EncodedPolyline; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; import org.opentripplanner.model.plan.TransitLeg; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLeg; public class LegMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java similarity index 93% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java index 12ff19dc971..2d35b875fb9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.basic.TransitMode; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java similarity index 92% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java index 768cd396eb9..8571e6e4003 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -8,13 +8,13 @@ import java.util.Locale; import java.util.Optional; import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiPlace; -import org.opentripplanner.ext.restapi.model.ApiVehicleParkingSpaces; -import org.opentripplanner.ext.restapi.model.ApiVehicleParkingWithEntrance; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.VehicleParkingWithEntrance; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiPlace; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVehicleParkingSpaces; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVehicleParkingWithEntrance; import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.transit.model.site.RegularStop; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java similarity index 88% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java index ab9abaa4481..c7042e2f24b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java @@ -1,7 +1,7 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; -import org.opentripplanner.ext.restapi.model.ApiRelativeDirection; import org.opentripplanner.model.plan.RelativeDirection; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiRelativeDirection; public class RelativeDirectionMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java similarity index 78% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java index 5f59ea4fd57..d081762b126 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java @@ -1,7 +1,7 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; -import org.opentripplanner.ext.restapi.model.ApiVertexType; import org.opentripplanner.model.plan.VertexType; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVertexType; public class VertexTypeMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java similarity index 79% rename from application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java index d1814511307..31a3cd89aa8 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java @@ -1,14 +1,14 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; -import static org.opentripplanner.ext.restapi.mapping.ElevationMapper.mapElevation; -import static org.opentripplanner.ext.restapi.mapping.RelativeDirectionMapper.mapRelativeDirection; +import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.RelativeDirectionMapper.mapRelativeDirection; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.ext.restapi.model.ApiWalkStep; import org.opentripplanner.model.plan.WalkStep; +import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiWalkStep; public class WalkStepMapper { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java similarity index 72% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java index ffa00cbc54e..b065c9fd181 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * An absolute cardinal or intermediate direction. diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java similarity index 63% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java index b3cff1eaa93..8cef5a54bb0 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; public record ApiCurrency( String currency, diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java similarity index 75% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java index e26f859c4f2..012fefa4446 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.List; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java similarity index 87% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java index af8561b73cb..2f8579ec6bf 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * A Fares V2 product. This is a type of ticket or monthly pass that customers can buy. diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java similarity index 77% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java index 94a3731863a..cfa380442f9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * Qualifiers for Fares V2 fare products. Qualifiers can be rider categories (youth, senior, veteran) or diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java similarity index 98% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java index bef710cd99c..6bd672b5c1b 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.ArrayList; import java.util.Calendar; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java similarity index 90% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java index a7140e59d4d..93dae9294b4 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.List; import java.util.Map; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java similarity index 98% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java index 0779755fd85..91e3c1b79d0 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.Calendar; import java.util.List; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java similarity index 83% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java index abd4643100b..b2fe01acf21 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.Collection; import java.util.List; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java new file mode 100644 index 00000000000..8f0db62cb1b --- /dev/null +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java @@ -0,0 +1,3 @@ +package org.opentripplanner.routing.algorithm.mapping.restapi.model; + +public record ApiMoney(int cents, ApiCurrency currency) {} diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java similarity index 96% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java index 7cfe3bc7c22..b1deb807d15 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.Calendar; import java.util.List; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java similarity index 86% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java index 02a530f06de..35be52b0d41 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * Represents a turn direction, relative to the current heading. diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java similarity index 96% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java index bcb10e70f0f..f6b17a08a08 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; public class ApiVehicleParkingSpaces { diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java similarity index 98% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java index 79c5decbaeb..3a2592ff721 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; import java.util.List; diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java similarity index 74% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java index 595f0628e0a..162c2cfd08c 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.model; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * Represent type of vertex, used in Place aka from, to in API for easier client side localization diff --git a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java similarity index 97% rename from application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java index 526c8a65941..82ef12e41b9 100644 --- a/application/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java @@ -1,6 +1,4 @@ -package org.opentripplanner.ext.restapi.model; - -import java.util.List; +package org.opentripplanner.routing.algorithm.mapping.restapi.model; /** * Represents one instruction in walking directions. Three examples from New York City: From bfa8a63eabefb28397ad083004ae46e7fbaa1261 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Mar 2025 22:46:30 +0100 Subject: [PATCH 04/13] Remove REST API tests --- .../ext/restapi/mapping/EnumMapperTest.java | 50 ---- .../ext/restapi/model/ApiWalkStepTest.java | 39 --- .../restapi/parameter/ApiRequestModeTest.java | 16 -- .../parameter/QualifiedModeSetTest.java | 234 ------------------ .../restapi/parameter/QualifiedModeTest.java | 38 --- 5 files changed, 377 deletions(-) delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java delete mode 100644 application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java deleted file mode 100644 index 27ed2d6b4e7..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.opentripplanner.ext.restapi.mapping; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import org.junit.jupiter.api.Test; -import org.opentripplanner.model.plan.VertexType; -import org.opentripplanner.routing.algorithm.mapping.restapi.mapping.VertexTypeMapper; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVertexType; - -public class EnumMapperTest { - - @Test - public void testVertexTypeMapping() { - verifyExplicitMatch( - VertexType.class, - ApiVertexType.class, - Map.of( - VertexType.NORMAL, - ApiVertexType.NORMAL, - VertexType.TRANSIT, - ApiVertexType.TRANSIT, - VertexType.VEHICLEPARKING, - ApiVertexType.BIKEPARK, - VertexType.VEHICLERENTAL, - ApiVertexType.BIKESHARE - ), - VertexTypeMapper::mapVertexType - ); - } - - private , A extends Enum> void verifyExplicitMatch( - Class domainClass, - Class apiClass, - Map mappings, - Function mapper - ) { - List rest = new ArrayList<>(List.of(apiClass.getEnumConstants())); - for (D it : domainClass.getEnumConstants()) { - A result = mapper.apply(it); - assertEquals(mappings.get(it), result, "Map " + it); - rest.remove(result); - } - assertTrue(rest.isEmpty()); - } -} diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java deleted file mode 100644 index 68478f6f51d..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.opentripplanner.ext.restapi.model; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiWalkStep; - -public class ApiWalkStepTest { - - private static final String NO_PARENS_STREET_NAME = "a normal name"; - private static final String START_WITH_PARENS_STREET_NAME = "(start with paren)"; - private static final String PARENS_STREET_NAME = "a normal name (paren)"; - - private ApiWalkStep step; - - @BeforeEach - public void init() { - step = new ApiWalkStep(); - } - - @Test - public void testNameNoParensWithNoParensName() { - step.streetName = NO_PARENS_STREET_NAME; - assertEquals(NO_PARENS_STREET_NAME, step.streetNameNoParens()); - } - - @Test - public void testNameNoParensWithNameStaringWithParens() { - step.streetName = START_WITH_PARENS_STREET_NAME; - assertEquals(START_WITH_PARENS_STREET_NAME, step.streetNameNoParens()); - } - - @Test - public void testNameNoParensWithNameWithParens() { - step.streetName = PARENS_STREET_NAME; - assertEquals(NO_PARENS_STREET_NAME, step.streetNameNoParens()); - } -} diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java deleted file mode 100644 index 29cd6b5715c..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.opentripplanner.ext.restapi.parameter; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.opentripplanner.transit.model.basic.TransitMode.CARPOOL; - -import java.util.List; -import org.junit.jupiter.api.Test; -import org.opentripplanner.api.parameter.ApiRequestMode; - -class ApiRequestModeTest { - - @Test - void carpool() { - assertEquals(List.of(CARPOOL), ApiRequestMode.CARPOOL.getTransitModes()); - } -} diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java deleted file mode 100644 index 92adf1f823b..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java +++ /dev/null @@ -1,234 +0,0 @@ -package org.opentripplanner.ext.restapi.parameter; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.opentripplanner.routing.api.request.StreetMode.BIKE; -import static org.opentripplanner.routing.api.request.StreetMode.BIKE_RENTAL; -import static org.opentripplanner.routing.api.request.StreetMode.BIKE_TO_PARK; -import static org.opentripplanner.routing.api.request.StreetMode.CAR_HAILING; -import static org.opentripplanner.routing.api.request.StreetMode.FLEXIBLE; -import static org.opentripplanner.routing.api.request.StreetMode.WALK; -import static org.opentripplanner.transit.model.basic.TransitMode.AIRPLANE; -import static org.opentripplanner.transit.model.basic.TransitMode.BUS; -import static org.opentripplanner.transit.model.basic.TransitMode.CABLE_CAR; -import static org.opentripplanner.transit.model.basic.TransitMode.CARPOOL; -import static org.opentripplanner.transit.model.basic.TransitMode.COACH; -import static org.opentripplanner.transit.model.basic.TransitMode.FERRY; -import static org.opentripplanner.transit.model.basic.TransitMode.FUNICULAR; -import static org.opentripplanner.transit.model.basic.TransitMode.GONDOLA; -import static org.opentripplanner.transit.model.basic.TransitMode.MONORAIL; -import static org.opentripplanner.transit.model.basic.TransitMode.RAIL; -import static org.opentripplanner.transit.model.basic.TransitMode.SUBWAY; -import static org.opentripplanner.transit.model.basic.TransitMode.TRAM; -import static org.opentripplanner.transit.model.basic.TransitMode.TROLLEYBUS; - -import jakarta.ws.rs.BadRequestException; -import java.util.Set; -import org.junit.jupiter.api.Test; -import org.opentripplanner.api.parameter.QualifiedMode; -import org.opentripplanner.api.parameter.QualifiedModeSet; -import org.opentripplanner.routing.api.request.RequestModes; -import org.opentripplanner.transit.model.basic.TransitMode; - -public class QualifiedModeSetTest { - - @Test - public void emptyModeSet() { - assertThrows(BadRequestException.class, () -> new QualifiedModeSet("")); - } - - @Test - public void singleWalk() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK"); - assertEquals(Set.of(new QualifiedMode("WALK")), modeSet.qModes); - assertEquals( - RequestModes.of() - .withAccessMode(WALK) - .withEgressMode(WALK) - .withDirectMode(WALK) - .withTransferMode(WALK) - .build(), - modeSet.getRequestModes() - ); - } - - @Test - public void multipleWalks() { - QualifiedModeSet modeSet = new QualifiedModeSet(new String[] { "WALK", "WALK", "WALK" }); - assertEquals(Set.of(new QualifiedMode("WALK")), modeSet.qModes); - assertEquals(RequestModes.of().withAllStreetModes(WALK).build(), modeSet.getRequestModes()); - } - - @Test - public void singleWalkAndBicycle() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK,BICYCLE"); - assertEquals(Set.of(new QualifiedMode("WALK"), new QualifiedMode("BICYCLE")), modeSet.qModes); - assertEquals(RequestModes.of().withAllStreetModes(BIKE).build(), modeSet.getRequestModes()); - } - - @Test - public void singleWalkAndBicycleRental() { - QualifiedModeSet modeSet = new QualifiedModeSet(new String[] { "WALK", "BICYCLE_RENT" }); - assertEquals( - Set.of(new QualifiedMode("WALK"), new QualifiedMode("BICYCLE_RENT")), - modeSet.qModes - ); - assertEquals( - RequestModes.of().withAllStreetModes(BIKE_RENTAL).build(), - modeSet.getRequestModes() - ); - } - - @Test - public void singleWalkAndBicycleToPark() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK,BICYCLE_PARK"); - assertEquals( - Set.of(new QualifiedMode("WALK"), new QualifiedMode("BICYCLE_PARK")), - modeSet.qModes - ); - assertEquals( - RequestModes.of() - .withAccessMode(BIKE_TO_PARK) - .withEgressMode(WALK) - .withDirectMode(BIKE_TO_PARK) - .withTransferMode(WALK) - .build(), - modeSet.getRequestModes() - ); - } - - @Test - public void multipleWalksAndBicycle() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK,BICYCLE,WALK"); - assertEquals(Set.of(new QualifiedMode("WALK"), new QualifiedMode("BICYCLE")), modeSet.qModes); - assertEquals( - RequestModes.of() - .withAccessMode(BIKE) - .withEgressMode(BIKE) - .withDirectMode(BIKE) - .withTransferMode(BIKE) - .build(), - modeSet.getRequestModes() - ); - } - - @Test - public void multipleNonWalkModes() { - assertThrows(IllegalStateException.class, () -> - new QualifiedModeSet("WALK,BICYCLE,CAR").getRequestModes() - ); - } - - @Test - public void allFlexible() { - QualifiedModeSet modeSet = new QualifiedModeSet("FLEX_ACCESS,FLEX_EGRESS,FLEX_DIRECT"); - assertEquals( - Set.of( - new QualifiedMode("FLEX_DIRECT"), - new QualifiedMode("FLEX_EGRESS"), - new QualifiedMode("FLEX_ACCESS") - ), - modeSet.qModes - ); - assertEquals( - RequestModes.of() - .withAccessMode(FLEXIBLE) - .withEgressMode(FLEXIBLE) - .withDirectMode(FLEXIBLE) - .withTransferMode(WALK) - .build(), - modeSet.getRequestModes() - ); - } - - @Test - public void bicycleToParkWithFlexibleEgress() { - QualifiedModeSet modeSet = new QualifiedModeSet("BICYCLE_PARK,FLEX_EGRESS"); - assertEquals( - Set.of(new QualifiedMode("FLEX_EGRESS"), new QualifiedMode("BICYCLE_PARK")), - modeSet.qModes - ); - assertEquals( - RequestModes.of() - .withAccessMode(BIKE_TO_PARK) - .withEgressMode(FLEXIBLE) - .withDirectMode(BIKE_TO_PARK) - .withTransferMode(WALK) - .build(), - modeSet.getRequestModes() - ); - } - - @Test - void walkTransitExcludesCarpool() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK,TRANSIT"); - assertEquals(Set.of(new QualifiedMode("WALK"), new QualifiedMode("TRANSIT")), modeSet.qModes); - - Set expected = Set.of( - TransitMode.RAIL, - TransitMode.COACH, - SUBWAY, - BUS, - TRAM, - FERRY, - AIRPLANE, - CABLE_CAR, - GONDOLA, - FUNICULAR, - TROLLEYBUS, - MONORAIL, - TransitMode.TAXI - ); - - var mainModes = Set.copyOf(modeSet.getTransitModes()); - - assertEquals(mainModes, expected); - } - - @Test - void specificallyRequestCarpool() { - QualifiedModeSet modeSet = new QualifiedModeSet("WALK,TRANSIT,CARPOOL"); - - Set expected = Set.of( - TransitMode.RAIL, - TransitMode.COACH, - SUBWAY, - BUS, - TRAM, - FERRY, - AIRPLANE, - CABLE_CAR, - GONDOLA, - FUNICULAR, - TROLLEYBUS, - CARPOOL, - MONORAIL, - TransitMode.TAXI - ); - - var mainModes = Set.copyOf(modeSet.getTransitModes()); - - assertEquals(mainModes, expected); - } - - @Test - void carHail() { - var modeSet = new QualifiedModeSet("CAR_HAIL"); - assertTrue(modeSet.getTransitModes().isEmpty()); - - assertEquals(WALK, modeSet.getRequestModes().directMode); - assertEquals(CAR_HAILING, modeSet.getRequestModes().accessMode); - assertEquals(CAR_HAILING, modeSet.getRequestModes().egressMode); - } - - @Test - void carHailWithTransit() { - var modeSet = new QualifiedModeSet("CAR_HAIL,BUS,RAIL"); - assertEquals(Set.of(BUS, RAIL), Set.copyOf(modeSet.getTransitModes())); - - assertEquals(WALK, modeSet.getRequestModes().directMode); - assertEquals(CAR_HAILING, modeSet.getRequestModes().accessMode); - assertEquals(CAR_HAILING, modeSet.getRequestModes().egressMode); - } -} diff --git a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java b/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java deleted file mode 100644 index a89c2da8247..00000000000 --- a/application/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.opentripplanner.ext.restapi.parameter; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import java.util.Arrays; -import java.util.Set; -import java.util.stream.Collectors; -import org.junit.jupiter.api.Test; -import org.opentripplanner.api.parameter.ApiRequestMode; -import org.opentripplanner.api.parameter.QualifiedMode; -import org.opentripplanner.api.parameter.Qualifier; - -public class QualifiedModeTest { - - @Test - public void test() { - Set ALL_QUALIFIERS = Arrays.stream(Qualifier.values()).collect(Collectors.toSet()); - String ALL_QUALIFIERS_STR = ALL_QUALIFIERS.stream() - .map(Enum::name) - .reduce((i, j) -> i + "_" + j) - .orElse("X"); - - for (ApiRequestMode mode : ApiRequestMode.values()) { - assertModeEquals(new QualifiedMode(mode.name()), mode, Set.of()); - assertModeEquals(new QualifiedMode(mode + "_RENT"), mode, Set.of(Qualifier.RENT)); - assertModeEquals(new QualifiedMode(mode + "_" + ALL_QUALIFIERS_STR), mode, ALL_QUALIFIERS); - } - } - - private void assertModeEquals( - QualifiedMode qMode, - ApiRequestMode mode, - Set qualifiers - ) { - assertEquals(qMode.mode, mode); - assertEquals(qMode.qualifiers, qualifiers); - } -} From e4d08478a7a1333421711e4c0bb9638234c386af Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 21 Mar 2025 22:49:41 +0100 Subject: [PATCH 05/13] Update docs --- doc/user/apis/Apis.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/doc/user/apis/Apis.md b/doc/user/apis/Apis.md index 9e8f31f6eeb..262d389e3c0 100644 --- a/doc/user/apis/Apis.md +++ b/doc/user/apis/Apis.md @@ -20,10 +20,9 @@ OTP instance and reading live application metrics. The [Geocoder API](../sandbox/GeocoderAPI.md) allows you to geocode stop names and codes. -## Legacy APIs (to be removed) +## Removed legacy APIs The OTP REST API used to power many apps and frontends. For years it was the only way to access OTP programmatically. -Over time it has been replaced by the GraphQL APIs and is now disabled by default -and will eventually be removed completely. It's therefore not recommended to use it. +Over time it has been replaced by the GraphQL APIs and was removed in 2025. From 69a26e5fbc38816e404786f23b0e109339aa6f08 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Mar 2025 16:06:18 +0100 Subject: [PATCH 06/13] Remove documentation mentioning REST --- .../opentripplanner/api/common/LocationStringParser.java | 4 ++-- .../opentripplanner/api/parameter/QualifiedModeSet.java | 5 +---- .../java/org/opentripplanner/api/resource/DebugOutput.java | 2 +- .../opentripplanner/framework/application/OTPFeature.java | 5 ----- .../framework/graphql/GraphQLResponseSerializer.java | 3 +-- .../standalone/config/routerconfig/ServerConfig.java | 2 +- .../opentripplanner/transit/model/site/StopLocation.java | 5 +++-- .../opentripplanner/transit/model/timetable/Direction.java | 4 +--- doc/templates/BuildConfiguration.md | 7 +++---- doc/user/BuildConfiguration.md | 7 +++---- doc/user/Configuration.md | 1 - doc/user/RouterConfiguration.md | 2 +- 12 files changed, 17 insertions(+), 30 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java b/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java index 39ea12301db..27e26e176ae 100644 --- a/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java +++ b/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java @@ -6,10 +6,10 @@ import org.opentripplanner.transit.model.framework.FeedScopedId; /** - * This class is used by the REST API to parse strings representing the from and to places for a + * This class is used by the GTFS GraphQL API to parse strings representing the from and to places for a * search. These strings can contain a user-specified name for the location, as well as a latitude * and longitude or a stop ID. We'd rather not be parsing multiple data items out of a single - * string, and will avoid doing so in OTP2, but this is how the OTP1 REST API works and we're + * string, and avoid doing so in newer API queroes, but this is how the old queries work and we're * keeping this parsing logic so we can keep providing that legacy API. *

* These from/to strings are in the following format: An optional place name followed by two colons, diff --git a/application/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java b/application/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java index 6a4dc756640..5153cdce955 100644 --- a/application/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java +++ b/application/src/main/java/org/opentripplanner/api/parameter/QualifiedModeSet.java @@ -44,10 +44,7 @@ public RequestModes getRequestModes() { // This is a best effort at mapping QualifiedModes to access/egress/direct StreetModes. // It was unclear what exactly each combination of QualifiedModes should mean. - // TODO OTP2 This should either be updated with missing modes or the REST API should be - // redesigned to better reflect the mode structure used in RequestModes. - // Also, some StreetModes are implied by combination of QualifiedModes and are not covered - // in this mapping. + // TODO OTP2 Once all GraphQL queries have stopped using this logic, this class can be removed. QualifiedMode requestMode = null; List filteredModes = qModes diff --git a/application/src/main/java/org/opentripplanner/api/resource/DebugOutput.java b/application/src/main/java/org/opentripplanner/api/resource/DebugOutput.java index a92989c324a..818b72fc6b3 100644 --- a/application/src/main/java/org/opentripplanner/api/resource/DebugOutput.java +++ b/application/src/main/java/org/opentripplanner/api/resource/DebugOutput.java @@ -1,7 +1,7 @@ package org.opentripplanner.api.resource; /** - * Holds information to be included in the REST Response for debugging and profiling purposes. + * Holds information to be included in the response for debugging and profiling purposes. */ public class DebugOutput { diff --git a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index b7da4387bd0..73189170064 100644 --- a/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/application/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -127,11 +127,6 @@ public enum OTPFeature { "When routing with ignoreRealtimeUpdates=true, add an extra step which populates results with real-time data" ), ReportApi(false, true, "Enable the report API."), - RestAPIPassInDefaultConfigAsJson( - false, - false, - "Enable a default RouteRequest to be passed in as JSON on the REST API - FOR DEBUGGING ONLY!" - ), SandboxAPIGeocoder(false, true, "Enable the Geocoder API."), SandboxAPIMapboxVectorTilesApi(false, true, "Enable Mapbox vector tiles API."), SandboxAPIParkAndRideApi(false, true, "Enable park-and-ride endpoint."), diff --git a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java index 26fe971c382..f924db6835e 100644 --- a/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java +++ b/application/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java @@ -8,8 +8,7 @@ /** * This class is responsible for serializing a GraphQL {@link ExecutionResult} into a String, which - * can be returned as the body of the HTTP response. This differs from the mapper provided by - * the removed REST API, by serializing all fields in the objects, including null fields. + * can be returned as the body of the HTTP response. */ public class GraphQLResponseSerializer { diff --git a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/ServerConfig.java b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/ServerConfig.java index 1cb4bd33e14..3a9e1b19e67 100644 --- a/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/ServerConfig.java +++ b/application/src/main/java/org/opentripplanner/standalone/config/routerconfig/ServerConfig.java @@ -39,7 +39,7 @@ public ServerConfig(String parameterName, NodeAdapter root) { """ This timeout limits the server-side processing time for a given API request. This does not include network latency nor waiting time in the HTTP server thread pool. The default value is - `-1s`(no timeout). The timeout is applied to all APIs (REST, Transmodel & GTFS GraphQL). + `-1s`(no timeout). The timeout is applied to all APIs (Transmodel & GTFS GraphQL). The timeout is not enforced when the parallel routing OTP feature is in use. """ ) diff --git a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java index c4e704b954d..1e8c4865383 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java +++ b/application/src/main/java/org/opentripplanner/transit/model/site/StopLocation.java @@ -92,8 +92,9 @@ default Accessibility getWheelchairAccessibility() { } /** - * This is to ensure backwards compatibility with the REST API, which expects the GTFS zone_id - * which only permits one zone per stop. + * This was to ensure backwards compatibility with the REST API, which expects the GTFS zone_id + * which only permits one zone per stop. It has now spread to several other APIs but can be removed + * when there is a suitable replacement. */ @Nullable default String getFirstZoneAsString() { diff --git a/application/src/main/java/org/opentripplanner/transit/model/timetable/Direction.java b/application/src/main/java/org/opentripplanner/transit/model/timetable/Direction.java index c18f46db2ff..532d646fc42 100644 --- a/application/src/main/java/org/opentripplanner/transit/model/timetable/Direction.java +++ b/application/src/main/java/org/opentripplanner/transit/model/timetable/Direction.java @@ -2,9 +2,7 @@ /** * The direction of travel for a TripPattern. This is mapped 1-to-1 in NeTEx, while in GTFS only - * values 0 and 1 are available, so they are mapped to OUTBOUND and INBOUND. When mapping from the - * model to the REST API, CLOCKWISE and ANTICLOCKWISE are also mapped to 0 and 1 (as they would also - * fit the description in the GTFS specification). + * values 0 and 1 are available, so they are mapped to OUTBOUND and INBOUND. */ public enum Direction { UNKNOWN(-1), diff --git a/doc/templates/BuildConfiguration.md b/doc/templates/BuildConfiguration.md index 3d1cd5a1db3..3c776a5a838 100644 --- a/doc/templates/BuildConfiguration.md +++ b/doc/templates/BuildConfiguration.md @@ -161,10 +161,9 @@ for detailed discussion of this. OTP allows you to adjust the elevation values reported in API responses in two ways. The first way is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value -in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid -difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java) -field. Using a single value can be sufficient for smaller OTP deployments, but might result in +in the OTP client where appropriate to display elevations above sea level. + +Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/user/BuildConfiguration.md b/doc/user/BuildConfiguration.md index c8d23ef4c5c..38a0da0bcb6 100644 --- a/doc/user/BuildConfiguration.md +++ b/doc/user/BuildConfiguration.md @@ -273,10 +273,9 @@ for detailed discussion of this. OTP allows you to adjust the elevation values reported in API responses in two ways. The first way is to store ellipsoid (GPS) elevation values internally, but apply a single geoid difference value -in the OTP client where appropriate to display elevations above sea level. This ellipsoid to geoid -difference is returned in each trip plan response in the -[ElevationMetadata](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/application/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java) -field. Using a single value can be sufficient for smaller OTP deployments, but might result in +in the OTP client where appropriate to display elevations above sea level. + +Using a single value can be sufficient for smaller OTP deployments, but might result in incorrect values at the edges of larger OTP deployments. If your OTP instance uses this, it is recommended to set a default request value in the `router-config.json` file as follows: diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index 6f37e824afc..5fa0218ec33 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -250,7 +250,6 @@ Here is a list of all features which can be toggled on/off and their default val | `MultiCriteriaGroupMaxFilter` | Keep the best itinerary with respect to each criteria used in the transit-routing search. For example the itinerary with the lowest cost, fewest transfers, and each unique transit-group (transit-group-priority) is kept, even if the max-limit is exceeded. This is turned off by default for now, until this feature is well tested. | | | | `RealtimeResolver` | When routing with ignoreRealtimeUpdates=true, add an extra step which populates results with real-time data | | ✓️ | | `ReportApi` | Enable the report API. | | ✓️ | -| `RestAPIPassInDefaultConfigAsJson` | Enable a default RouteRequest to be passed in as JSON on the REST API - FOR DEBUGGING ONLY! | | | | `SandboxAPIGeocoder` | Enable the Geocoder API. | | ✓️ | | `SandboxAPIMapboxVectorTilesApi` | Enable Mapbox vector tiles API. | | ✓️ | | `SandboxAPIParkAndRideApi` | Enable park-and-ride endpoint. | | ✓️ | diff --git a/doc/user/RouterConfiguration.md b/doc/user/RouterConfiguration.md index dd4a86b57c0..37a46986939 100644 --- a/doc/user/RouterConfiguration.md +++ b/doc/user/RouterConfiguration.md @@ -134,7 +134,7 @@ Maximum processing time for an API request This timeout limits the server-side processing time for a given API request. This does not include network latency nor waiting time in the HTTP server thread pool. The default value is -`-1s`(no timeout). The timeout is applied to all APIs (REST, Transmodel & GTFS GraphQL). +`-1s`(no timeout). The timeout is applied to all APIs (Transmodel & GTFS GraphQL). The timeout is not enforced when the parallel routing OTP feature is in use. From 678ec80e678931c7f9f50e91ed6170cb1322c5dc Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Mar 2025 22:25:59 +0100 Subject: [PATCH 07/13] Update version comparison --- doc/user/Version-Comparison.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/doc/user/Version-Comparison.md b/doc/user/Version-Comparison.md index bc4a7caf5d8..4aa7f16dab3 100644 --- a/doc/user/Version-Comparison.md +++ b/doc/user/Version-Comparison.md @@ -104,13 +104,6 @@ virtual servers, then switching a load balancer over to those new servers. Becau is complex and exposes potentially damaging functionality over the network, it has been removed from OTP2 to simplify the code base and make it easier to reason about security. -### Routing request parameters - -Less parameters are available on the OTP2 REST API than in OTP1. Often there is no practical loss of -functionality, just a different way of expressing things due to the new routing algorithms. A -summary of parameters that have been removed and their replacements can be found in the [migration -guide](Version-Comparison.md#migration-guide) - ## OTP Trip planning and Transit index APIs OTP1 had two APIs for trip planning, the REST API and an GraphQL API (early version of the @@ -119,7 +112,6 @@ GraphQL API, the only supported way of sending requests to the OTP routing engin Details of those two APIs are available at the following pages: - - [GTFS GraphQL API](apis/GTFS-GraphQL-API.md) - HSL's GraphQL API used by the Digitransit project. - [Transmodel API](apis/TransmodelApi.md) - Entur's Transmodel API @@ -128,6 +120,8 @@ The plan is to merge the two APIs above, clean it up and make it the new officia uses GTFS terminology, while the Entur API is Transmodel (NeTEx) based. Both APIs are similar in semantics and structure, and provide the same functionality. +The REST API of OTP1 has been permanently removed in 2025. + ## Additional characteristics added in OTP2 **Sandbox Extensions** OTP2's Sandbox system allows for plugins, proprietary extensions, and From 0e1b017b4c1e8c317b1606132aa1dd9288d65021 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 27 Mar 2025 22:34:24 +0100 Subject: [PATCH 08/13] Update more docs --- doc/user/Frontends.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/user/Frontends.md b/doc/user/Frontends.md index ac793a4fc85..78f9b99688a 100644 --- a/doc/user/Frontends.md +++ b/doc/user/Frontends.md @@ -84,9 +84,9 @@ That said, as of this writing (early 2024) it may now be possible to get a minim The history of the more widely used OpenTripPlanner interfaces is roughly as follows: - From the beginning, OpenTripPlanner included a Javascript UI module. This jQuery and Backbone based UI was deployed as the main interface in several locations in the early to mid 2010s. -- As of early 2024, this UI is still present in the main OpenTripPlanner repository under `src/client`, but is not intended for use by the general public. It has long been regarded as a "debug" UI, serving as a built-in, readily available and familiar interface for OTP developers to test and debug the behavior of the backend. It uses the older OTP REST API which is slated for deprecation. +- As of early 2024, this UI is still present in the main OpenTripPlanner repository under `src/client`, but is not intended for use by the general public. It has long been regarded as a "debug" UI, serving as a built-in, readily available and familiar interface for OTP developers to test and debug the behavior of the backend. It uses the older OTP REST API which is now removed. - In the late 2010s people started developing a new React-based UI as a more modular, modern interface for public consumption. This project is located at https://github.com/opentripplanner/otp-react-redux under the OpenTripPlanner Github organization, and is developed and maintainted by Arcadis IBI. - Some React components were factored out of that UI project, allowing them to be integrated in different ways with different OTP deployments. This component library is in a separate repository at https://github.com/opentripplanner/otp-ui. Likewise, it is developed and maintained by Arcadis IBI. - Meanwhile, starting in 2014, HSL (the Helsinki Regional Transport Authority) and Finntrafic (the Finnish national transportation authority) began the Digitransit project, a set of open-source microservices to replace their existing national and regional scale trip planners. This includes a Javascript web UI module. In addition to Finland, the Digitransit system has been deployed in various places around the world including Germany. -- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/client`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which is expected to fully replace the older REST API. +- As of 2024, a completely new debug UI (again, intended for developer use rather than public consumption) is being developed in the main OpenTripPlanner repository under `src/client`. This new UI follows a more conventional contemporary Javascript development style, and uses the most recent OpenTripPlanner GraphQL API which has fully replaced the now-removed REST API. - In June 2024, the default was swapped and the new GraphQL-based one is now the default with the old one being available at `http://localhost:8080/classic-debug/` \ No newline at end of file From edeaccf117f28ea122e9b5279a9bebacd176d478 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 28 Mar 2025 08:14:36 +0100 Subject: [PATCH 09/13] Remove more references to REST --- doc/templates/Configuration.md | 4 ++-- doc/user/Configuration.md | 4 ++-- doc/user/Developers-Guide.md | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/templates/Configuration.md b/doc/templates/Configuration.md index 4aeaa1ff7af..dc1b85a8509 100644 --- a/doc/templates/Configuration.md +++ b/doc/templates/Configuration.md @@ -102,9 +102,9 @@ The project information variables available are: All three configuration files have an optional `configVersion` property. The property can be used to version the configuration in a deployment pipeline. The `configVersion` is not used by OTP in any -way, but is logged at startup and is available as part of the _server-info_ data in the REST API. +way, but is logged at startup and is available as part of the _server-info_ data in the API. The intended usage is to be able to check which version of the configuration the graph was build -with and which version the router uses. In an deployment with many OTP instances it can be useful to +with and which version the router uses. In a deployment with many OTP instances it can be useful to ask an instance about the version, instead of tracking the deployment pipeline backwards to find the version used. How you inject a version into the configuration file is up to you, but you can do it in your build-pipeline, at deployment time or use system environment variable substitution. diff --git a/doc/user/Configuration.md b/doc/user/Configuration.md index 5fa0218ec33..b0adad5439e 100644 --- a/doc/user/Configuration.md +++ b/doc/user/Configuration.md @@ -129,9 +129,9 @@ The project information variables available are: All three configuration files have an optional `configVersion` property. The property can be used to version the configuration in a deployment pipeline. The `configVersion` is not used by OTP in any -way, but is logged at startup and is available as part of the _server-info_ data in the REST API. +way, but is logged at startup and is available as part of the _server-info_ data in the API. The intended usage is to be able to check which version of the configuration the graph was build -with and which version the router uses. In an deployment with many OTP instances it can be useful to +with and which version the router uses. In a deployment with many OTP instances it can be useful to ask an instance about the version, instead of tracking the deployment pipeline backwards to find the version used. How you inject a version into the configuration file is up to you, but you can do it in your build-pipeline, at deployment time or use system environment variable substitution. diff --git a/doc/user/Developers-Guide.md b/doc/user/Developers-Guide.md index 700e869105a..ba49b52aee0 100644 --- a/doc/user/Developers-Guide.md +++ b/doc/user/Developers-Guide.md @@ -211,10 +211,10 @@ process is handled by the Sonatype Nexus Staging plugin, which is no longer conf OpenTripPlanner POM. This step currently requires making a few significant manual modifications to the POM. -We no longer trigger deployment of artifacts to Maven Central or deployment of REST API -documentation to AWS automatically in our build scripts (GitHub Actions). These steps are prone to -failure and require storing a lot of infrequently used secret information in the repo and -environment variables on GitHub. Our releases are currently not very frequent so we just carry out -these steps manually by following the checklist. We aim to make a release every 6 months. +We no longer trigger deployment of artifacts to Maven Central automatically in our build scripts +(GitHub Actions). These steps are prone to failure and require storing a lot of infrequently used +secret information in the repo and environment variables on GitHub. Our releases are currently not +very frequent so we just carry out these steps manually by following the checklist. We aim to make +a release every 6 months. Use the [Release Checklist](ReleaseChecklist.md) to perform the release. From b891cf8f070b2229315ec61435cb9ddc9a42caab Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 28 Mar 2025 13:11:11 +0100 Subject: [PATCH 10/13] Remove reference to REST --- .../routing/algorithm/mapping/SnapshotTestBase.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java index 8425e221957..4b471e37bc0 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java @@ -273,8 +273,7 @@ private String createDebugUrlForRequest(RouteRequest request) { .atZone(serverContext().transitService().getTimeZone()) .toLocalDateTime(); - // TODO: 2022-12-20 filters: this is for REST so there should not be more than one filter - // but technically this is not right + // TODO: 2022-12-20 filters: there should not be more than one filter but technically this is not right List transportModes = new ArrayList<>(); var filter = request.journey().transit().filters().get(0); if (filter instanceof TransitFilterRequest filterRequest) { From 08ca6891f42473e4368f3ef2af91dc05c5f09359 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 28 Mar 2025 15:39:53 +0100 Subject: [PATCH 11/13] Apply review feedbacl Co-authored-by: Henrik Abrahamsson <127481124+habrahamsson-skanetrafiken@users.noreply.github.com> --- .../org/opentripplanner/api/common/LocationStringParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java b/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java index 27e26e176ae..9f65dd24661 100644 --- a/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java +++ b/application/src/main/java/org/opentripplanner/api/common/LocationStringParser.java @@ -9,7 +9,7 @@ * This class is used by the GTFS GraphQL API to parse strings representing the from and to places for a * search. These strings can contain a user-specified name for the location, as well as a latitude * and longitude or a stop ID. We'd rather not be parsing multiple data items out of a single - * string, and avoid doing so in newer API queroes, but this is how the old queries work and we're + * string, and avoid doing so in newer API queries, but this is how the old queries work and we're * keeping this parsing logic so we can keep providing that legacy API. *

* These from/to strings are in the following format: An optional place name followed by two colons, From 36e529e0af22831804eecf49bd0029e89d83e6c0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 28 Mar 2025 15:50:38 +0100 Subject: [PATCH 12/13] Make types package-private and deprecate them --- .../algorithm/mapping/SnapshotTestBase.java | 4 ++-- .../mapping/AbsoluteDirectionMapper.java | 7 ++++--- .../mapping/ElevationMapper.java | 5 +++-- .../mapping/FareMapper.java | 17 +++++++++-------- .../mapping/FeedScopedIdMapper.java | 5 +++-- .../mapping/ItineraryMapper.java | 5 +++-- .../mapping/LegMapper.java | 9 +++++---- .../mapping/ModeMapper.java | 5 +++-- .../mapping/PlaceMapper.java | 11 ++++++----- .../mapping/RelativeDirectionMapper.java | 7 ++++--- .../mapping/VertexTypeMapper.java | 7 ++++--- .../mapping/WalkStepMapper.java | 11 ++++++----- .../model/ApiAbsoluteDirection.java | 3 ++- .../model/ApiCurrency.java | 3 ++- .../model/ApiFareProduct.java | 3 ++- .../model/ApiFareQualifier.java | 3 ++- .../model/ApiItinerary.java | 3 ++- .../model/ApiItineraryFares.java | 5 +++-- .../{restapi => _support}/model/ApiLeg.java | 3 ++- .../model/ApiLegProducts.java | 3 ++- .../mapping/_support/model/ApiMoney.java | 4 ++++ .../{restapi => _support}/model/ApiPlace.java | 3 ++- .../model/ApiRelativeDirection.java | 3 ++- .../model/ApiVehicleParkingSpaces.java | 3 ++- .../model/ApiVehicleParkingWithEntrance.java | 3 ++- .../model/ApiVertexType.java | 3 ++- .../model/ApiWalkStep.java | 3 ++- .../mapping/restapi/model/ApiFareComponent.java | 11 ----------- .../mapping/restapi/model/ApiMoney.java | 3 --- 29 files changed, 85 insertions(+), 70 deletions(-) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/AbsoluteDirectionMapper.java (80%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/ElevationMapper.java (84%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/FareMapper.java (82%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/FeedScopedIdMapper.java (71%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/ItineraryMapper.java (92%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/LegMapper.java (94%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/ModeMapper.java (90%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/PlaceMapper.java (92%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/RelativeDirectionMapper.java (85%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/VertexTypeMapper.java (73%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/mapping/WalkStepMapper.java (77%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiAbsoluteDirection.java (69%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiCurrency.java (59%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiFareProduct.java (85%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiFareQualifier.java (74%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiItinerary.java (97%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiItineraryFares.java (82%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiLeg.java (98%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiLegProducts.java (80%) create mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiMoney.java rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiPlace.java (95%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiRelativeDirection.java (84%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiVehicleParkingSpaces.java (95%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiVehicleParkingWithEntrance.java (98%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiVertexType.java (71%) rename application/src/test/java/org/opentripplanner/routing/algorithm/mapping/{restapi => _support}/model/ApiWalkStep.java (97%) delete mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java delete mode 100644 application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java index 4b471e37bc0..0db64adba65 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java @@ -43,8 +43,8 @@ import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; -import org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ItineraryMapper; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLeg; +import org.opentripplanner.routing.algorithm.mapping._support.mapping.ItineraryMapper; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiLeg; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/AbsoluteDirectionMapper.java similarity index 80% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/AbsoluteDirectionMapper.java index 6e79906c381..89fd74373d4 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/AbsoluteDirectionMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/AbsoluteDirectionMapper.java @@ -1,9 +1,10 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.model.plan.AbsoluteDirection; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiAbsoluteDirection; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiAbsoluteDirection; -public class AbsoluteDirectionMapper { +@Deprecated +class AbsoluteDirectionMapper { public static ApiAbsoluteDirection mapAbsoluteDirection(AbsoluteDirection domain) { if (domain == null) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ElevationMapper.java similarity index 84% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ElevationMapper.java index 05dbdffaab0..6256f592673 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ElevationMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ElevationMapper.java @@ -1,8 +1,9 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.model.plan.ElevationProfile; -public class ElevationMapper { +@Deprecated +class ElevationMapper { public static String mapElevation(ElevationProfile p) { if (p == null) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FareMapper.java similarity index 82% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FareMapper.java index b9382cd6e25..c92f7691652 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FareMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FareMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import com.google.common.collect.Multimap; import java.util.Collection; @@ -13,15 +13,16 @@ import org.opentripplanner.model.fare.RiderCategory; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.Leg; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiCurrency; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiFareProduct; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiFareQualifier; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiItineraryFares; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLegProducts; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiMoney; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiCurrency; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiFareProduct; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiFareQualifier; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiItineraryFares; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiLegProducts; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiMoney; import org.opentripplanner.transit.model.basic.Money; -public class FareMapper { +@Deprecated +class FareMapper { private final Locale locale; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FeedScopedIdMapper.java similarity index 71% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FeedScopedIdMapper.java index 1a4fc049faf..48e1ff21fe7 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/FeedScopedIdMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/FeedScopedIdMapper.java @@ -1,8 +1,9 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.transit.model.framework.FeedScopedId; -public class FeedScopedIdMapper { +@Deprecated +class FeedScopedIdMapper { private static final String SEPARATOR = ":"; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ItineraryMapper.java similarity index 92% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ItineraryMapper.java index 77c9c8dee28..12114d8d16b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ItineraryMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ItineraryMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import java.util.Collection; import java.util.GregorianCalendar; @@ -6,8 +6,9 @@ import java.util.Locale; import java.util.stream.Collectors; import org.opentripplanner.model.plan.Itinerary; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiItinerary; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiItinerary; +@Deprecated public class ItineraryMapper { private final LegMapper legMapper; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/LegMapper.java similarity index 94% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/LegMapper.java index 2d5efac4367..ecfe92f0e80 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/LegMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/LegMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; -import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.routing.algorithm.mapping._support.mapping.ElevationMapper.mapElevation; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -13,9 +13,10 @@ import org.opentripplanner.model.plan.Leg; import org.opentripplanner.model.plan.StreetLeg; import org.opentripplanner.model.plan.TransitLeg; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiLeg; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiLeg; -public class LegMapper { +@Deprecated +class LegMapper { private final WalkStepMapper walkStepMapper; private final PlaceMapper placeMapper; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ModeMapper.java similarity index 90% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ModeMapper.java index 2d35b875fb9..03b3b6afdcb 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/ModeMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/ModeMapper.java @@ -1,9 +1,10 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.street.search.TraverseMode; import org.opentripplanner.transit.model.basic.TransitMode; -public class ModeMapper { +@Deprecated +class ModeMapper { public static String mapToApi(TraverseMode domain) { if (domain == null) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/PlaceMapper.java similarity index 92% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/PlaceMapper.java index 8571e6e4003..7c09de072d4 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/PlaceMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/PlaceMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -12,13 +12,14 @@ import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.VehicleParkingWithEntrance; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiPlace; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVehicleParkingSpaces; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVehicleParkingWithEntrance; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiPlace; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiVehicleParkingSpaces; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiVehicleParkingWithEntrance; import org.opentripplanner.service.vehicleparking.model.VehicleParkingSpaces; import org.opentripplanner.transit.model.site.RegularStop; -public class PlaceMapper { +@Deprecated +class PlaceMapper { private final Locale locale; private final I18NStringMapper i18NStringMapper; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/RelativeDirectionMapper.java similarity index 85% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/RelativeDirectionMapper.java index c7042e2f24b..37fee8c269c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/RelativeDirectionMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/RelativeDirectionMapper.java @@ -1,9 +1,10 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.model.plan.RelativeDirection; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiRelativeDirection; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiRelativeDirection; -public class RelativeDirectionMapper { +@Deprecated +class RelativeDirectionMapper { public static ApiRelativeDirection mapRelativeDirection(RelativeDirection domain) { if (domain == null) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/VertexTypeMapper.java similarity index 73% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/VertexTypeMapper.java index d081762b126..34bda0bae81 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/VertexTypeMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/VertexTypeMapper.java @@ -1,9 +1,10 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; import org.opentripplanner.model.plan.VertexType; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiVertexType; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiVertexType; -public class VertexTypeMapper { +@Deprecated +class VertexTypeMapper { public static ApiVertexType mapVertexType(VertexType domain) { if (domain == null) { diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/WalkStepMapper.java similarity index 77% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/WalkStepMapper.java index 31a3cd89aa8..63d92b03e52 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/mapping/WalkStepMapper.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/mapping/WalkStepMapper.java @@ -1,16 +1,17 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.mapping; +package org.opentripplanner.routing.algorithm.mapping._support.mapping; -import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.ElevationMapper.mapElevation; -import static org.opentripplanner.routing.algorithm.mapping.restapi.mapping.RelativeDirectionMapper.mapRelativeDirection; +import static org.opentripplanner.routing.algorithm.mapping._support.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.routing.algorithm.mapping._support.mapping.RelativeDirectionMapper.mapRelativeDirection; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; import org.opentripplanner.model.plan.WalkStep; -import org.opentripplanner.routing.algorithm.mapping.restapi.model.ApiWalkStep; +import org.opentripplanner.routing.algorithm.mapping._support.model.ApiWalkStep; -public class WalkStepMapper { +@Deprecated +class WalkStepMapper { private final Locale locale; diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiAbsoluteDirection.java similarity index 69% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiAbsoluteDirection.java index b065c9fd181..f19a9abf029 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiAbsoluteDirection.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiAbsoluteDirection.java @@ -1,8 +1,9 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * An absolute cardinal or intermediate direction. */ +@Deprecated public enum ApiAbsoluteDirection { NORTH, NORTHEAST, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiCurrency.java similarity index 59% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiCurrency.java index 8cef5a54bb0..4307c1b4cd9 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiCurrency.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiCurrency.java @@ -1,5 +1,6 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; +@Deprecated public record ApiCurrency( String currency, int defaultFractionDigits, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareProduct.java similarity index 85% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareProduct.java index 2f8579ec6bf..035a8e1fba9 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareProduct.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareProduct.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * A Fares V2 product. This is a type of ticket or monthly pass that customers can buy. @@ -9,6 +9,7 @@ * @param container The fare containers, ie. a smart card or an app. * @param category The rider category like senior, youth, veteran. */ +@Deprecated public record ApiFareProduct( String id, String name, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareQualifier.java similarity index 74% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareQualifier.java index cfa380442f9..dbee26e197b 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareQualifier.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiFareQualifier.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * Qualifiers for Fares V2 fare products. Qualifiers can be rider categories (youth, senior, veteran) or @@ -6,4 +6,5 @@ * @param id * @param name */ +@Deprecated public record ApiFareQualifier(String id, String name) {} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItinerary.java similarity index 97% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItinerary.java index 6bd672b5c1b..97fb6fee820 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItinerary.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItinerary.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.ArrayList; import java.util.Calendar; @@ -9,6 +9,7 @@ /** * An Itinerary is one complete way of getting from the start location to the end location. */ +@Deprecated public class ApiItinerary { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItineraryFares.java similarity index 82% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItineraryFares.java index 93dae9294b4..898fc2c3bde 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiItineraryFares.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiItineraryFares.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.List; import java.util.Map; @@ -10,9 +10,10 @@ * @param legProducts The Fares V2 products that cover only parts of the legs of the * itinerary, ie. the customer has to buy more than one ticket. */ +@Deprecated public record ApiItineraryFares( Map fare, - Map> details, + Map> details, List coveringItinerary, List legProducts ) {} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLeg.java similarity index 98% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLeg.java index 91e3c1b79d0..fa8386f184e 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLeg.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLeg.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.Calendar; import java.util.List; @@ -9,6 +9,7 @@ * particular vehicle (or on foot). */ +@Deprecated public class ApiLeg { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLegProducts.java similarity index 80% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLegProducts.java index b2fe01acf21..5a8b9e0c6e2 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiLegProducts.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiLegProducts.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.Collection; import java.util.List; @@ -8,4 +8,5 @@ * @param legIndices The leg indices inside the itinerary that these products are valid for. * @param products The list of products that are valid for the leg referenced by the indices. */ +@Deprecated public record ApiLegProducts(List legIndices, Collection products) {} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiMoney.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiMoney.java new file mode 100644 index 00000000000..d295fba56ad --- /dev/null +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiMoney.java @@ -0,0 +1,4 @@ +package org.opentripplanner.routing.algorithm.mapping._support.model; + +@Deprecated +public record ApiMoney(int cents, ApiCurrency currency) {} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiPlace.java similarity index 95% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiPlace.java index b1deb807d15..492485d5778 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiPlace.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiPlace.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.Calendar; import java.util.List; @@ -6,6 +6,7 @@ /** * A Place is where a journey starts or ends, or a transit stop along the way. */ +@Deprecated public class ApiPlace { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiRelativeDirection.java similarity index 84% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiRelativeDirection.java index 35be52b0d41..91de9bac260 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiRelativeDirection.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiRelativeDirection.java @@ -1,10 +1,11 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * Represents a turn direction, relative to the current heading. *

* CIRCLE_CLOCKWISE and CIRCLE_CLOCKWISE are used to represent traffic circles. */ +@Deprecated public enum ApiRelativeDirection { DEPART, HARD_LEFT, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingSpaces.java similarity index 95% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingSpaces.java index f6b17a08a08..07a3f8fe683 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingSpaces.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingSpaces.java @@ -1,5 +1,6 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; +@Deprecated public class ApiVehicleParkingSpaces { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingWithEntrance.java similarity index 98% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingWithEntrance.java index 3a2592ff721..2d5106905c0 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVehicleParkingWithEntrance.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVehicleParkingWithEntrance.java @@ -1,10 +1,11 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; import java.util.List; /** * The details of a parking place along with the entrance used. */ +@Deprecated public class ApiVehicleParkingWithEntrance { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVertexType.java similarity index 71% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVertexType.java index 162c2cfd08c..8ac3cf3129a 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiVertexType.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiVertexType.java @@ -1,10 +1,11 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * Represent type of vertex, used in Place aka from, to in API for easier client side localization * * @author mabu */ +@Deprecated public enum ApiVertexType { NORMAL, BIKESHARE, diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiWalkStep.java similarity index 97% rename from application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java rename to application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiWalkStep.java index 82ef12e41b9..bf3ee8c493c 100644 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiWalkStep.java +++ b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/_support/model/ApiWalkStep.java @@ -1,4 +1,4 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; +package org.opentripplanner.routing.algorithm.mapping._support.model; /** * Represents one instruction in walking directions. Three examples from New York City: @@ -17,6 +17,7 @@ * true
everything else false
*

*/ +@Deprecated public class ApiWalkStep { /** diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java deleted file mode 100644 index 012fefa4446..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiFareComponent.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; - -import java.util.List; -import org.opentripplanner.transit.model.framework.FeedScopedId; - -public record ApiFareComponent( - FeedScopedId fareId, - String name, - ApiMoney price, - List routes -) {} diff --git a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java b/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java deleted file mode 100644 index 8f0db62cb1b..00000000000 --- a/application/src/test/java/org/opentripplanner/routing/algorithm/mapping/restapi/model/ApiMoney.java +++ /dev/null @@ -1,3 +0,0 @@ -package org.opentripplanner.routing.algorithm.mapping.restapi.model; - -public record ApiMoney(int cents, ApiCurrency currency) {} From 60852192b674809b2d003ec329ffebd4db586096 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 30 Mar 2025 09:12:14 +0200 Subject: [PATCH 13/13] Remove more references --- .../org/opentripplanner/api/resource/TransitTimingOutput.java | 2 +- .../raptor/rangeraptor/SystemErrDebugLogger.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application/src/main/java/org/opentripplanner/api/resource/TransitTimingOutput.java b/application/src/main/java/org/opentripplanner/api/resource/TransitTimingOutput.java index ed51fa678e4..5c00f23e1bd 100644 --- a/application/src/main/java/org/opentripplanner/api/resource/TransitTimingOutput.java +++ b/application/src/main/java/org/opentripplanner/api/resource/TransitTimingOutput.java @@ -1,7 +1,7 @@ package org.opentripplanner.api.resource; /** - * Holds information to be included in the REST Response for debugging and profiling purposes of a + * Holds information to be included in the response for debugging and profiling purposes of a * single transit routing search. */ public class TransitTimingOutput { diff --git a/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java index a72e8826d13..a9c24e48a75 100644 --- a/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java +++ b/raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/SystemErrDebugLogger.java @@ -29,7 +29,7 @@ /** * A debug logger which can be plugged into Raptor to do debug logging to standard error. This is - * used by the REST API, SpeedTest and in module tests. + * used by the SpeedTest and in module tests. *

* See the Raptor design doc for a general description of the logging functionality. */