From f2241c97c015e2883d732121d50880730286679f Mon Sep 17 00:00:00 2001 From: Henrik Abrahamsson Date: Wed, 13 Dec 2023 11:25:07 +0100 Subject: [PATCH 001/103] Report issue for duplicate journey patterns in NeTEx --- .../netex/mapping/NetexMapper.java | 41 ++++++++--- .../netex/mapping/TripPatternMapper.java | 71 +++++++++++-------- .../mapping/TripPatternMapperResult.java | 31 +++----- .../netex/mapping/TripPatternMapperTest.java | 45 +++++++----- 4 files changed, 107 insertions(+), 81 deletions(-) diff --git a/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java b/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java index 26016947c09..411ac268059 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java +++ b/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java @@ -11,6 +11,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; import org.opentripplanner.model.calendar.ServiceCalendar; @@ -460,18 +461,36 @@ private void mapTripPatterns(Map serviceIds) { for (JourneyPattern_VersionStructure journeyPattern : currentNetexIndex .getJourneyPatternsById() .localValues()) { - TripPatternMapperResult result = tripPatternMapper.mapTripPattern(journeyPattern); + tripPatternMapper + .mapTripPattern(journeyPattern) + .ifPresent(result -> { + var journeyPatternExists = transitBuilder + .getTripPatterns() + .get(result.tripPattern().getStopPattern()) + .stream() + .anyMatch(tripPattern -> result.tripPattern().getId().equals(tripPattern.getId())); + if (journeyPatternExists) { + issueStore.add( + "DuplicateJourneyPattern", + "Duplicate of JourneyPattern %s found", + journeyPattern.getId() + ); + } - for (Map.Entry> it : result.tripStopTimes.entrySet()) { - transitBuilder.getStopTimesSortedByTrip().put(it.getKey(), it.getValue()); - transitBuilder.getTripsById().add(it.getKey()); - } - for (var it : result.tripPatterns.entries()) { - transitBuilder.getTripPatterns().put(it.getKey(), it.getValue()); - } - currentMapperIndexes.addStopTimesByNetexId(result.stopTimeByNetexId); - groupMapper.scheduledStopPointsIndex.putAll(Multimaps.asMap(result.scheduledStopPointsIndex)); - transitBuilder.getTripOnServiceDates().addAll(result.tripOnServiceDates); + for (Map.Entry> it : result.tripStopTimes().entrySet()) { + transitBuilder.getStopTimesSortedByTrip().put(it.getKey(), it.getValue()); + transitBuilder.getTripsById().add(it.getKey()); + } + + transitBuilder + .getTripPatterns() + .put(result.tripPattern().getStopPattern(), result.tripPattern()); + currentMapperIndexes.addStopTimesByNetexId(result.stopTimeByNetexId()); + groupMapper.scheduledStopPointsIndex.putAll( + Multimaps.asMap(result.scheduledStopPointsIndex()) + ); + transitBuilder.getTripOnServiceDates().addAll(result.tripOnServiceDates()); + }); } } diff --git a/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapper.java b/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapper.java index 6fa000c1049..f0d06b8871d 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapper.java +++ b/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapper.java @@ -5,10 +5,12 @@ import jakarta.xml.bind.JAXBElement; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.model.StopTime; @@ -84,8 +86,6 @@ class TripPatternMapper { private final Deduplicator deduplicator; - private TripPatternMapperResult result; - TripPatternMapper( DataImportIssueStore issueStore, FeedScopedIdFactory idFactory, @@ -157,9 +157,7 @@ class TripPatternMapper { } } - TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPattern) { - // Make sure the result is clean, by creating a new object. - result = new TripPatternMapperResult(); + Optional mapTripPattern(JourneyPattern_VersionStructure journeyPattern) { Collection serviceJourneys = serviceJourniesByPatternId.get( journeyPattern.getId() ); @@ -170,10 +168,14 @@ TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPa "ServiceJourneyPattern %s does not contain any serviceJourneys.", journeyPattern.getId() ); - return result; + return Optional.empty(); } List trips = new ArrayList<>(); + ArrayListMultimap scheduledStopPointsIndex = ArrayListMultimap.create(); + HashMap> tripStopTimes = new HashMap<>(); + Map stopTimeByNetexId = new HashMap<>(); + ArrayList tripOnServiceDates = new ArrayList<>(); for (ServiceJourney serviceJourney : serviceJourneys) { Trip trip = mapTrip(journeyPattern, serviceJourney); @@ -184,7 +186,7 @@ TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPa } // Add the dated service journey to the model for this trip [if it exists] - mapDatedServiceJourney(journeyPattern, serviceJourney, trip); + tripOnServiceDates.addAll(mapDatedServiceJourney(journeyPattern, serviceJourney, trip)); StopTimesMapperResult stopTimes = stopTimesMapper.mapToStopTimes( journeyPattern, @@ -198,25 +200,22 @@ TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPa continue; } - result.scheduledStopPointsIndex.putAll( - serviceJourney.getId(), - stopTimes.scheduledStopPointIds - ); - result.tripStopTimes.put(trip, stopTimes.stopTimes); - result.stopTimeByNetexId.putAll(stopTimes.stopTimeByNetexId); + scheduledStopPointsIndex.putAll(serviceJourney.getId(), stopTimes.scheduledStopPointIds); + tripStopTimes.put(trip, stopTimes.stopTimes); + stopTimeByNetexId.putAll(stopTimes.stopTimeByNetexId); trips.add(trip); } // No trips successfully mapped if (trips.isEmpty()) { - return result; + return Optional.empty(); } // Create StopPattern from any trip (since they are part of the same JourneyPattern) StopPattern stopPattern = deduplicator.deduplicateObject( StopPattern.class, - new StopPattern(result.tripStopTimes.get(trips.get(0))) + new StopPattern(tripStopTimes.get(trips.get(0))) ); var tripPatternModes = new HashSet(); @@ -246,7 +245,7 @@ TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPa ); } - TripPatternBuilder tripPatternBuilder = TripPattern + var tripPattern = TripPattern .of(idFactory.createId(journeyPattern.getId())) .withRoute(lookupRoute(journeyPattern)) .withStopPattern(stopPattern) @@ -256,30 +255,35 @@ TripPatternMapperResult mapTripPattern(JourneyPattern_VersionStructure journeyPa .withName(journeyPattern.getName() == null ? "" : journeyPattern.getName().getValue()) .withHopGeometries( serviceLinkMapper.getGeometriesByJourneyPattern(journeyPattern, stopPattern) - ); - - TripPattern tripPattern = tripPatternBuilder.build(); - createTripTimes(trips, tripPattern); - - result.tripPatterns.put(stopPattern, tripPattern); - - return result; + ) + .build(); + createTripTimes(trips, tripStopTimes).forEach(tripPattern::add); + + return Optional.of( + new TripPatternMapperResult( + tripPattern, + scheduledStopPointsIndex, + tripStopTimes, + stopTimeByNetexId, + tripOnServiceDates + ) + ); } - private void mapDatedServiceJourney( + private ArrayList mapDatedServiceJourney( JourneyPattern_VersionStructure journeyPattern, ServiceJourney serviceJourney, Trip trip ) { + var tripsOnServiceDates = new ArrayList(); if (datedServiceJourneysBySJId.containsKey(serviceJourney.getId())) { for (DatedServiceJourney datedServiceJourney : datedServiceJourneysBySJId.get( serviceJourney.getId() )) { - result.tripOnServiceDates.add( - mapDatedServiceJourney(journeyPattern, trip, datedServiceJourney) - ); + tripsOnServiceDates.add(mapDatedServiceJourney(journeyPattern, trip, datedServiceJourney)); } } + return tripsOnServiceDates; } private TripOnServiceDate mapDatedServiceJourney( @@ -360,9 +364,13 @@ private org.opentripplanner.transit.model.network.Route lookupRoute( return otpRouteById.get(idFactory.createId(lineId)); } - private void createTripTimes(List trips, TripPattern tripPattern) { + private List createTripTimes( + List trips, + Map> tripStopTimes + ) { + var tripTimesResult = new ArrayList(); for (Trip trip : trips) { - List stopTimes = result.tripStopTimes.get(trip); + List stopTimes = tripStopTimes.get(trip); if (stopTimes.isEmpty()) { issueStore.add( "TripWithoutTripTimes", @@ -372,12 +380,13 @@ private void createTripTimes(List trips, TripPattern tripPattern) { } else { try { TripTimes tripTimes = TripTimesFactory.tripTimes(trip, stopTimes, deduplicator); - tripPattern.add(tripTimes); + tripTimesResult.add(tripTimes); } catch (DataValidationException e) { issueStore.add(e.error()); } } } + return tripTimesResult; } private Trip mapTrip( diff --git a/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapperResult.java b/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapperResult.java index 6b14fea5d31..f2f75cd2561 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapperResult.java +++ b/src/main/java/org/opentripplanner/netex/mapping/TripPatternMapperResult.java @@ -13,24 +13,15 @@ import org.opentripplanner.transit.model.timetable.TripOnServiceDate; /** - * This mapper returnes two collections, so we need to use a simple wraper to be able to return the - * result from the mapping method. + * Wrapper class for the result of TripPatternMapper + * + * @param scheduledStopPointsIndex A map from trip/serviceJourney id to an ordered list of scheduled stop point ids. + * @param stopTimeByNetexId stopTimes by the timetabled-passing-time id */ -class TripPatternMapperResult { - - /** - * A map from trip/serviceJourney id to an ordered list of scheduled stop point ids. - */ - final ArrayListMultimap scheduledStopPointsIndex = ArrayListMultimap.create(); - - final Map> tripStopTimes = new HashMap<>(); - - final Multimap tripPatterns = ArrayListMultimap.create(); - - /** - * stopTimes by the timetabled-passing-time id - */ - final Map stopTimeByNetexId = new HashMap<>(); - - final ArrayList tripOnServiceDates = new ArrayList<>(); -} +record TripPatternMapperResult( + TripPattern tripPattern, + ArrayListMultimap scheduledStopPointsIndex, + Map> tripStopTimes, + Map stopTimeByNetexId, + ArrayList tripOnServiceDates +) {} diff --git a/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java b/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java index f07a46ced2c..74448fb3638 100644 --- a/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java +++ b/src/test/java/org/opentripplanner/netex/mapping/TripPatternMapperTest.java @@ -1,9 +1,11 @@ package org.opentripplanner.netex.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; import com.google.common.collect.ArrayListMultimap; import java.util.Map; +import java.util.Optional; import org.junit.jupiter.api.Test; import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; import org.opentripplanner.netex.index.hierarchy.HierarchicalMap; @@ -12,7 +14,6 @@ import org.opentripplanner.transit.model.framework.Deduplicator; import org.opentripplanner.transit.model.framework.DefaultEntityById; import org.opentripplanner.transit.model.framework.FeedScopedId; -import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.timetable.Trip; import org.opentripplanner.transit.model.timetable.TripAlteration; import org.opentripplanner.transit.model.timetable.TripOnServiceDate; @@ -55,26 +56,28 @@ public void testMapTripPattern() { 150 ); - TripPatternMapperResult r = tripPatternMapper.mapTripPattern(sample.getJourneyPattern()); + Optional res = tripPatternMapper.mapTripPattern( + sample.getJourneyPattern() + ); - assertEquals(1, r.tripPatterns.size()); + assertTrue(res.isPresent()); - TripPattern tripPattern = r.tripPatterns.values().stream().findFirst().orElseThrow(); + TripPatternMapperResult r = res.get(); - assertEquals(4, tripPattern.numberOfStops()); - assertEquals(1, tripPattern.scheduledTripsAsStream().count()); + assertEquals(4, r.tripPattern().numberOfStops()); + assertEquals(1, r.tripPattern().scheduledTripsAsStream().count()); - Trip trip = tripPattern.scheduledTripsAsStream().findFirst().get(); + Trip trip = r.tripPattern().scheduledTripsAsStream().findFirst().get(); assertEquals("RUT:ServiceJourney:1", trip.getId().getId()); - assertEquals("NSR:Quay:1", tripPattern.getStop(0).getId().getId()); - assertEquals("NSR:Quay:2", tripPattern.getStop(1).getId().getId()); - assertEquals("NSR:Quay:3", tripPattern.getStop(2).getId().getId()); - assertEquals("NSR:Quay:4", tripPattern.getStop(3).getId().getId()); + assertEquals("NSR:Quay:1", r.tripPattern().getStop(0).getId().getId()); + assertEquals("NSR:Quay:2", r.tripPattern().getStop(1).getId().getId()); + assertEquals("NSR:Quay:3", r.tripPattern().getStop(2).getId().getId()); + assertEquals("NSR:Quay:4", r.tripPattern().getStop(3).getId().getId()); - assertEquals(1, tripPattern.getScheduledTimetable().getTripTimes().size()); + assertEquals(1, r.tripPattern().getScheduledTimetable().getTripTimes().size()); - TripTimes tripTimes = tripPattern.getScheduledTimetable().getTripTimes().get(0); + TripTimes tripTimes = r.tripPattern().getScheduledTimetable().getTripTimes().get(0); assertEquals(4, tripTimes.getNumStops()); @@ -115,15 +118,19 @@ public void testMapTripPattern_datedServiceJourney() { 150 ); - TripPatternMapperResult r = tripPatternMapper.mapTripPattern(sample.getJourneyPattern()); + Optional res = tripPatternMapper.mapTripPattern( + sample.getJourneyPattern() + ); + + assertTrue(res.isPresent()); + + var r = res.get(); - assertEquals(1, r.tripPatterns.size()); - assertEquals(2, r.tripOnServiceDates.size()); + assertEquals(2, r.tripOnServiceDates().size()); - TripPattern tripPattern = r.tripPatterns.values().stream().findFirst().orElseThrow(); - Trip trip = tripPattern.scheduledTripsAsStream().findFirst().get(); + Trip trip = r.tripPattern().scheduledTripsAsStream().findFirst().get(); - for (TripOnServiceDate tripOnServiceDate : r.tripOnServiceDates) { + for (TripOnServiceDate tripOnServiceDate : r.tripOnServiceDates()) { assertEquals(trip, tripOnServiceDate.getTrip()); assertEquals(TripAlteration.PLANNED, tripOnServiceDate.getTripAlteration()); assertEquals( From b5e88803249b950c9b1c5042adab20feb57fc9b6 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Mon, 11 Dec 2023 16:48:19 +0200 Subject: [PATCH 002/103] Refactor rental preferences to be mode specific --- .../mapping/PreferencesMapper.java | 2 - .../mapping/TripRequestMapper.java | 11 --- .../preferences/BikePreferencesMapper.java | 4 + .../preferences/CarPreferencesMapper.java | 3 + .../ItineraryFilterPreferencesMapper.java | 12 --- .../preferences/RentalPreferencesMapper.java | 28 +++++++ .../model/DefaultRouteRequestType.java | 8 +- .../transmodelapi/model/plan/TripQuery.java | 2 +- .../common/RequestToPreferencesMapper.java | 25 +++--- .../api/common/RoutingResource.java | 10 --- .../apis/gtfs/mapping/RouteRequestMapper.java | 60 ++++++++------- .../raptoradapter/router/TransitRouter.java | 5 +- .../request/preference/BikePreferences.java | 18 +++++ .../request/preference/CarPreferences.java | 18 +++++ .../preference/RoutingPreferences.java | 36 +++++---- .../preference/VehicleRentalPreferences.java | 77 +++++++++++++++++-- .../api/request/request/JourneyRequest.java | 7 -- .../api/request/request/StreetRequest.java | 1 - .../request/request/VehicleRentalRequest.java | 66 ---------------- .../model/VehicleRentalPlace.java | 12 +-- .../street/StreetVehicleRentalLink.java | 3 +- .../street/VehicleRentalEdge.java | 16 ++-- .../routerequest/RouteRequestConfig.java | 15 ++-- .../routerequest/VehicleRentalConfig.java | 61 ++++++--------- .../model/edge/StreetTransitEntityLink.java | 11 ++- .../street/model/edge/TemporaryFreeEdge.java | 5 +- .../search/request/StreetSearchRequest.java | 8 -- .../request/StreetSearchRequestBuilder.java | 8 -- .../request/StreetSearchRequestMapper.java | 2 - .../street/search/state/State.java | 10 ++- .../street/search/state/StateData.java | 6 +- .../mapping/BikeRentalSnapshotTest.java | 12 ++- .../VehicleRentalPreferencesTest.java | 32 +++++++- .../routing/core/RoutingPreferencesTest.java | 11 --- .../street/integration/BikeRentalTest.java | 46 +++++++---- .../model/edge/VehicleRentalEdgeTest.java | 10 ++- 36 files changed, 359 insertions(+), 302 deletions(-) create mode 100644 src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/RentalPreferencesMapper.java delete mode 100644 src/main/java/org/opentripplanner/routing/api/request/request/VehicleRentalRequest.java diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/PreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/PreferencesMapper.java index 35883c8e72b..ac608e41398 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/PreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/PreferencesMapper.java @@ -3,7 +3,6 @@ import static org.opentripplanner.ext.transmodelapi.mapping.preferences.BikePreferencesMapper.mapBikePreferences; import static org.opentripplanner.ext.transmodelapi.mapping.preferences.CarPreferencesMapper.mapCarPreferences; import static org.opentripplanner.ext.transmodelapi.mapping.preferences.ItineraryFilterPreferencesMapper.mapItineraryFilterPreferences; -import static org.opentripplanner.ext.transmodelapi.mapping.preferences.ItineraryFilterPreferencesMapper.mapRentalPreferences; import static org.opentripplanner.ext.transmodelapi.mapping.preferences.StreetPreferencesMapper.mapStreetPreferences; import static org.opentripplanner.ext.transmodelapi.mapping.preferences.TransferPreferencesMapper.mapTransferPreferences; import static org.opentripplanner.ext.transmodelapi.mapping.preferences.TransitPreferencesMapper.mapTransitPreferences; @@ -30,6 +29,5 @@ static void mapPreferences( preferences.withItineraryFilter(itineraryFilter -> mapItineraryFilterPreferences(itineraryFilter, environment, callWith) ); - preferences.withRental(rental -> mapRentalPreferences(rental, environment, callWith)); } } diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/TripRequestMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/TripRequestMapper.java index d3dd06bb945..4a41df783a1 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/TripRequestMapper.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/TripRequestMapper.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Set; import org.opentripplanner.ext.transmodelapi.TransmodelRequestContext; import org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator; import org.opentripplanner.ext.transmodelapi.support.GqlUtil; @@ -85,16 +84,6 @@ public static RouteRequest createRequest(DataFetchingEnvironment environment) { request.journey().transit().setUnpreferredRoutes(mapIDsToDomainNullSafe(lines)) ); - callWith.argument( - "whiteListed.rentalNetworks", - (List networks) -> request.journey().rental().setAllowedNetworks(Set.copyOf(networks)) - ); - - callWith.argument( - "banned.rentalNetworks", - (List networks) -> request.journey().rental().setBannedNetworks(Set.copyOf(networks)) - ); - if (GqlUtil.hasArgument(environment, "modes")) { request .journey() diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/BikePreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/BikePreferencesMapper.java index a726309dc24..de7297a058a 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/BikePreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/BikePreferencesMapper.java @@ -1,5 +1,7 @@ package org.opentripplanner.ext.transmodelapi.mapping.preferences; +import static org.opentripplanner.ext.transmodelapi.mapping.preferences.RentalPreferencesMapper.mapRentalPreferences; + import org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.BikePreferences; import org.opentripplanner.routing.core.BicycleOptimizeType; @@ -42,5 +44,7 @@ public static void mapBikePreferences( callWith.argument("triangleFactors.safety", triangle::withSafety); }); } + + bike.withRental(rental -> mapRentalPreferences(rental, callWith)); } } diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/CarPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/CarPreferencesMapper.java index f962016ed5f..86463e218f4 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/CarPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/CarPreferencesMapper.java @@ -1,5 +1,7 @@ package org.opentripplanner.ext.transmodelapi.mapping.preferences; +import static org.opentripplanner.ext.transmodelapi.mapping.preferences.RentalPreferencesMapper.mapRentalPreferences; + import org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.CarPreferences; @@ -8,6 +10,7 @@ public class CarPreferencesMapper { public static void mapCarPreferences(CarPreferences.Builder car, DataFetcherDecorator callWith) { // Walk reluctance is used for backward compatibility callWith.argument("walkReluctance", car::withReluctance); + car.withRental(rental -> mapRentalPreferences(rental, callWith)); // UNSUPPORTED PARAMETERS // Override WALK reluctance with CAR reluctance diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/ItineraryFilterPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/ItineraryFilterPreferencesMapper.java index 25335b231e9..65e55199e4e 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/ItineraryFilterPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/ItineraryFilterPreferencesMapper.java @@ -5,7 +5,6 @@ import org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator; import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; import org.opentripplanner.routing.api.request.preference.ItineraryFilterPreferences; -import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; public class ItineraryFilterPreferencesMapper { @@ -20,15 +19,4 @@ public static void mapItineraryFilterPreferences( ); ItineraryFiltersInputType.mapToRequest(environment, callWith, itineraryFilter); } - - public static void mapRentalPreferences( - VehicleRentalPreferences.Builder rental, - DataFetchingEnvironment environment, - DataFetcherDecorator callWith - ) { - callWith.argument( - "useBikeRentalAvailabilityInformation", - rental::withUseAvailabilityInformation - ); - } } diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/RentalPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/RentalPreferencesMapper.java new file mode 100644 index 00000000000..f447d9b4421 --- /dev/null +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/mapping/preferences/RentalPreferencesMapper.java @@ -0,0 +1,28 @@ +package org.opentripplanner.ext.transmodelapi.mapping.preferences; + +import java.util.List; +import java.util.Set; +import org.opentripplanner.ext.transmodelapi.support.DataFetcherDecorator; +import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; + +public class RentalPreferencesMapper { + + public static void mapRentalPreferences( + VehicleRentalPreferences.Builder rental, + DataFetcherDecorator callWith + ) { + callWith.argument( + "whiteListed.rentalNetworks", + (List networks) -> rental.withAllowedNetworks(Set.copyOf(networks)) + ); + + callWith.argument( + "banned.rentalNetworks", + (List networks) -> rental.withBannedNetworks(Set.copyOf(networks)) + ); + callWith.argument( + "useBikeRentalAvailabilityInformation", + rental::withUseAvailabilityInformation + ); + } +} diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/model/DefaultRouteRequestType.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/model/DefaultRouteRequestType.java index 7ac493a3bbe..80062f3aba1 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/model/DefaultRouteRequestType.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/model/DefaultRouteRequestType.java @@ -184,7 +184,7 @@ private GraphQLObjectType createGraphQLType() { .name("bikeRentalPickupTime") .description("Time to rent a bike.") .type(Scalars.GraphQLInt) - .dataFetcher(env -> preferences.rental().pickupTime()) + .dataFetcher(env -> preferences.bike().rental().pickupTime()) .build() ) .field( @@ -193,7 +193,7 @@ private GraphQLObjectType createGraphQLType() { .name("bikeRentalPickupCost") .description("Cost to rent a bike.") .type(Scalars.GraphQLInt) - .dataFetcher(env -> preferences.rental().pickupCost()) + .dataFetcher(env -> preferences.bike().rental().pickupCost()) .build() ) .field( @@ -202,7 +202,7 @@ private GraphQLObjectType createGraphQLType() { .name("bikeRentalDropOffTime") .description("Time to drop-off a rented bike.") .type(Scalars.GraphQLInt) - .dataFetcher(env -> preferences.rental().dropoffTime()) + .dataFetcher(env -> preferences.bike().rental().dropoffTime()) .build() ) .field( @@ -211,7 +211,7 @@ private GraphQLObjectType createGraphQLType() { .name("bikeRentalDropOffCost") .description("Cost to drop-off a rented bike.") .type(Scalars.GraphQLInt) - .dataFetcher(env -> preferences.rental().dropoffCost()) + .dataFetcher(env -> preferences.bike().rental().dropoffCost()) .build() ) .field( diff --git a/src/ext/java/org/opentripplanner/ext/transmodelapi/model/plan/TripQuery.java b/src/ext/java/org/opentripplanner/ext/transmodelapi/model/plan/TripQuery.java index 4ac182f514f..9d135dbcff1 100644 --- a/src/ext/java/org/opentripplanner/ext/transmodelapi/model/plan/TripQuery.java +++ b/src/ext/java/org/opentripplanner/ext/transmodelapi/model/plan/TripQuery.java @@ -386,7 +386,7 @@ public static GraphQLFieldDefinition create( "rental trips." ) .type(Scalars.GraphQLBoolean) - .defaultValue(preferences.rental().useAvailabilityInformation()) + .defaultValue(preferences.bike().rental().useAvailabilityInformation()) .build() ) .argument( diff --git a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java index aa827ae5b4c..6ccc8d3ca47 100644 --- a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java @@ -9,6 +9,7 @@ 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.routing.core.BicycleOptimizeType; class RequestToPreferencesMapper { @@ -36,7 +37,6 @@ void map() { mapTransfer(boardAndAlightSlack); - maptRental(); mapItineraryFilter(); mapSystem(); } @@ -49,6 +49,7 @@ private void mapCar() { setIfNotNull(req.carParkCost, parking::withParkCost); setIfNotNull(req.carParkTime, parking::withParkTime); }); + car.withRental(this::mapRental); }); } @@ -85,6 +86,7 @@ private void mapBike() { setIfNotNull(req.bikeParkCost, parking::withParkCost); setIfNotNull(req.bikeParkTime, parking::withParkTime); }); + bike.withRental(this::mapRental); }); } @@ -133,14 +135,19 @@ private void mapTransfer(BoardAndAlightSlack boardAndAlightSlack) { }); } - private void maptRental() { - preferences.withRental(rental -> { - setIfNotNull( - req.keepingRentedBicycleAtDestinationCost, - rental::withArrivingInRentalVehicleAtDestinationCost - ); - rental.withUseAvailabilityInformation(isPlannedForNow); - }); + private void mapRental(VehicleRentalPreferences.Builder rental) { + setIfNotNull( + req.allowKeepingRentedBicycleAtDestination, + rental::withAllowArrivingInRentedVehicleAtDestination + ); + setIfNotNull(req.allowedVehicleRentalNetworks, rental::withAllowedNetworks); + setIfNotNull(req.bannedVehicleRentalNetworks, rental::withBannedNetworks); + + setIfNotNull( + req.keepingRentedBicycleAtDestinationCost, + rental::withArrivingInRentalVehicleAtDestinationCost + ); + rental.withUseAvailabilityInformation(isPlannedForNow); } private void mapItineraryFilter() { diff --git a/src/main/java/org/opentripplanner/api/common/RoutingResource.java b/src/main/java/org/opentripplanner/api/common/RoutingResource.java index 9cb4f139bc4..8e7501c77fd 100644 --- a/src/main/java/org/opentripplanner/api/common/RoutingResource.java +++ b/src/main/java/org/opentripplanner/api/common/RoutingResource.java @@ -745,16 +745,6 @@ protected RouteRequest buildRequest(MultivaluedMap queryParamete journey.setModes(modes.getRequestModes()); } - { - var rental = journey.rental(); - setIfNotNull( - allowKeepingRentedBicycleAtDestination, - rental::setAllowArrivingInRentedVehicleAtDestination - ); - setIfNotNull(allowedVehicleRentalNetworks, rental::setAllowedNetworks); - setIfNotNull(bannedVehicleRentalNetworks, rental::setBannedNetworks); - } - setIfNotNull(arriveBy, request::setArriveBy); { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java index ab9e8bce823..790064aba22 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/RouteRequestMapper.java @@ -22,6 +22,7 @@ import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.preference.ItineraryFilterDebugProfile; import org.opentripplanner.routing.api.request.preference.VehicleParkingPreferences; +import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; import org.opentripplanner.routing.api.request.request.filter.SelectRequest; import org.opentripplanner.routing.api.request.request.filter.TransitFilterRequest; import org.opentripplanner.routing.core.BicycleOptimizeType; @@ -84,11 +85,13 @@ public static RouteRequest toRouteRequest( } bike.withParking(parking -> setParkingPreferences(callWith, parking)); + bike.withRental(rental -> setRentalPreferences(callWith, request, rental)); }); preferences.withCar(car -> { callWith.argument("carReluctance", car::withReluctance); car.withParking(parking -> setParkingPreferences(callWith, parking)); + car.withRental(rental -> setRentalPreferences(callWith, request, rental)); }); preferences.withWalk(b -> { @@ -97,13 +100,6 @@ public static RouteRequest toRouteRequest( callWith.argument("walkBoardCost", b::withBoardCost); callWith.argument("walkSafetyFactor", b::withSafetyFactor); }); - preferences.withRental(rental -> { - callWith.argument( - "keepingRentedBicycleAtDestinationCost", - rental::withArrivingInRentalVehicleAtDestinationCost - ); - rental.withUseAvailabilityInformation(request.isTripPlannedForNow()); - }); // TODO Add support for all debug filter variants callWith.argument( "debugItineraryFilter", @@ -148,10 +144,6 @@ public static RouteRequest toRouteRequest( }); }); - callWith.argument( - "allowKeepingRentedBicycleAtDestination", - request.journey().rental()::setAllowArrivingInRentedVehicleAtDestination - ); callWith.argument("arriveBy", request::setArriveBy); callWith.argument( @@ -231,22 +223,6 @@ public static RouteRequest toRouteRequest( // ((List)environment.getArgument("allowedTicketTypes")).forEach(ticketType -> request.allowedFares.add(ticketType.replaceFirst("_", ":"))); } - var vehicleRental = request.journey().rental(); - - // Deprecated, the next one will override this, if both are set - callWith.argument( - "allowedBikeRentalNetworks", - (Collection v) -> vehicleRental.setAllowedNetworks(new HashSet<>(v)) - ); - callWith.argument( - "allowedVehicleRentalNetworks", - (Collection v) -> vehicleRental.setAllowedNetworks(new HashSet<>(v)) - ); - callWith.argument( - "bannedVehicleRentalNetworks", - (Collection v) -> vehicleRental.setBannedNetworks(new HashSet<>(v)) - ); - callWith.argument( "locale", (String v) -> request.setLocale(GraphQLUtils.getLocale(environment, v)) @@ -324,6 +300,36 @@ private static void setParkingPreferences( ); } + private static void setRentalPreferences( + CallerWithEnvironment callWith, + RouteRequest request, + VehicleRentalPreferences.Builder rental + ) { + callWith.argument( + "keepingRentedBicycleAtDestinationCost", + rental::withArrivingInRentalVehicleAtDestinationCost + ); + rental.withUseAvailabilityInformation(request.isTripPlannedForNow()); + callWith.argument( + "allowKeepingRentedBicycleAtDestination", + rental::withAllowArrivingInRentedVehicleAtDestination + ); + + // Deprecated, the next one will override this, if both are set + callWith.argument( + "allowedBikeRentalNetworks", + (Collection v) -> rental.withAllowedNetworks(new HashSet<>(v)) + ); + callWith.argument( + "allowedVehicleRentalNetworks", + (Collection v) -> rental.withAllowedNetworks(new HashSet<>(v)) + ); + callWith.argument( + "bannedVehicleRentalNetworks", + (Collection v) -> rental.withBannedNetworks(new HashSet<>(v)) + ); + } + private static class CallerWithEnvironment { private final DataFetchingEnvironment environment; diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java index f18aa056504..6aa5665ea31 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/TransitRouter.java @@ -229,7 +229,10 @@ private Collection fetchAccessEgresses(AccessEgressType typ RouteRequest accessRequest = request.clone(); if (type.isAccess()) { - accessRequest.journey().rental().setAllowArrivingInRentedVehicleAtDestination(false); + accessRequest.withPreferences(p -> { + p.withBike(b -> b.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); + p.withCar(c -> c.withRental(r -> r.withAllowArrivingInRentedVehicleAtDestination(false))); + }); } Duration durationLimit = accessRequest diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java index 115e1264036..2720d67b3b7 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/BikePreferences.java @@ -30,6 +30,7 @@ public final class BikePreferences implements Serializable { private final int switchTime; private final Cost switchCost; private final VehicleParkingPreferences parking; + private final VehicleRentalPreferences rental; private final double stairsReluctance; private final BicycleOptimizeType optimizeType; private final TimeSlopeSafetyTriangle optimizeTriangle; @@ -43,6 +44,7 @@ private BikePreferences() { this.switchTime = 0; this.switchCost = Cost.ZERO; this.parking = VehicleParkingPreferences.DEFAULT; + this.rental = VehicleRentalPreferences.DEFAULT; this.optimizeType = BicycleOptimizeType.SAFE; this.optimizeTriangle = TimeSlopeSafetyTriangle.DEFAULT; // very high reluctance to carry the bike up/down a flight of stairs @@ -58,6 +60,7 @@ private BikePreferences(Builder builder) { this.switchTime = Units.duration(builder.switchTime); this.switchCost = builder.switchCost; this.parking = builder.parking; + this.rental = builder.rental; this.optimizeType = Objects.requireNonNull(builder.optimizeType); this.optimizeTriangle = Objects.requireNonNull(builder.optimizeTriangle); this.stairsReluctance = Units.reluctance(builder.stairsReluctance); @@ -126,6 +129,11 @@ public VehicleParkingPreferences parking() { return parking; } + /** Rental preferences that can be different per request */ + public VehicleRentalPreferences rental() { + return rental; + } + /** * The set of characteristics that the user wants to optimize for -- defaults to SAFE. */ @@ -155,6 +163,7 @@ public boolean equals(Object o) { switchTime == that.switchTime && switchCost.equals(that.switchCost) && parking.equals(that.parking) && + rental.equals(that.rental) && optimizeType == that.optimizeType && optimizeTriangle.equals(that.optimizeTriangle) && doubleEquals(stairsReluctance, that.stairsReluctance) @@ -172,6 +181,7 @@ public int hashCode() { switchTime, switchCost, parking, + rental, optimizeType, optimizeTriangle, stairsReluctance @@ -190,6 +200,7 @@ public String toString() { .addDurationSec("switchTime", switchTime, DEFAULT.switchTime) .addObj("switchCost", switchCost, DEFAULT.switchCost) .addObj("parking", parking, DEFAULT.parking) + .addObj("rental", rental, DEFAULT.rental) .addEnum("optimizeType", optimizeType, DEFAULT.optimizeType) .addObj("optimizeTriangle", optimizeTriangle, DEFAULT.optimizeTriangle) .toString(); @@ -207,6 +218,7 @@ public static class Builder { private int switchTime; private Cost switchCost; private VehicleParkingPreferences parking; + private VehicleRentalPreferences rental; private BicycleOptimizeType optimizeType; private TimeSlopeSafetyTriangle optimizeTriangle; @@ -222,6 +234,7 @@ public Builder(BikePreferences original) { this.switchTime = original.switchTime; this.switchCost = original.switchCost; this.parking = original.parking; + this.rental = original.rental; this.optimizeType = original.optimizeType; this.optimizeTriangle = original.optimizeTriangle; this.stairsReluctance = original.stairsReluctance; @@ -299,6 +312,11 @@ public Builder withParking(Consumer body) { return this; } + public Builder withRental(Consumer body) { + this.rental = ifNotNull(this.rental, original.rental).copyOf().apply(body).build(); + return this; + } + public BicycleOptimizeType optimizeType() { return optimizeType; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java index 523e19afb70..6b103e8f3b7 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/CarPreferences.java @@ -24,6 +24,7 @@ public final class CarPreferences implements Serializable { private final double speed; private final double reluctance; private final VehicleParkingPreferences parking; + private final VehicleRentalPreferences rental; private final int pickupTime; private final Cost pickupCost; private final int dropoffTime; @@ -35,6 +36,7 @@ private CarPreferences() { this.speed = 40.0; this.reluctance = 2.0; this.parking = VehicleParkingPreferences.DEFAULT; + this.rental = VehicleRentalPreferences.DEFAULT; this.pickupTime = 60; this.pickupCost = Cost.costOfMinutes(2); this.dropoffTime = 120; @@ -46,6 +48,7 @@ private CarPreferences(Builder builder) { this.speed = Units.speed(builder.speed); this.reluctance = Units.reluctance(builder.reluctance); this.parking = builder.parking; + this.rental = builder.rental; this.pickupTime = Units.duration(builder.pickupTime); this.pickupCost = builder.pickupCost; this.dropoffTime = Units.duration(builder.dropoffTime); @@ -79,6 +82,11 @@ public VehicleParkingPreferences parking() { return parking; } + /** Rental preferences that can be different per request */ + public VehicleRentalPreferences rental() { + return rental; + } + /** Time of getting in/out of a carPickup (taxi) */ public int pickupTime() { return pickupTime; @@ -122,6 +130,7 @@ public boolean equals(Object o) { DoubleUtils.doubleEquals(that.speed, speed) && DoubleUtils.doubleEquals(that.reluctance, reluctance) && parking.equals(that.parking) && + rental.equals(that.rental) && pickupTime == that.pickupTime && pickupCost.equals(that.pickupCost) && dropoffTime == that.dropoffTime && @@ -136,6 +145,7 @@ public int hashCode() { speed, reluctance, parking, + rental, pickupTime, pickupCost, dropoffTime, @@ -151,6 +161,7 @@ public String toString() { .addNum("speed", speed, DEFAULT.speed) .addNum("reluctance", reluctance, DEFAULT.reluctance) .addObj("parking", parking, DEFAULT.parking) + .addObj("rental", rental, DEFAULT.rental) .addNum("pickupTime", pickupTime, DEFAULT.pickupTime) .addObj("pickupCost", pickupCost, DEFAULT.pickupCost) .addNum("dropoffTime", dropoffTime, DEFAULT.dropoffTime) @@ -166,6 +177,7 @@ public static class Builder { private double speed; private double reluctance; private VehicleParkingPreferences parking; + private VehicleRentalPreferences rental; private int pickupTime; private Cost pickupCost; private int dropoffTime; @@ -177,6 +189,7 @@ public Builder(CarPreferences original) { this.speed = original.speed; this.reluctance = original.reluctance; this.parking = original.parking; + this.rental = original.rental; this.pickupTime = original.pickupTime; this.pickupCost = original.pickupCost; this.dropoffTime = original.dropoffTime; @@ -203,6 +216,11 @@ public Builder withParking(Consumer body) { return this; } + public Builder withRental(Consumer body) { + this.rental = ifNotNull(this.rental, original.rental).copyOf().apply(body).build(); + return this; + } + public Builder withPickupTime(int pickupTime) { this.pickupTime = pickupTime; return this; diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java index b728b99f8e3..15986c130dd 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java @@ -7,6 +7,7 @@ import java.util.Objects; import java.util.function.Consumer; import javax.annotation.Nonnull; +import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.street.search.TraverseMode; /** User/trip cost/time/slack/reluctance search config. */ @@ -22,7 +23,6 @@ public final class RoutingPreferences implements Serializable { private final WheelchairPreferences wheelchair; private final BikePreferences bike; private final CarPreferences car; - private final VehicleRentalPreferences rental; private final SystemPreferences system; private final ItineraryFilterPreferences itineraryFilter; @@ -34,7 +34,6 @@ public RoutingPreferences() { this.wheelchair = WheelchairPreferences.DEFAULT; this.bike = BikePreferences.DEFAULT; this.car = CarPreferences.DEFAULT; - this.rental = VehicleRentalPreferences.DEFAULT; this.system = SystemPreferences.DEFAULT; this.itineraryFilter = ItineraryFilterPreferences.DEFAULT; } @@ -47,7 +46,6 @@ private RoutingPreferences(Builder builder) { this.street = requireNonNull(builder.street()); this.bike = requireNonNull(builder.bike()); this.car = requireNonNull(builder.car()); - this.rental = requireNonNull(builder.rental()); this.system = requireNonNull(builder.system()); this.itineraryFilter = requireNonNull(builder.itineraryFilter()); } @@ -92,10 +90,6 @@ public CarPreferences car() { return car; } - public VehicleRentalPreferences rental() { - return rental; - } - /** * Get parking preferences for the traverse mode. Note, only car and bike are supported. */ @@ -103,6 +97,24 @@ public VehicleParkingPreferences parking(TraverseMode mode) { return mode == TraverseMode.CAR ? car.parking() : bike.parking(); } + /** + * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. + * + * TODO make scooter preferences independent of bike + */ + public VehicleRentalPreferences rental(TraverseMode mode) { + return mode == TraverseMode.CAR ? car.rental() : bike.rental(); + } + + /** + * Get rental preferences for the traverse mode. Note, only car, scooter and bike are supported. + * + * TODO make scooter preferences independent of bike + */ + public VehicleRentalPreferences rental(StreetMode mode) { + return mode == StreetMode.CAR_RENTAL ? car.rental() : bike.rental(); + } + @Nonnull public ItineraryFilterPreferences itineraryFilter() { return itineraryFilter; @@ -169,7 +181,6 @@ public static class Builder { private WheelchairPreferences wheelchair = null; private BikePreferences bike = null; private CarPreferences car = null; - private VehicleRentalPreferences rental = null; private SystemPreferences system = null; private ItineraryFilterPreferences itineraryFilter = null; @@ -250,15 +261,6 @@ public Builder withCar(Consumer body) { return this; } - public VehicleRentalPreferences rental() { - return rental == null ? original.rental : rental; - } - - public Builder withRental(Consumer body) { - this.rental = ifNotNull(this.rental, original.rental).copyOf().apply(body).build(); - return this; - } - public SystemPreferences system() { return system == null ? original.system : system; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java index 85740177659..4ab48a3d88e 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferences.java @@ -2,12 +2,12 @@ import java.io.Serializable; import java.util.Objects; +import java.util.Set; import java.util.function.Consumer; import org.opentripplanner.framework.lang.DoubleUtils; import org.opentripplanner.framework.model.Cost; import org.opentripplanner.framework.model.Units; import org.opentripplanner.framework.tostring.ToStringBuilder; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; /** * Preferences for renting a Bike, Car or other type of vehicle. @@ -24,6 +24,10 @@ public final class VehicleRentalPreferences implements Serializable { private final boolean useAvailabilityInformation; private final double arrivingInRentalVehicleAtDestinationCost; + private final boolean allowArrivingInRentedVehicleAtDestination; + + private final Set allowedNetworks; + private final Set bannedNetworks; private VehicleRentalPreferences() { this.pickupTime = 60; @@ -32,6 +36,9 @@ private VehicleRentalPreferences() { this.dropoffCost = Cost.costOfSeconds(30); this.useAvailabilityInformation = false; this.arrivingInRentalVehicleAtDestinationCost = 0; + this.allowArrivingInRentedVehicleAtDestination = false; + this.allowedNetworks = Set.of(); + this.bannedNetworks = Set.of(); } private VehicleRentalPreferences(Builder builder) { @@ -42,6 +49,10 @@ private VehicleRentalPreferences(Builder builder) { this.useAvailabilityInformation = builder.useAvailabilityInformation; this.arrivingInRentalVehicleAtDestinationCost = DoubleUtils.roundTo1Decimal(builder.arrivingInRentalVehicleAtDestinationCost); + this.allowArrivingInRentedVehicleAtDestination = + builder.allowArrivingInRentedVehicleAtDestination; + this.allowedNetworks = builder.allowedNetworks; + this.bannedNetworks = builder.bannedNetworks; } public static Builder of() { @@ -78,8 +89,6 @@ public int dropoffCost() { /** * Whether or not vehicle rental availability information will be used to plan vehicle rental * trips - * - * TODO: This belong in the request? */ public boolean useAvailabilityInformation() { return useAvailabilityInformation; @@ -87,13 +96,31 @@ public boolean useAvailabilityInformation() { /** * The cost of arriving at the destination with the rented vehicle, to discourage doing so. - * - * @see VehicleRentalRequest#allowArrivingInRentedVehicleAtDestination() */ public double arrivingInRentalVehicleAtDestinationCost() { return arrivingInRentalVehicleAtDestinationCost; } + /** + * Whether arriving at the destination with a rented (station) vehicle is allowed without dropping + * it off. + * + * @see VehicleRentalPreferences#arrivingInRentalVehicleAtDestinationCost() + */ + public boolean allowArrivingInRentedVehicleAtDestination() { + return allowArrivingInRentedVehicleAtDestination; + } + + /** The vehicle rental networks which may be used. If empty all networks may be used. */ + public Set allowedNetworks() { + return allowedNetworks; + } + + /** The vehicle rental networks which may not be used. If empty, no networks are banned. */ + public Set bannedNetworks() { + return bannedNetworks; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -109,7 +136,10 @@ public boolean equals(Object o) { that.arrivingInRentalVehicleAtDestinationCost, arrivingInRentalVehicleAtDestinationCost ) == - 0 + 0 && + allowArrivingInRentedVehicleAtDestination == that.allowArrivingInRentedVehicleAtDestination && + allowedNetworks.equals(that.allowedNetworks) && + bannedNetworks.equals(that.bannedNetworks) ); } @@ -121,7 +151,10 @@ public int hashCode() { dropoffTime, dropoffCost, useAvailabilityInformation, - arrivingInRentalVehicleAtDestinationCost + arrivingInRentalVehicleAtDestinationCost, + allowArrivingInRentedVehicleAtDestination, + allowedNetworks, + bannedNetworks ); } @@ -139,6 +172,12 @@ public String toString() { arrivingInRentalVehicleAtDestinationCost, DEFAULT.arrivingInRentalVehicleAtDestinationCost ) + .addBoolIfTrue( + "allowArrivingInRentedVehicleAtDestination", + allowArrivingInRentedVehicleAtDestination + ) + .addCol("allowedNetworks", allowedNetworks, DEFAULT.allowedNetworks) + .addCol("bannedNetworks", bannedNetworks, DEFAULT.bannedNetworks) .toString(); } @@ -151,6 +190,9 @@ public static class Builder { private Cost dropoffCost; private boolean useAvailabilityInformation; private double arrivingInRentalVehicleAtDestinationCost; + private boolean allowArrivingInRentedVehicleAtDestination; + private Set allowedNetworks; + private Set bannedNetworks; private Builder(VehicleRentalPreferences original) { this.original = original; @@ -161,6 +203,10 @@ private Builder(VehicleRentalPreferences original) { this.useAvailabilityInformation = original.useAvailabilityInformation; this.arrivingInRentalVehicleAtDestinationCost = original.arrivingInRentalVehicleAtDestinationCost; + this.allowArrivingInRentedVehicleAtDestination = + original.allowArrivingInRentedVehicleAtDestination; + this.allowedNetworks = original.allowedNetworks; + this.bannedNetworks = original.bannedNetworks; } public VehicleRentalPreferences original() { @@ -199,6 +245,23 @@ public Builder withArrivingInRentalVehicleAtDestinationCost( return this; } + public Builder withAllowArrivingInRentedVehicleAtDestination( + boolean allowArrivingInRentedVehicleAtDestination + ) { + this.allowArrivingInRentedVehicleAtDestination = allowArrivingInRentedVehicleAtDestination; + return this; + } + + public Builder withAllowedNetworks(Set allowedNetworks) { + this.allowedNetworks = allowedNetworks; + return this; + } + + public Builder withBannedNetworks(Set bannedNetworks) { + this.bannedNetworks = bannedNetworks; + return this; + } + public Builder apply(Consumer body) { body.accept(this); return this; diff --git a/src/main/java/org/opentripplanner/routing/api/request/request/JourneyRequest.java b/src/main/java/org/opentripplanner/routing/api/request/request/JourneyRequest.java index 39a775bf7f5..50e802690b3 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/request/JourneyRequest.java +++ b/src/main/java/org/opentripplanner/routing/api/request/request/JourneyRequest.java @@ -6,18 +6,12 @@ // TODO VIA: Javadoc public class JourneyRequest implements Cloneable, Serializable { - // TODO VIA (Hannes): Move the fields below into StreetRequest - private VehicleRentalRequest rental = new VehicleRentalRequest(); private TransitRequest transit = new TransitRequest(); private StreetRequest access = new StreetRequest(); private StreetRequest egress = new StreetRequest(); private StreetRequest transfer = new StreetRequest(); private StreetRequest direct = new StreetRequest(); - public VehicleRentalRequest rental() { - return rental; - } - public TransitRequest transit() { return transit; } @@ -58,7 +52,6 @@ public RequestModes modes() { public JourneyRequest clone() { try { var clone = (JourneyRequest) super.clone(); - clone.rental = this.rental.clone(); clone.transit = this.transit.clone(); clone.access = this.access.clone(); clone.egress = this.egress.clone(); diff --git a/src/main/java/org/opentripplanner/routing/api/request/request/StreetRequest.java b/src/main/java/org/opentripplanner/routing/api/request/request/StreetRequest.java index 587efda6e05..42928a0a70a 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/request/StreetRequest.java +++ b/src/main/java/org/opentripplanner/routing/api/request/request/StreetRequest.java @@ -4,7 +4,6 @@ import org.opentripplanner.routing.api.request.StreetMode; // TODO VIA: Javadoc -// TODO VIA (Hannes): Missing VehicleRentalRequest and VehicleParkingRequest public class StreetRequest implements Cloneable, Serializable { private StreetMode mode; diff --git a/src/main/java/org/opentripplanner/routing/api/request/request/VehicleRentalRequest.java b/src/main/java/org/opentripplanner/routing/api/request/request/VehicleRentalRequest.java deleted file mode 100644 index 90e39b22ff7..00000000000 --- a/src/main/java/org/opentripplanner/routing/api/request/request/VehicleRentalRequest.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.opentripplanner.routing.api.request.request; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; -import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; - -// TODO VIA: Javadoc -public class VehicleRentalRequest implements Cloneable, Serializable { - - private Set allowedNetworks = Set.of(); - private Set bannedNetworks = Set.of(); - - private boolean allowArrivingInRentedVehicleAtDestination = false; - - // TODO VIA (Hannes): Move useAvailabilityInformation here - - public void setAllowedNetworks(Set allowedNetworks) { - this.allowedNetworks = allowedNetworks; - } - - /** The vehicle rental networks which may be used. If empty all networks may be used. */ - public Set allowedNetworks() { - return allowedNetworks; - } - - public void setBannedNetworks(Set bannedNetworks) { - this.bannedNetworks = bannedNetworks; - } - - /** The vehicle rental networks which may not be used. If empty, no networks are banned. */ - public Set bannedNetworks() { - return bannedNetworks; - } - - public void setAllowArrivingInRentedVehicleAtDestination( - boolean allowArrivingInRentedVehicleAtDestination - ) { - this.allowArrivingInRentedVehicleAtDestination = allowArrivingInRentedVehicleAtDestination; - } - - /** - * Whether arriving at the destination with a rented (station) bicycle is allowed without dropping - * it off. - * - * @see VehicleRentalPreferences#arrivingInRentalVehicleAtDestinationCost() - * @see VehicleRentalStation#isArrivingInRentalVehicleAtDestinationAllowed - */ - public boolean allowArrivingInRentedVehicleAtDestination() { - return allowArrivingInRentedVehicleAtDestination; - } - - public VehicleRentalRequest clone() { - try { - var clone = (VehicleRentalRequest) super.clone(); - clone.allowedNetworks = new HashSet<>(this.allowedNetworks); - clone.bannedNetworks = new HashSet<>(this.bannedNetworks); - - return clone; - } catch (CloneNotSupportedException e) { - /* this will never happen since our super is the cloneable object */ - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java index ee181f7b3c1..1725e7df2dd 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/model/VehicleRentalPlace.java @@ -2,7 +2,7 @@ import java.util.Set; import org.opentripplanner.framework.i18n.I18NString; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; +import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.transit.model.framework.FeedScopedId; @@ -80,22 +80,22 @@ public interface VehicleRentalPlace { /** Deep links for this rental station or individual vehicle */ VehicleRentalStationUris getRentalUris(); - default boolean networkIsNotAllowed(VehicleRentalRequest request) { + default boolean networkIsNotAllowed(VehicleRentalPreferences preferences) { if ( getNetwork() == null && - (!request.allowedNetworks().isEmpty() || !request.bannedNetworks().isEmpty()) + (!preferences.allowedNetworks().isEmpty() || !preferences.bannedNetworks().isEmpty()) ) { return false; } - if (request.bannedNetworks().contains(getNetwork())) { + if (preferences.bannedNetworks().contains(getNetwork())) { return true; } - if (request.allowedNetworks().isEmpty()) { + if (preferences.allowedNetworks().isEmpty()) { return false; } - return !request.allowedNetworks().contains(getNetwork()); + return !preferences.allowedNetworks().contains(getNetwork()); } } diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java index 96bbdaf4c0d..4a18aae03c2 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/street/StreetVehicleRentalLink.java @@ -52,7 +52,8 @@ public State[] traverse(State s0) { return State.empty(); } - if (vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(s0.getRequest().rental())) { + var preferences = s0.getPreferences().rental(s0.getRequest().mode()); + if (vehicleRentalPlaceVertex.getStation().networkIsNotAllowed(preferences)) { return State.empty(); } diff --git a/src/main/java/org/opentripplanner/service/vehiclerental/street/VehicleRentalEdge.java b/src/main/java/org/opentripplanner/service/vehiclerental/street/VehicleRentalEdge.java index 9ec6cf79003..66665f73b54 100644 --- a/src/main/java/org/opentripplanner/service/vehiclerental/street/VehicleRentalEdge.java +++ b/src/main/java/org/opentripplanner/service/vehiclerental/street/VehicleRentalEdge.java @@ -49,10 +49,10 @@ public State[] traverse(State s0) { VehicleRentalPlaceVertex stationVertex = (VehicleRentalPlaceVertex) tov; VehicleRentalPlace station = stationVertex.getStation(); String network = station.getNetwork(); - var preferences = s0.getPreferences(); - boolean realtimeAvailability = preferences.rental().useAvailabilityInformation(); + var preferences = s0.getPreferences().rental(formFactor.traverseMode); + boolean realtimeAvailability = preferences.useAvailabilityInformation(); - if (station.networkIsNotAllowed(s0.getRequest().rental())) { + if (station.networkIsNotAllowed(preferences)) { return State.empty(); } @@ -128,7 +128,7 @@ public State[] traverse(State s0) { s1.beginFloatingVehicleRenting(formFactor, network, false); } else { boolean mayKeep = - s0.getRequest().rental().allowArrivingInRentedVehicleAtDestination() && + preferences.allowArrivingInRentedVehicleAtDestination() && station.isArrivingInRentalVehicleAtDestinationAllowed(); s1.beginVehicleRentingAtStation(formFactor, network, mayKeep, false); } @@ -161,12 +161,8 @@ public State[] traverse(State s0) { } } - s1.incrementWeight( - pickedUp ? preferences.rental().pickupCost() : preferences.rental().dropoffCost() - ); - s1.incrementTimeInSeconds( - pickedUp ? preferences.rental().pickupTime() : preferences.rental().dropoffTime() - ); + s1.incrementWeight(pickedUp ? preferences.pickupCost() : preferences.dropoffCost()); + s1.incrementTimeInSeconds(pickedUp ? preferences.pickupTime() : preferences.dropoffTime()); s1.setBackMode(null); return s1.makeStateArray(); } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index f6a79ea9192..e600f1f8f12 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -170,22 +170,17 @@ cost function. The cost function (`unpreferredCost`) is defined as a linear func TransitPriorityGroupConfig.mapTransitRequest(c, request.journey().transit()); // Map preferences - request.withPreferences(preferences -> mapPreferences(c, request, preferences)); + request.withPreferences(preferences -> mapPreferences(c, preferences)); return request; } - private static void mapPreferences( - NodeAdapter c, - RouteRequest request, - RoutingPreferences.Builder preferences - ) { + private static void mapPreferences(NodeAdapter c, RoutingPreferences.Builder preferences) { preferences.withTransit(it -> mapTransitPreferences(c, it)); preferences.withBike(it -> mapBikePreferences(c, it)); preferences.withStreet(it -> mapStreetPreferences(c, it)); preferences.withCar(it -> mapCarPreferences(c, it)); preferences.withSystem(it -> mapSystemPreferences(c, it)); - preferences.withRental(it -> setVehicleRental(c, request, it)); preferences.withTransfer(it -> mapTransferPreferences(c, it)); preferences.withWalk(it -> mapWalkPreferences(c, it)); preferences.withWheelchair(it -> mapWheelchairPreferences(c, it, WHEELCHAIR_ACCESSIBILITY)); @@ -508,7 +503,8 @@ Vehicle parking tags can originate from different places depending on the origin ) .asStringSet(List.of()) ) - ); + ) + .withRental(it -> setVehicleRental(c, it)); } private static void mapStreetPreferences(NodeAdapter c, StreetPreferences.Builder builder) { @@ -821,7 +817,8 @@ Vehicle parking tags can originate from different places depending on the origin ) .asStringSet(List.of()) ) - ); + ) + .withRental(it -> setVehicleRental(c, it)); } private static void mapSystemPreferences(NodeAdapter c, SystemPreferences.Builder builder) { diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleRentalConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleRentalConfig.java index 94f392cc313..057daa7001c 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleRentalConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/VehicleRentalConfig.java @@ -5,10 +5,7 @@ import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_3; -import org.opentripplanner.routing.api.request.RouteRequest; -import org.opentripplanner.routing.api.request.preference.RoutingPreferences; import org.opentripplanner.routing.api.request.preference.VehicleRentalPreferences; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; public class VehicleRentalConfig { @@ -53,56 +50,42 @@ static void mapRentalPreferences(NodeAdapter c, VehicleRentalPreferences.Builder "The cost of arriving at the destination with the rented vehicle, to discourage doing so." ) .asDouble(dft.arrivingInRentalVehicleAtDestinationCost()) - ); - } - - static void setVehicleRentalRequestOptions(NodeAdapter c, RouteRequest request) { - VehicleRentalRequest vehicleRentalRequest = request.journey().rental(); - - vehicleRentalRequest.setAllowedNetworks( - c - .of("allowedNetworks") - .since(V2_1) - .summary( - "The vehicle rental networks which may be used. If empty all networks may be used." - ) - .asStringSet(vehicleRentalRequest.allowedNetworks()) - ); - vehicleRentalRequest.setBannedNetworks( - c - .of("bannedNetworks") - .since(V2_1) - .summary( - "The vehicle rental networks which may not be used. If empty, no networks are banned." - ) - .asStringSet(vehicleRentalRequest.bannedNetworks()) - ); - - request - .journey() - .rental() - .setAllowArrivingInRentedVehicleAtDestination( + ) + .withAllowArrivingInRentedVehicleAtDestination( c .of("allowKeepingAtDestination") .since(V2_2) .summary( "If a vehicle should be allowed to be kept at the end of a station-based rental." ) - .asBoolean(request.journey().rental().allowArrivingInRentedVehicleAtDestination()) + .asBoolean(dft.allowArrivingInRentedVehicleAtDestination()) + ) + .withAllowedNetworks( + c + .of("allowedNetworks") + .since(V2_1) + .summary( + "The vehicle rental networks which may be used. If empty all networks may be used." + ) + .asStringSet(dft.allowedNetworks()) + ) + .withBannedNetworks( + c + .of("bannedNetworks") + .since(V2_1) + .summary( + "The vehicle rental networks which may not be used. If empty, no networks are banned." + ) + .asStringSet(dft.bannedNetworks()) ); } - static void setVehicleRental( - NodeAdapter c, - RouteRequest request, - VehicleRentalPreferences.Builder preferences - ) { + static void setVehicleRental(NodeAdapter c, VehicleRentalPreferences.Builder preferences) { var vehicleRental = c .of("vehicleRental") .since(V2_3) .summary("Vehicle rental options") .asObject(); mapRentalPreferences(vehicleRental, preferences); - setVehicleRentalRequestOptions(vehicleRental, request); } } diff --git a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java index 4fe66735532..926eebc31d9 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java +++ b/src/main/java/org/opentripplanner/street/model/edge/StreetTransitEntityLink.java @@ -98,7 +98,11 @@ else if ( s0.isRentingVehicleFromStation() && !( s0.mayKeepRentedVehicleAtDestination() && - s0.getRequest().rental().allowArrivingInRentedVehicleAtDestination() + s0 + .getRequest() + .preferences() + .rental(s0.getRequest().mode()) + .allowArrivingInRentedVehicleAtDestination() ) ) { yield State.empty(); @@ -133,12 +137,13 @@ else if ( @Nonnull private State[] buildState(State s0, StateEditor s1, RoutingPreferences pref) { + var rentalPreferences = s0.getRequest().preferences().rental(s0.getRequest().mode()); if ( s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination() && - s0.getRequest().rental().allowArrivingInRentedVehicleAtDestination() + rentalPreferences.allowArrivingInRentedVehicleAtDestination() ) { - s1.incrementWeight(pref.rental().arrivingInRentalVehicleAtDestinationCost()); + s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost()); } s1.setBackMode(null); diff --git a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java index 35045db848a..011d0fec7f1 100644 --- a/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java +++ b/src/main/java/org/opentripplanner/street/model/edge/TemporaryFreeEdge.java @@ -42,12 +42,13 @@ public State[] traverse(State s0) { s1.incrementWeight(1); s1.setBackMode(null); + var rentalPreferences = s0.getPreferences().rental(s0.getRequest().mode()); if ( s0.isRentingVehicleFromStation() && s0.mayKeepRentedVehicleAtDestination() && - s0.getRequest().rental().allowArrivingInRentedVehicleAtDestination() + rentalPreferences.allowArrivingInRentedVehicleAtDestination() ) { - s1.incrementWeight(s0.getPreferences().rental().arrivingInRentalVehicleAtDestinationCost()); + s1.incrementWeight(rentalPreferences.arrivingInRentalVehicleAtDestinationCost()); } return s1.makeStateArray(); diff --git a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequest.java b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequest.java index 6d8bd5783f3..c33ed6a35e9 100644 --- a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequest.java +++ b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequest.java @@ -12,7 +12,6 @@ import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; import org.opentripplanner.street.model.vertex.Vertex; import org.opentripplanner.street.search.intersection_model.IntersectionTraversalCalculator; import org.opentripplanner.street.search.state.State; @@ -39,7 +38,6 @@ public class StreetSearchRequest implements AStarRequest { private final StreetMode mode; private final boolean arriveBy; private final boolean wheelchair; - private final VehicleRentalRequest rental; private final GenericLocation from; private final Envelope fromEnvelope; @@ -60,7 +58,6 @@ private StreetSearchRequest() { this.mode = StreetMode.WALK; this.arriveBy = false; this.wheelchair = false; - this.rental = new VehicleRentalRequest(); this.from = null; this.fromEnvelope = null; this.to = null; @@ -73,7 +70,6 @@ private StreetSearchRequest() { this.mode = builder.mode; this.arriveBy = builder.arriveBy; this.wheelchair = builder.wheelchair; - this.rental = builder.rental; this.from = builder.from; this.fromEnvelope = createEnvelope(from); this.to = builder.to; @@ -115,10 +111,6 @@ public boolean wheelchair() { return wheelchair; } - public VehicleRentalRequest rental() { - return rental; - } - public GenericLocation from() { return from; } diff --git a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestBuilder.java b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestBuilder.java index 439e65a3289..fd2eff30e7e 100644 --- a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestBuilder.java +++ b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestBuilder.java @@ -5,7 +5,6 @@ import org.opentripplanner.model.GenericLocation; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.routing.api.request.preference.RoutingPreferences; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; public class StreetSearchRequestBuilder { @@ -14,7 +13,6 @@ public class StreetSearchRequestBuilder { RoutingPreferences preferences; boolean arriveBy; boolean wheelchair; - VehicleRentalRequest rental; GenericLocation from; GenericLocation to; @@ -24,7 +22,6 @@ public class StreetSearchRequestBuilder { this.preferences = original.preferences(); this.arriveBy = original.arriveBy(); this.wheelchair = original.wheelchair(); - this.rental = original.rental(); this.from = original.from(); this.to = original.to(); } @@ -58,11 +55,6 @@ public StreetSearchRequestBuilder withWheelchair(boolean wheelchair) { return this; } - public StreetSearchRequestBuilder withRental(VehicleRentalRequest rental) { - this.rental = rental; - return this; - } - public StreetSearchRequestBuilder withFrom(GenericLocation from) { this.from = from; return this; diff --git a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestMapper.java b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestMapper.java index 9f1f3c567f8..b4193e709e3 100644 --- a/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestMapper.java +++ b/src/main/java/org/opentripplanner/street/search/request/StreetSearchRequestMapper.java @@ -11,7 +11,6 @@ public static StreetSearchRequestBuilder map(RouteRequest opt) { .withStartTime(opt.dateTime()) .withPreferences(opt.preferences()) .withWheelchair(opt.wheelchair()) - .withRental(opt.journey().rental()) .withFrom(opt.from()) .withTo(opt.to()); } @@ -22,7 +21,6 @@ public static StreetSearchRequestBuilder mapToTransferRequest(RouteRequest opt) .withStartTime(Instant.ofEpochSecond(0)) .withPreferences(opt.preferences()) .withWheelchair(opt.wheelchair()) - .withRental(opt.journey().rental()) .withMode(opt.journey().transfer().mode()); } } diff --git a/src/main/java/org/opentripplanner/street/search/state/State.java b/src/main/java/org/opentripplanner/street/search/state/State.java index 37c3e81c097..deef516a674 100644 --- a/src/main/java/org/opentripplanner/street/search/state/State.java +++ b/src/main/java/org/opentripplanner/street/search/state/State.java @@ -214,7 +214,10 @@ private boolean vehicleRentalIsFinished() { !stateData.insideNoRentalDropOffArea ) || ( - getRequest().rental().allowArrivingInRentedVehicleAtDestination() && + getRequest() + .preferences() + .rental(getRequest().mode()) + .allowArrivingInRentedVehicleAtDestination() && stateData.mayKeepRentedVehicleAtDestination && stateData.vehicleRentalState == VehicleRentalState.RENTING_FROM_STATION ) @@ -503,7 +506,10 @@ private double getWalkDistanceDelta() { private State reversedClone() { StreetSearchRequest reversedRequest = request .copyOfReversed(getTime()) - .withPreferences(p -> p.withRental(r -> r.withUseAvailabilityInformation(false))) + .withPreferences(p -> { + p.withCar(c -> c.withRental(r -> r.withUseAvailabilityInformation(false))); + p.withBike(b -> b.withRental(r -> r.withUseAvailabilityInformation(false))); + }) .build(); StateData newStateData = stateData.clone(); newStateData.backMode = null; diff --git a/src/main/java/org/opentripplanner/street/search/state/StateData.java b/src/main/java/org/opentripplanner/street/search/state/StateData.java index 77d359248aa..cc2bfa5a57a 100644 --- a/src/main/java/org/opentripplanner/street/search/state/StateData.java +++ b/src/main/java/org/opentripplanner/street/search/state/StateData.java @@ -83,10 +83,11 @@ public static List getInitialStateDatas( StreetSearchRequest request, Function stateDataConstructor ) { + var rentalPreferences = request.preferences().rental(request.mode()); return getInitialStateDatas( request.mode(), request.arriveBy(), - request.rental().allowArrivingInRentedVehicleAtDestination(), + rentalPreferences.allowArrivingInRentedVehicleAtDestination(), stateDataConstructor ); } @@ -97,10 +98,11 @@ public static List getInitialStateDatas( * the given {@code request}. */ public static StateData getBaseCaseStateData(StreetSearchRequest request) { + var rentalPreferences = request.preferences().rental(request.mode()); var stateDatas = getInitialStateDatas( request.mode(), request.arriveBy(), - request.rental().allowArrivingInRentedVehicleAtDestination(), + rentalPreferences.allowArrivingInRentedVehicleAtDestination(), StateData::new ); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/BikeRentalSnapshotTest.java b/src/test/java/org/opentripplanner/routing/algorithm/mapping/BikeRentalSnapshotTest.java index 3fef2d957b9..988c6c5abf4 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/BikeRentalSnapshotTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/BikeRentalSnapshotTest.java @@ -89,7 +89,7 @@ public void directBikeRentalArrivingAtDestinationWithDepartAt() { request.journey().setModes(RequestModes.of().withDirectMode(StreetMode.BIKE_RENTAL).build()); request.journey().transit().setFilters(List.of(ExcludeAllTransitFilter.of())); - request.journey().rental().setAllowArrivingInRentedVehicleAtDestination(true); + allowArrivalWithRentalVehicle(request); request.setFrom(p1); request.setTo(p2); @@ -104,7 +104,7 @@ public void directBikeRentalArrivingAtDestinationWithArriveBy() { request.journey().setModes(RequestModes.of().withDirectMode(StreetMode.BIKE_RENTAL).build()); request.journey().transit().setFilters(List.of(ExcludeAllTransitFilter.of())); - request.journey().rental().setAllowArrivingInRentedVehicleAtDestination(true); + allowArrivalWithRentalVehicle(request); request.setFrom(p1); request.setTo(p2); request.setArriveBy(true); @@ -161,4 +161,12 @@ public void egressBikeRental() { expectArriveByToMatchDepartAtAndSnapshot(request); } + + private void allowArrivalWithRentalVehicle(RouteRequest request) { + request.withPreferences(preferences -> + preferences.withBike(bike -> + bike.withRental(rental -> rental.withAllowArrivingInRentedVehicleAtDestination(true)) + ) + ); + } } diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferencesTest.java index 402b885529c..6092c8139bc 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/VehicleRentalPreferencesTest.java @@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertSame; import static org.opentripplanner.routing.api.request.preference.ImmutablePreferencesAsserts.assertEqualsAndHashCode; +import java.util.Set; import org.junit.jupiter.api.Test; class VehicleRentalPreferencesTest { @@ -14,6 +15,10 @@ class VehicleRentalPreferencesTest { public static final int DROPOFF_COST = 450; public static final int ARRIVE_IN_RENTAL_COST = 500; public static final boolean USE_AVAILABILITY_INFORMATION = true; + public static final boolean ALLOW_ARRIVING_IN_RENTED_VEHICLE = true; + public static final Set ALLOWED_NETWORKS = Set.of("foo"); + public static final Set BANNED_NETWORKS = Set.of("bar"); + private final VehicleRentalPreferences subject = VehicleRentalPreferences .of() .withPickupTime(PICKUP_TIME) @@ -22,6 +27,9 @@ class VehicleRentalPreferencesTest { .withDropoffCost(DROPOFF_COST) .withArrivingInRentalVehicleAtDestinationCost(ARRIVE_IN_RENTAL_COST) .withUseAvailabilityInformation(USE_AVAILABILITY_INFORMATION) + .withAllowArrivingInRentedVehicleAtDestination(ALLOW_ARRIVING_IN_RENTED_VEHICLE) + .withAllowedNetworks(ALLOWED_NETWORKS) + .withBannedNetworks(BANNED_NETWORKS) .build(); @Test @@ -54,6 +62,25 @@ void arrivingInRentalVehicleAtDestinationCost() { assertEquals(ARRIVE_IN_RENTAL_COST, subject.arrivingInRentalVehicleAtDestinationCost()); } + @Test + void allowArrivingInRentedVehicleAtDestination() { + assertEquals( + ALLOW_ARRIVING_IN_RENTED_VEHICLE, + subject.allowArrivingInRentedVehicleAtDestination() + ); + } + + @Test + void allowedNetworks() { + assertEquals(ALLOWED_NETWORKS, subject.allowedNetworks()); + } + + @Test + void bannedNetworks() { + assertEquals(BANNED_NETWORKS, subject.bannedNetworks()); + } + + @Test void testOfAndCopyOf() { // Return same object if no value is set assertSame(VehicleRentalPreferences.DEFAULT, VehicleRentalPreferences.of().build()); @@ -78,7 +105,10 @@ void testToString() { "dropoffTime: 45s, " + "dropoffCost: $450, " + "useAvailabilityInformation, " + - "arrivingInRentalVehicleAtDestinationCost: 500.0" + + "arrivingInRentalVehicleAtDestinationCost: 500.0, " + + "allowArrivingInRentedVehicleAtDestination, " + + "allowedNetworks: [foo], " + + "bannedNetworks: [bar]" + "}", subject.toString() ); diff --git a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java index 8131fdd1299..c67d539e902 100644 --- a/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/core/RoutingPreferencesTest.java @@ -24,7 +24,6 @@ public void copyOfShouldReturnTheSameInstanceWhenBuild() { assertSame(pref.wheelchair(), copy.wheelchair()); assertSame(pref.transit(), copy.transit()); assertSame(pref.street(), copy.street()); - assertSame(pref.rental(), copy.rental()); assertSame(pref.itineraryFilter(), copy.itineraryFilter()); assertSame(pref.system(), copy.system()); } @@ -110,16 +109,6 @@ public void copyOfWithStreetChanges() { assertNotSame(pref.street(), copy.street()); } - @Test - public void copyOfWithRentalChanges() { - var pref = new RoutingPreferences(); - var copy = pref.copyOf().withRental(r -> r.withDropoffCost(2)).build(); - - assertNotSame(pref, copy); - assertNotSame(pref.rental(), copy.rental()); - assertSame(pref.itineraryFilter(), copy.itineraryFilter()); - } - @Test public void copyOfWithItineraryFilterChanges() { var pref = new RoutingPreferences(); diff --git a/src/test/java/org/opentripplanner/street/integration/BikeRentalTest.java b/src/test/java/org/opentripplanner/street/integration/BikeRentalTest.java index 634c10863da..0694a991069 100644 --- a/src/test/java/org/opentripplanner/street/integration/BikeRentalTest.java +++ b/src/test/java/org/opentripplanner/street/integration/BikeRentalTest.java @@ -433,8 +433,14 @@ private void assertNoRental( Set allowedNetworks ) { Consumer setter = options -> { - options.journey().rental().setAllowedNetworks(allowedNetworks); - options.journey().rental().setBannedNetworks(bannedNetworks); + options.withPreferences(preferences -> + preferences.withBike(bike -> + bike.withRental(rental -> { + rental.withAllowedNetworks(allowedNetworks); + rental.withBannedNetworks(bannedNetworks); + }) + ) + ); }; assertEquals( @@ -457,8 +463,14 @@ private void assertPathWithNetwork( Set allowedNetworks ) { Consumer setter = options -> { - options.journey().rental().setAllowedNetworks(allowedNetworks); - options.journey().rental().setBannedNetworks(bannedNetworks); + options.withPreferences(preferences -> + preferences.withBike(bike -> + bike.withRental(rental -> { + rental.withAllowedNetworks(allowedNetworks); + rental.withBannedNetworks(bannedNetworks); + }) + ) + ); }; assertEquals( @@ -580,17 +592,15 @@ private List runStreetSearchAndCreateDescriptor( toVertex, arriveBy, options -> { - options.withPreferences(p -> - p.withRental(rental -> - rental - .withUseAvailabilityInformation(useAvailabilityInformation) - .withArrivingInRentalVehicleAtDestinationCost(keepRentedBicycleCost) + options.withPreferences(preferences -> + preferences.withBike(bike -> + bike.withRental(rental -> { + rental.withUseAvailabilityInformation(useAvailabilityInformation); + rental.withArrivingInRentalVehicleAtDestinationCost(keepRentedBicycleCost); + rental.withAllowArrivingInRentedVehicleAtDestination(keepRentedBicycleCost > 0); + }) ) ); - options - .journey() - .rental() - .setAllowArrivingInRentedVehicleAtDestination(keepRentedBicycleCost > 0); } ); } @@ -605,14 +615,16 @@ private List runStreetSearchAndCreateDescriptor( request.setArriveBy(arriveBy); + optionsSetter.accept(request); + request.withPreferences(preferences -> - preferences.withRental(rental -> - rental.withPickupTime(42).withPickupCost(62).withDropoffCost(33).withDropoffTime(15) + preferences.withBike(bike -> + bike.withRental(rental -> + rental.withPickupTime(42).withPickupCost(62).withDropoffCost(33).withDropoffTime(15) + ) ) ); - optionsSetter.accept(request); - return runStreetSearchAndCreateDescriptor( fromVertex, toVertex, diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index 8cdb0bf3ed8..f61c9599685 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.opentripplanner.routing.api.request.StreetMode; -import org.opentripplanner.routing.api.request.request.VehicleRentalRequest; import org.opentripplanner.service.vehiclerental.model.GeofencingZone; import org.opentripplanner.service.vehiclerental.model.RentalVehicleType; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; @@ -219,15 +218,18 @@ private void initEdgeAndRequest( vehicleRentalEdge = VehicleRentalEdge.createVehicleRentalEdge(vertex, RentalFormFactor.BICYCLE); - var rentalRequest = new VehicleRentalRequest(); this.request = StreetSearchRequest .of() .withMode(mode) - .withRental(rentalRequest) .withPreferences(preferences -> preferences - .withRental(rental -> rental.withUseAvailabilityInformation(useRealtime).build()) + .withCar(car -> + car.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) + ) + .withBike(bik -> + bik.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) + ) .build() ) .build(); From 2292858f61e579c70df0150cace195f81aaad3a2 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 15 Dec 2023 21:02:49 +0200 Subject: [PATCH 003/103] Clean up --- .../routing/api/request/preference/RoutingPreferences.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java index 15986c130dd..3230bbf5968 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/RoutingPreferences.java @@ -149,7 +149,6 @@ public boolean equals(Object o) { Objects.equals(wheelchair, that.wheelchair) && Objects.equals(bike, that.bike) && Objects.equals(car, that.car) && - Objects.equals(rental, that.rental) && Objects.equals(system, that.system) && Objects.equals(itineraryFilter, that.itineraryFilter) ); @@ -165,7 +164,6 @@ public int hashCode() { wheelchair, bike, car, - rental, system, itineraryFilter ); From cd0eff7e205f3b8fa7f3a66ea3b9f1f5978cfbe4 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 00:50:41 +0100 Subject: [PATCH 004/103] Add workflow for deploying to a CDN --- .github/workflows/debug-client.yml | 67 ++++++++++++++++++++++++++++++ client-next/vite.config.ts | 2 +- 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/debug-client.yml diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml new file mode 100644 index 00000000000..86c411d088a --- /dev/null +++ b/.github/workflows/debug-client.yml @@ -0,0 +1,67 @@ +name: Debug client + +on: + push: + paths: + - 'client-next/**' + +jobs: + debug-client: + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + # this is necessary so that the correct credentials are put into the git configuration + # when we push to dev-2.x and push the HTML to the git repo + - uses: actions/checkout@v4 + if: github.event_name == 'push' && (github.ref == 'refs/heads/debug-client-cdn' || github.ref == 'refs/heads/master') + with: + token: ${{ secrets.CHANGELOG_TOKEN }} + fetch-depth: 0 + + # for a simple PR where we don't push, we don't need any credentials + - uses: actions/checkout@v4 + if: github.event_name == 'pull_request' + + - uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Build debug client + working-directory: client-next + run: | + npm install + npm run build + + - name: Deploy compiled assets to repo + if: github.event_name == 'push' && github.ref == 'refs/heads/debug-client-cdn' + env: + REMOTE: debug-client + LOCAL_BRANCH: local-assets + REMOTE_BRANCH: main + run: | + git config --global user.name 'OTP Bot' + git config --global user.email 'bot@opentripplanner.org' + + git remote add $REMOTE https://$TOKEN@github.com/opentripplanner/debug-client-assets.git + git fetch --depth=1 $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH + + git checkout $LOCAL_BRANCH + + version=`date +%Y-%m-%dT%H-%M` + + mkdir -p $version + rsync -r client-next/output/* $version + git add $version + git commit -am "Add version ${version} of debug client" + + git push $REMOTE $LOCAL_BRANCH:$REMOTE_BRANCH + + git checkout dev-2.x + git pull + + CLIENT_HTML=src/client/debug-client-preview/index.html + mkdir -p src/client/debug-client-preview/ + # this line is admittedly pretty unreadable it replaces the string "/debug-client-preview/" with the JsDelivr CDN URL prefix + sed "s|\/debug-client-preview\/|https:\/\/cdn.jsdelivr.net\/gh\/opentripplanner\/debug-client-assets@main\/${version}\/|g" ${CLIENT_HTML} + + cat ${CLIENT_HTML} diff --git a/client-next/vite.config.ts b/client-next/vite.config.ts index f5fa0ab82ee..8d3ba8000c7 100644 --- a/client-next/vite.config.ts +++ b/client-next/vite.config.ts @@ -6,7 +6,7 @@ export default defineConfig({ plugins: [react()], base: '/debug-client-preview/', build: { - outDir: '../src/client/debug-client-preview', + outDir: 'output', emptyOutDir: true, }, }); From bc53f9fe3e7ae94c3c7157f92662c59f6d0d6b63 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 17:22:29 +0100 Subject: [PATCH 005/103] Finetune workflow settings --- .github/workflows/cibuild.yml | 6 ----- .github/workflows/debug-client.yml | 38 +++++++++++++++++++++--------- .github/workflows/post-merge.yml | 4 ++++ 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index 01a026a2331..b91ad7d7531 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -39,12 +39,6 @@ jobs: distribution: temurin cache: maven - - name: Build debug client - working-directory: ./client-next - run: | - npm install - npm run build - - name: Prepare coverage agent, build and test # these are split into two steps because otherwise maven keeps long-running HTTP connections # to Maven Central open which then hang during the package phase because the Azure (Github Actions) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index 86c411d088a..87c41621889 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -5,15 +5,19 @@ on: paths: - 'client-next/**' +concurrency: + group: git-commit + jobs: debug-client: + if: github.repository_owner == 'opentripplanner' runs-on: ubuntu-latest timeout-minutes: 20 steps: # this is necessary so that the correct credentials are put into the git configuration # when we push to dev-2.x and push the HTML to the git repo - uses: actions/checkout@v4 - if: github.event_name == 'push' && (github.ref == 'refs/heads/debug-client-cdn' || github.ref == 'refs/heads/master') + if: github.event_name == 'push' && (github.ref == 'refs/heads/dev-2.x') with: token: ${{ secrets.CHANGELOG_TOKEN }} fetch-depth: 0 @@ -33,35 +37,47 @@ jobs: npm run build - name: Deploy compiled assets to repo - if: github.event_name == 'push' && github.ref == 'refs/heads/debug-client-cdn' + if: github.event_name == 'push' && github.ref == 'refs/heads/dev-2.x' env: REMOTE: debug-client LOCAL_BRANCH: local-assets REMOTE_BRANCH: main + TOKEN: ${{ secrets.CHANGELOG_TOKEN }} run: | + # Configure git user git config --global user.name 'OTP Bot' git config --global user.email 'bot@opentripplanner.org' + # Fetch the assets repo git remote add $REMOTE https://$TOKEN@github.com/opentripplanner/debug-client-assets.git git fetch --depth=1 $REMOTE $REMOTE_BRANCH:$LOCAL_BRANCH git checkout $LOCAL_BRANCH - version=`date +%Y-%m-%dT%H-%M` + VERSION=`date +%Y-%m-%dT%H-%M` - mkdir -p $version - rsync -r client-next/output/* $version - git add $version - git commit -am "Add version ${version} of debug client" + # Copy the compiled output to a versioned folder + mkdir -p $VERSION + rsync -r client-next/output/* $VERSION + git add $VERSION + git commit -am "Add version ${VERSION} of debug client" + # Push to assets repo https://github.com/opentripplanner/debug-client-assets git push $REMOTE $LOCAL_BRANCH:$REMOTE_BRANCH + # Switch back to the OTP code git checkout dev-2.x - git pull + git pull --rebase - CLIENT_HTML=src/client/debug-client-preview/index.html + # Modify the compiled output of the index.html to the CDN version + CLIENT_HTML_OUTPUT=src/client/debug-client-preview/index.html mkdir -p src/client/debug-client-preview/ # this line is admittedly pretty unreadable it replaces the string "/debug-client-preview/" with the JsDelivr CDN URL prefix - sed "s|\/debug-client-preview\/|https:\/\/cdn.jsdelivr.net\/gh\/opentripplanner\/debug-client-assets@main\/${version}\/|g" ${CLIENT_HTML} + sed "s|\/debug-client-preview\/|https:\/\/cdn.jsdelivr.net\/gh\/opentripplanner\/debug-client-assets@main\/${VERSION}\/|g" ${CLIENT_HTML_OUTPUT} + + # just to debug + cat ${CLIENT_HTML_OUTPUT} - cat ${CLIENT_HTML} + git add ${CLIENT_HTML_OUTPUT} + git commit -m "Upgrade debug client to version ${VERSION}" + git push origin dev-2.x diff --git a/.github/workflows/post-merge.yml b/.github/workflows/post-merge.yml index 24adaed960a..c17ac51634f 100644 --- a/.github/workflows/post-merge.yml +++ b/.github/workflows/post-merge.yml @@ -5,6 +5,10 @@ on: - dev-2.x types: [closed] +# make sure that only one workflow pushes to Github at the same time +concurrency: + group: git-commit + jobs: changelog-entry: if: github.event.pull_request.merged && github.repository_owner == 'opentripplanner' && !contains(github.event.pull_request.labels.*.name, 'skip changelog') From 15e3977a37dc1e3ec9b83fcd021be4d6b792756e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 17:25:55 +0100 Subject: [PATCH 006/103] Also run on pull requests --- .github/workflows/debug-client.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index 87c41621889..a59f0c401b5 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -4,6 +4,9 @@ on: push: paths: - 'client-next/**' + pull_request: + paths: + - 'client-next/**' concurrency: group: git-commit From 4122ead913b99ee589f07719ac6d8e8cd980ab68 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 17:27:07 +0100 Subject: [PATCH 007/103] Remove build from container image --- .github/workflows/cibuild.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/cibuild.yml b/.github/workflows/cibuild.yml index b91ad7d7531..c2979504992 100644 --- a/.github/workflows/cibuild.yml +++ b/.github/workflows/cibuild.yml @@ -211,11 +211,6 @@ jobs: - uses: actions/setup-node@v3 with: node-version: 18 - - name: Build debug client - working-directory: ./client-next - run: | - npm install - npm run build - name: Build container image with Jib, push to Dockerhub env: CONTAINER_REPO: docker.io/opentripplanner/opentripplanner From 3114904a259421a81f432753a7db7c402559dc90 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 17:30:26 +0100 Subject: [PATCH 008/103] Improve documentation for concurrency groups --- .github/workflows/debug-client.yml | 5 +++-- .github/workflows/post-merge.yml | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index a59f0c401b5..a04bdfcfd5b 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -8,8 +8,9 @@ on: paths: - 'client-next/**' +# to avoid conflicts, make sure that only one workflow pushes to Github at the same time concurrency: - group: git-commit + group: github-push jobs: debug-client: @@ -83,4 +84,4 @@ jobs: git add ${CLIENT_HTML_OUTPUT} git commit -m "Upgrade debug client to version ${VERSION}" - git push origin dev-2.x + git push ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git HEAD:dev-2.x diff --git a/.github/workflows/post-merge.yml b/.github/workflows/post-merge.yml index c17ac51634f..1500a0f9d9e 100644 --- a/.github/workflows/post-merge.yml +++ b/.github/workflows/post-merge.yml @@ -5,9 +5,9 @@ on: - dev-2.x types: [closed] -# make sure that only one workflow pushes to Github at the same time +# to avoid conflicts, make sure that only one workflow pushes to Github at the same time concurrency: - group: git-commit + group: github-push jobs: changelog-entry: From 43d2cd793175df56220a3113826d0a024cc5dab6 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 16 Dec 2023 20:24:46 +0100 Subject: [PATCH 009/103] Build with base --- .github/workflows/debug-client.yml | 18 +++++++++--------- .gitignore | 1 - client-next/README.md | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index a04bdfcfd5b..d1808de0d42 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -19,9 +19,9 @@ jobs: timeout-minutes: 20 steps: # this is necessary so that the correct credentials are put into the git configuration - # when we push to dev-2.x and push the HTML to the git repo + # when we push to dev-2.x and push the compiled output to the git repo - uses: actions/checkout@v4 - if: github.event_name == 'push' && (github.ref == 'refs/heads/dev-2.x') + if: github.event_name == 'push' with: token: ${{ secrets.CHANGELOG_TOKEN }} fetch-depth: 0 @@ -34,11 +34,14 @@ jobs: with: node-version: 18 + - name: Set version + run: echo "VERSION=`date +%Y-%m-%dT%H:%M`" >> $GITHUB_ENV + - name: Build debug client working-directory: client-next run: | npm install - npm run build + npm run build -- --base https://cdn.jsdelivr.net/gh/opentripplanner/debug-client-assets@main/${VERSION}/ - name: Deploy compiled assets to repo if: github.event_name == 'push' && github.ref == 'refs/heads/dev-2.x' @@ -58,11 +61,10 @@ jobs: git checkout $LOCAL_BRANCH - VERSION=`date +%Y-%m-%dT%H-%M` # Copy the compiled output to a versioned folder mkdir -p $VERSION - rsync -r client-next/output/* $VERSION + rsync -r client-next/output/* ./$VERSION/ git add $VERSION git commit -am "Add version ${VERSION} of debug client" @@ -73,15 +75,13 @@ jobs: git checkout dev-2.x git pull --rebase - # Modify the compiled output of the index.html to the CDN version CLIENT_HTML_OUTPUT=src/client/debug-client-preview/index.html mkdir -p src/client/debug-client-preview/ - # this line is admittedly pretty unreadable it replaces the string "/debug-client-preview/" with the JsDelivr CDN URL prefix - sed "s|\/debug-client-preview\/|https:\/\/cdn.jsdelivr.net\/gh\/opentripplanner\/debug-client-assets@main\/${VERSION}\/|g" ${CLIENT_HTML_OUTPUT} + cp client-next/output/index.html ${CLIENT_HTML_OUTPUT} # just to debug cat ${CLIENT_HTML_OUTPUT} - git add ${CLIENT_HTML_OUTPUT} + git add -f ${CLIENT_HTML_OUTPUT} git commit -m "Upgrade debug client to version ${VERSION}" git push ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git HEAD:dev-2.x diff --git a/.gitignore b/.gitignore index b05accf1c7a..a90f06cdcb0 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,6 @@ gen-py/ node_modules/ target/ /graphs -/src/client/debug-client-preview/ # for local dev only /src/test/resources/speedtest/travelSearch-results-*.csv diff --git a/client-next/README.md b/client-next/README.md index 3145f8f6d0e..3ec1af42c8a 100644 --- a/client-next/README.md +++ b/client-next/README.md @@ -62,4 +62,4 @@ or add it to a new `.env.development.local` file (this file will be ignored by g In production mode, the default is to access OTP via the same origin as the client (see `.env`). This behavior can also be modified by changing the previously mentioned environment variable at -build-time. +build-time.. From 2c86a460ed7212d0496e1f9d84ddb1c894a1fc68 Mon Sep 17 00:00:00 2001 From: Henrik Abrahamsson Date: Mon, 18 Dec 2023 10:45:28 +0100 Subject: [PATCH 010/103] Separate code into method --- .../netex/mapping/NetexMapper.java | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java b/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java index 411ac268059..8fc30ae166a 100644 --- a/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java +++ b/src/main/java/org/opentripplanner/netex/mapping/NetexMapper.java @@ -463,35 +463,34 @@ private void mapTripPatterns(Map serviceIds) { .localValues()) { tripPatternMapper .mapTripPattern(journeyPattern) - .ifPresent(result -> { - var journeyPatternExists = transitBuilder - .getTripPatterns() - .get(result.tripPattern().getStopPattern()) - .stream() - .anyMatch(tripPattern -> result.tripPattern().getId().equals(tripPattern.getId())); - if (journeyPatternExists) { - issueStore.add( - "DuplicateJourneyPattern", - "Duplicate of JourneyPattern %s found", - journeyPattern.getId() - ); - } + .ifPresent(this::applyTripPatternMapperResult); + } + } - for (Map.Entry> it : result.tripStopTimes().entrySet()) { - transitBuilder.getStopTimesSortedByTrip().put(it.getKey(), it.getValue()); - transitBuilder.getTripsById().add(it.getKey()); - } + private void applyTripPatternMapperResult(TripPatternMapperResult result) { + var stopPattern = result.tripPattern().getStopPattern(); + var journeyPatternExists = transitBuilder + .getTripPatterns() + .get(stopPattern) + .stream() + .anyMatch(tripPattern -> result.tripPattern().getId().equals(tripPattern.getId())); + if (journeyPatternExists) { + issueStore.add( + "DuplicateJourneyPattern", + "Duplicate of JourneyPattern %s found", + result.tripPattern().getId().getId() + ); + } - transitBuilder - .getTripPatterns() - .put(result.tripPattern().getStopPattern(), result.tripPattern()); - currentMapperIndexes.addStopTimesByNetexId(result.stopTimeByNetexId()); - groupMapper.scheduledStopPointsIndex.putAll( - Multimaps.asMap(result.scheduledStopPointsIndex()) - ); - transitBuilder.getTripOnServiceDates().addAll(result.tripOnServiceDates()); - }); + for (Map.Entry> it : result.tripStopTimes().entrySet()) { + transitBuilder.getStopTimesSortedByTrip().put(it.getKey(), it.getValue()); + transitBuilder.getTripsById().add(it.getKey()); } + + transitBuilder.getTripPatterns().put(stopPattern, result.tripPattern()); + currentMapperIndexes.addStopTimesByNetexId(result.stopTimeByNetexId()); + groupMapper.scheduledStopPointsIndex.putAll(Multimaps.asMap(result.scheduledStopPointsIndex())); + transitBuilder.getTripOnServiceDates().addAll(result.tripOnServiceDates()); } private void mapNoticeAssignments() { From 4b3b953c195b9733443af2b527be09eea94350fe Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Mon, 18 Dec 2023 12:11:48 +0100 Subject: [PATCH 011/103] Use year and month prefixes for version --- .github/workflows/debug-client.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/debug-client.yml b/.github/workflows/debug-client.yml index d1808de0d42..aed7943e63a 100644 --- a/.github/workflows/debug-client.yml +++ b/.github/workflows/debug-client.yml @@ -35,7 +35,7 @@ jobs: node-version: 18 - name: Set version - run: echo "VERSION=`date +%Y-%m-%dT%H:%M`" >> $GITHUB_ENV + run: echo "VERSION=`date +%Y/%m/%Y-%m-%dT%H:%M`" >> $GITHUB_ENV - name: Build debug client working-directory: client-next From 5ba569efac29a6adf41650651f4e051857590ac7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 22:09:46 +0000 Subject: [PATCH 012/103] Update google.dagger.version to v2.50 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 17da0dcfc95..829a59f0102 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 134 30.1 - 2.49 + 2.50 2.16.0 3.1.5 5.10.1 From 90d942487e160d2d7d116825fb10431f13129cd7 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 17 Dec 2023 23:20:41 +0100 Subject: [PATCH 013/103] Move REST API into sandbox --- .../ext/geocoder/GeocoderResource.java | 2 +- .../mapping/AbsoluteDirectionMapper.java | 4 +- .../ext/restapi}/mapping/AgencyMapper.java | 4 +- .../ext/restapi}/mapping/AlertMapper.java | 4 +- .../restapi}/mapping/BikeAccessMapper.java | 2 +- .../restapi}/mapping/BookingInfoMapper.java | 4 +- .../restapi}/mapping/BookingMethodMapper.java | 2 +- .../restapi}/mapping/BookingTimeMapper.java | 4 +- .../restapi}/mapping/ContactInfoMapper.java | 4 +- .../ext/restapi}/mapping/DirectionMapper.java | 2 +- .../ext/restapi}/mapping/ElevationMapper.java | 2 +- .../ext/restapi}/mapping/FareMapper.java | 16 +++--- .../ext/restapi}/mapping/FeedInfoMapper.java | 4 +- .../restapi}/mapping/FeedScopedIdMapper.java | 2 +- .../restapi}/mapping/I18NStringMapper.java | 2 +- .../ext/restapi}/mapping/ItineraryMapper.java | 4 +- .../ext/restapi}/mapping/LegMapper.java | 8 +-- .../ext/restapi}/mapping/LocalDateMapper.java | 2 +- .../ext/restapi}/mapping/ModeMapper.java | 2 +- .../ext/restapi}/mapping/PlaceMapper.java | 8 +-- .../mapping/RelativeDirectionMapper.java | 4 +- .../ext/restapi}/mapping/RouteMapper.java | 6 +-- .../ext/restapi}/mapping/RouteTypeMapper.java | 2 +- .../ext/restapi}/mapping/StopMapper.java | 6 +-- .../mapping/StopTimesInPatternMapper.java | 4 +- .../mapping/StreetNoteMaperMapper.java | 4 +- .../restapi}/mapping/SystemNoticeMapper.java | 4 +- .../ext/restapi}/mapping/TransferMapper.java | 4 +- .../ext/restapi}/mapping/TripMapper.java | 6 +-- .../restapi}/mapping/TripPatternMapper.java | 6 +-- .../ext/restapi}/mapping/TripPlanMapper.java | 4 +- .../mapping/TripSearchMetadataMapper.java | 4 +- .../ext/restapi}/mapping/TripTimeMapper.java | 6 +-- .../mapping/VehicleRentalStationMapper.java | 4 +- .../restapi}/mapping/VertexTypeMapper.java | 4 +- .../ext/restapi}/mapping/WalkStepMapper.java | 8 +-- .../WheelchairAccessibilityMapper.java | 2 +- .../restapi}/model/ApiAbsoluteDirection.java | 2 +- .../ext/restapi}/model/ApiAgency.java | 2 +- .../ext/restapi}/model/ApiAlert.java | 2 +- .../ext/restapi}/model/ApiBookingInfo.java | 2 +- .../ext/restapi}/model/ApiBookingTime.java | 2 +- .../ext/restapi}/model/ApiContactInfo.java | 2 +- .../ext/restapi}/model/ApiCurrency.java | 2 +- .../ext/restapi}/model/ApiFareComponent.java | 3 +- .../ext/restapi}/model/ApiFareProduct.java | 2 +- .../ext/restapi}/model/ApiFareQualifier.java | 2 +- .../ext/restapi}/model/ApiFeedInfo.java | 2 +- .../ext/restapi}/model/ApiItinerary.java | 2 +- .../ext/restapi}/model/ApiItineraryFares.java | 2 +- .../ext/restapi}/model/ApiLeg.java | 2 +- .../ext/restapi}/model/ApiLegProducts.java | 2 +- .../ext/restapi}/model/ApiMoney.java | 2 +- .../ext/restapi}/model/ApiPatternDetail.java | 2 +- .../ext/restapi}/model/ApiPatternShort.java | 2 +- .../ext/restapi}/model/ApiPlace.java | 2 +- .../ext/restapi}/model/ApiRealTimeState.java | 2 +- .../restapi}/model/ApiRelativeDirection.java | 2 +- .../ext/restapi}/model/ApiRoute.java | 2 +- .../ext/restapi}/model/ApiRouteShort.java | 2 +- .../ext/restapi}/model/ApiRouterInfo.java | 4 +- .../ext/restapi}/model/ApiRouterList.java | 2 +- .../ext/restapi}/model/ApiStop.java | 2 +- .../ext/restapi}/model/ApiStopShort.java | 2 +- .../restapi}/model/ApiStopTimesInPattern.java | 2 +- .../ext/restapi}/model/ApiSystemNotice.java | 2 +- .../ext/restapi}/model/ApiTransfer.java | 2 +- .../ext/restapi}/model/ApiTravelOption.java | 2 +- .../restapi}/model/ApiTravelOptionsMaker.java | 2 +- .../ext/restapi}/model/ApiTrip.java | 2 +- .../ext/restapi}/model/ApiTripPlan.java | 2 +- .../restapi}/model/ApiTripSearchMetadata.java | 2 +- .../ext/restapi}/model/ApiTripShort.java | 2 +- .../ext/restapi}/model/ApiTripTimeShort.java | 2 +- .../model/ApiVehicleParkingSpaces.java | 2 +- .../model/ApiVehicleParkingWithEntrance.java | 2 +- .../model/ApiVehicleRentalStation.java | 2 +- .../model/ApiVehicleRentalStationList.java | 2 +- .../ext/restapi}/model/ApiVertexType.java | 2 +- .../ext/restapi}/model/ApiWalkStep.java | 2 +- .../ext/restapi/model}/ElevationMetadata.java | 2 +- .../restapi/model}/TripPlannerResponse.java | 5 +- .../restapi}/model/error/PlannerError.java | 0 .../model/serverinfo/ApiConfigInfo.java | 0 .../model/serverinfo/ApiProjectVersion.java | 0 .../model/serverinfo/ApiServerInfo.java | 0 .../serverinfo/ApiVersionControlInfo.java | 0 .../ext/restapi/resources}/BikeRental.java | 8 +-- .../ext/restapi/resources}/IndexAPI.java | 52 +++++++++---------- .../restapi/resources}/PlannerResource.java | 11 ++-- .../RequestToPreferencesMapper.java | 2 +- .../ext/restapi/resources}/Routers.java | 6 +-- .../restapi/resources}/RoutingResource.java | 4 +- .../resources}/ValidateParameters.java | 2 +- .../ext/restapi/resources}/package-info.java | 2 +- .../ext/vectortiles/VectorTilesResource.java | 2 +- .../DigitransitStationPropertyMapper.java | 4 +- .../layers/stations/StationsLayerBuilder.java | 2 +- .../stops/DigitransitStopPropertyMapper.java | 4 +- .../layers/stops/StopsLayerBuilder.java | 2 +- ...nsitVehicleParkingGroupPropertyMapper.java | 4 +- ...gitransitVehicleParkingPropertyMapper.java | 4 +- ...StadtnaviVehicleParkingPropertyMapper.java | 4 +- .../VehicleParkingGroupsLayerBuilder.java | 2 +- .../VehicleParkingsLayerBuilder.java | 2 +- .../VehicleRentalLayerBuilder.java | 2 +- ...imeVehicleRentalStationPropertyMapper.java | 4 +- ...igitransitRentalVehiclePropertyMapper.java | 2 +- ...igitransitVehicleRentalPropertyMapper.java | 4 +- ...sitVehicleRentalStationPropertyMapper.java | 4 +- .../java/org/opentripplanner/api/package.md | 8 --- .../GraphInspectorVectorTileResource.java | 2 +- .../configuration => apis}/APIEndpoints.java | 10 ++-- .../support => apis/common}/SemanticHash.java | 2 +- .../{api/model => apis/common}/TileJson.java | 2 +- .../json/FeedScopedIdDeserializer.java | 2 +- .../json/FeedScopedIdKeyDeserializer.java | 2 +- .../common}/json/FeedScopedIdSerializer.java | 2 +- .../json/GraphQLResponseSerializer.java | 2 +- .../json/JSONObjectMapperProvider.java | 2 +- .../common}/mapping/PlannerErrorMapper.java | 2 +- .../common}/mapping/PropertyMapper.java | 2 +- .../apis/gtfs/GtfsGraphQLAPI.java | 2 +- .../apis/gtfs/GtfsGraphQLIndex.java | 2 +- .../apis/gtfs/datafetchers/LegImpl.java | 2 +- .../apis/gtfs/datafetchers/PatternImpl.java | 2 +- .../apis/gtfs/datafetchers/PlanImpl.java | 2 +- .../gtfs/datafetchers/RoutingErrorImpl.java | 2 +- .../apis/gtfs/datafetchers/TripImpl.java | 2 +- .../apis/gtfs/mapping/StreetNoteMapper.java | 2 +- .../model/plan/RoutingErrorType.java | 2 +- .../apis/transmodel/model/plan/TripType.java | 2 +- .../support/ExecutionResultMapper.java | 2 +- .../vector/AreaStopsLayerBuilder.java | 2 +- .../DebugClientAreaStopPropertyMapper.java | 4 +- .../inspector/vector/LayerBuilder.java | 2 +- .../inspector/vector/LayerParameters.java | 2 +- .../GeofencingZonesLayerBuilder.java | 2 +- .../GeofencingZonesPropertyMapper.java | 2 +- .../routing/error/PathNotFoundException.java | 4 +- .../standalone/server/OTPWebApplication.java | 6 +-- .../api/mapping/EnumMapperTest.java | 9 ++-- .../api/mapping/FareMapperTest.java | 1 + .../model/ApiApiTravelOptionsMakerTest.java | 2 + .../api/model/ApiWalkStepTest.java | 2 +- .../resources}/PlannerResourceTest.java | 3 +- .../algorithm/mapping/SnapshotTestBase.java | 4 +- 147 files changed, 245 insertions(+), 249 deletions(-) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/AbsoluteDirectionMapper.java (88%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/AgencyMapper.java (89%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/AlertMapper.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/BikeAccessMapper.java (86%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/BookingInfoMapper.java (88%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/BookingMethodMapper.java (94%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/BookingTimeMapper.java (71%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/ContactInfoMapper.java (80%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/DirectionMapper.java (83%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/ElevationMapper.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/FareMapper.java (89%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/FeedInfoMapper.java (84%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/FeedScopedIdMapper.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/I18NStringMapper.java (93%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/ItineraryMapper.java (94%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/LegMapper.java (96%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/LocalDateMapper.java (89%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/ModeMapper.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/PlaceMapper.java (94%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/RelativeDirectionMapper.java (91%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/RouteMapper.java (93%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/RouteTypeMapper.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/StopMapper.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/StopTimesInPatternMapper.java (86%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/StreetNoteMaperMapper.java (91%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/SystemNoticeMapper.java (87%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TransferMapper.java (77%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TripMapper.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TripPatternMapper.java (88%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TripPlanMapper.java (89%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TripSearchMetadataMapper.java (85%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/TripTimeMapper.java (89%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/VehicleRentalStationMapper.java (88%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/VertexTypeMapper.java (83%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/WalkStepMapper.java (84%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/mapping/WheelchairAccessibilityMapper.java (87%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiAbsoluteDirection.java (79%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiAgency.java (93%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiAlert.java (83%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiBookingInfo.java (98%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiBookingTime.java (94%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiContactInfo.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiCurrency.java (71%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiFareComponent.java (76%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiFareProduct.java (91%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiFareQualifier.java (83%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiFeedInfo.java (93%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiItinerary.java (98%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiItineraryFares.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiLeg.java (99%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiLegProducts.java (88%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiMoney.java (56%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiPatternDetail.java (87%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiPatternShort.java (68%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiPlace.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRealTimeState.java (96%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRelativeDirection.java (90%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRoute.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRouteShort.java (85%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRouterInfo.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiRouterList.java (75%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiStop.java (96%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiStopShort.java (92%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiStopTimesInPattern.java (74%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiSystemNotice.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTransfer.java (82%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTravelOption.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTravelOptionsMaker.java (98%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTrip.java (96%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTripPlan.java (90%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTripSearchMetadata.java (98%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTripShort.java (77%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiTripTimeShort.java (93%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiVehicleParkingSpaces.java (97%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiVehicleParkingWithEntrance.java (99%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiVehicleRentalStation.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiVehicleRentalStationList.java (78%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiVertexType.java (81%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/ApiWalkStep.java (98%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/model}/ElevationMetadata.java (83%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/model}/TripPlannerResponse.java (95%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/error/PlannerError.java (100%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/serverinfo/ApiConfigInfo.java (100%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/serverinfo/ApiProjectVersion.java (100%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/serverinfo/ApiServerInfo.java (100%) rename src/{main/java/org/opentripplanner/api => ext/java/org/opentripplanner/ext/restapi}/model/serverinfo/ApiVersionControlInfo.java (100%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/resources}/BikeRental.java (91%) rename src/{main/java/org/opentripplanner/index => ext/java/org/opentripplanner/ext/restapi/resources}/IndexAPI.java (93%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/resources}/PlannerResource.java (93%) rename src/{main/java/org/opentripplanner/api/common => ext/java/org/opentripplanner/ext/restapi/resources}/RequestToPreferencesMapper.java (99%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/resources}/Routers.java (93%) rename src/{main/java/org/opentripplanner/api/common => ext/java/org/opentripplanner/ext/restapi/resources}/RoutingResource.java (99%) rename src/{main/java/org/opentripplanner/index => ext/java/org/opentripplanner/ext/restapi/resources}/ValidateParameters.java (96%) rename src/{main/java/org/opentripplanner/api/resource => ext/java/org/opentripplanner/ext/restapi/resources}/package-info.java (74%) delete mode 100644 src/main/java/org/opentripplanner/api/package.md rename src/main/java/org/opentripplanner/{api/configuration => apis}/APIEndpoints.java (93%) rename src/main/java/org/opentripplanner/{api/support => apis/common}/SemanticHash.java (99%) rename src/main/java/org/opentripplanner/{api/model => apis/common}/TileJson.java (97%) rename src/main/java/org/opentripplanner/{api => apis/common}/json/FeedScopedIdDeserializer.java (95%) rename src/main/java/org/opentripplanner/{api => apis/common}/json/FeedScopedIdKeyDeserializer.java (93%) rename src/main/java/org/opentripplanner/{api => apis/common}/json/FeedScopedIdSerializer.java (97%) rename src/main/java/org/opentripplanner/{api => apis/common}/json/GraphQLResponseSerializer.java (97%) rename src/main/java/org/opentripplanner/{api => apis/common}/json/JSONObjectMapperProvider.java (98%) rename src/main/java/org/opentripplanner/{api => apis/common}/mapping/PlannerErrorMapper.java (97%) rename src/main/java/org/opentripplanner/{api => apis/common}/mapping/PropertyMapper.java (96%) rename src/test/java/org/opentripplanner/{api/common => ext/restapi/resources}/PlannerResourceTest.java (95%) diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java b/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java index d2eafc91e5c..39ed6da297c 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/GeocoderResource.java @@ -14,7 +14,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import org.opentripplanner.api.mapping.FeedScopedIdMapper; +import org.opentripplanner.ext.restapi.mapping.FeedScopedIdMapper; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.opentripplanner.transit.model.site.StopLocation; diff --git a/src/main/java/org/opentripplanner/api/mapping/AbsoluteDirectionMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java similarity index 88% rename from src/main/java/org/opentripplanner/api/mapping/AbsoluteDirectionMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java index 59bb0d77955..8500323c032 100644 --- a/src/main/java/org/opentripplanner/api/mapping/AbsoluteDirectionMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AbsoluteDirectionMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiAbsoluteDirection; +import org.opentripplanner.ext.restapi.model.ApiAbsoluteDirection; import org.opentripplanner.model.plan.AbsoluteDirection; public class AbsoluteDirectionMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/AgencyMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java similarity index 89% rename from src/main/java/org/opentripplanner/api/mapping/AgencyMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java index 9600400d373..4ea3ebb5209 100644 --- a/src/main/java/org/opentripplanner/api/mapping/AgencyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AgencyMapper.java @@ -1,9 +1,9 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiAgency; +import org.opentripplanner.ext.restapi.model.ApiAgency; import org.opentripplanner.transit.model.organization.Agency; public class AgencyMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/AlertMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java similarity index 92% rename from src/main/java/org/opentripplanner/api/mapping/AlertMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java index e01961a5dca..8fbfa71111f 100644 --- a/src/main/java/org/opentripplanner/api/mapping/AlertMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/AlertMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.time.Instant; import java.util.Collection; @@ -7,7 +7,7 @@ import java.util.Locale; import java.util.Optional; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiAlert; +import org.opentripplanner.ext.restapi.model.ApiAlert; import org.opentripplanner.routing.alertpatch.TransitAlert; public class AlertMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/BikeAccessMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java similarity index 86% rename from src/main/java/org/opentripplanner/api/mapping/BikeAccessMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java index 43c00ef8227..3ceb86b4459 100644 --- a/src/main/java/org/opentripplanner/api/mapping/BikeAccessMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BikeAccessMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.transit.model.network.BikeAccess; diff --git a/src/main/java/org/opentripplanner/api/mapping/BookingInfoMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java similarity index 88% rename from src/main/java/org/opentripplanner/api/mapping/BookingInfoMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java index 4f1eb0c6249..4aa8b4a46b1 100644 --- a/src/main/java/org/opentripplanner/api/mapping/BookingInfoMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingInfoMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiBookingInfo; +import org.opentripplanner.ext.restapi.model.ApiBookingInfo; import org.opentripplanner.model.BookingInfo; public class BookingInfoMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/BookingMethodMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java similarity index 94% rename from src/main/java/org/opentripplanner/api/mapping/BookingMethodMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java index b938c1813d2..9b61ff39543 100644 --- a/src/main/java/org/opentripplanner/api/mapping/BookingMethodMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingMethodMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.EnumSet; import java.util.Set; diff --git a/src/main/java/org/opentripplanner/api/mapping/BookingTimeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java similarity index 71% rename from src/main/java/org/opentripplanner/api/mapping/BookingTimeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java index 3a779cbeed4..e40309e9137 100644 --- a/src/main/java/org/opentripplanner/api/mapping/BookingTimeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/BookingTimeMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiBookingTime; +import org.opentripplanner.ext.restapi.model.ApiBookingTime; import org.opentripplanner.model.BookingTime; public class BookingTimeMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/ContactInfoMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java similarity index 80% rename from src/main/java/org/opentripplanner/api/mapping/ContactInfoMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java index d12a06f8e30..452e15a0cb5 100644 --- a/src/main/java/org/opentripplanner/api/mapping/ContactInfoMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ContactInfoMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiContactInfo; +import org.opentripplanner.ext.restapi.model.ApiContactInfo; import org.opentripplanner.transit.model.organization.ContactInfo; public class ContactInfoMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/DirectionMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java similarity index 83% rename from src/main/java/org/opentripplanner/api/mapping/DirectionMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java index 22decc21f81..ea510b1fdc7 100644 --- a/src/main/java/org/opentripplanner/api/mapping/DirectionMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/DirectionMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.transit.model.timetable.Direction; diff --git a/src/main/java/org/opentripplanner/api/mapping/ElevationMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java similarity index 92% rename from src/main/java/org/opentripplanner/api/mapping/ElevationMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java index de5c9f46fdb..192848f04d6 100644 --- a/src/main/java/org/opentripplanner/api/mapping/ElevationMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ElevationMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.model.plan.ElevationProfile; diff --git a/src/main/java/org/opentripplanner/api/mapping/FareMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java similarity index 89% rename from src/main/java/org/opentripplanner/api/mapping/FareMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java index 4d682a1d32c..a6020c6bf37 100644 --- a/src/main/java/org/opentripplanner/api/mapping/FareMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FareMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import com.google.common.collect.Multimap; import java.util.AbstractMap.SimpleEntry; @@ -10,13 +10,13 @@ import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.Nullable; -import org.opentripplanner.api.model.ApiCurrency; -import org.opentripplanner.api.model.ApiFareComponent; -import org.opentripplanner.api.model.ApiFareProduct; -import org.opentripplanner.api.model.ApiFareQualifier; -import org.opentripplanner.api.model.ApiItineraryFares; -import org.opentripplanner.api.model.ApiLegProducts; -import org.opentripplanner.api.model.ApiMoney; +import org.opentripplanner.ext.restapi.model.ApiCurrency; +import org.opentripplanner.ext.restapi.model.ApiFareComponent; +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; diff --git a/src/main/java/org/opentripplanner/api/mapping/FeedInfoMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java similarity index 84% rename from src/main/java/org/opentripplanner/api/mapping/FeedInfoMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java index b8262d726fe..203ade5749e 100644 --- a/src/main/java/org/opentripplanner/api/mapping/FeedInfoMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedInfoMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiFeedInfo; +import org.opentripplanner.ext.restapi.model.ApiFeedInfo; import org.opentripplanner.model.FeedInfo; public class FeedInfoMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/FeedScopedIdMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java similarity index 95% rename from src/main/java/org/opentripplanner/api/mapping/FeedScopedIdMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java index d33d7c53bc1..619c306fbbc 100644 --- a/src/main/java/org/opentripplanner/api/mapping/FeedScopedIdMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/FeedScopedIdMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import jakarta.ws.rs.BadRequestException; import org.opentripplanner.transit.model.framework.AbstractTransitEntity; diff --git a/src/main/java/org/opentripplanner/api/mapping/I18NStringMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java similarity index 93% rename from src/main/java/org/opentripplanner/api/mapping/I18NStringMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java index 6b40a07b953..f7adef24108 100644 --- a/src/main/java/org/opentripplanner/api/mapping/I18NStringMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Locale; import javax.annotation.Nonnull; diff --git a/src/main/java/org/opentripplanner/api/mapping/ItineraryMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java similarity index 94% rename from src/main/java/org/opentripplanner/api/mapping/ItineraryMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java index cf14eda73dd..d87cf33d71c 100644 --- a/src/main/java/org/opentripplanner/api/mapping/ItineraryMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ItineraryMapper.java @@ -1,11 +1,11 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.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.api.model.ApiItinerary; +import org.opentripplanner.ext.restapi.model.ApiItinerary; import org.opentripplanner.model.plan.Itinerary; public class ItineraryMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/LegMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java similarity index 96% rename from src/main/java/org/opentripplanner/api/mapping/LegMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index cc139e5180d..91b41c8ff81 100644 --- a/src/main/java/org/opentripplanner/api/mapping/LegMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -1,14 +1,14 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import static org.opentripplanner.api.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.ext.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.api.model.ApiAlert; -import org.opentripplanner.api.model.ApiLeg; +import org.opentripplanner.ext.restapi.model.ApiAlert; +import org.opentripplanner.ext.restapi.model.ApiLeg; import org.opentripplanner.framework.geometry.EncodedPolyline; import org.opentripplanner.model.PickDrop; import org.opentripplanner.model.plan.Leg; diff --git a/src/main/java/org/opentripplanner/api/mapping/LocalDateMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java similarity index 89% rename from src/main/java/org/opentripplanner/api/mapping/LocalDateMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java index 334efa8c6e8..940bcc13d54 100644 --- a/src/main/java/org/opentripplanner/api/mapping/LocalDateMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LocalDateMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.time.LocalDate; import org.opentripplanner.framework.time.ServiceDateUtils; diff --git a/src/main/java/org/opentripplanner/api/mapping/ModeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java similarity index 97% rename from src/main/java/org/opentripplanner/api/mapping/ModeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java index 3276de080c3..49bd2619149 100644 --- a/src/main/java/org/opentripplanner/api/mapping/ModeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/ModeMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.List; import java.util.Set; diff --git a/src/main/java/org/opentripplanner/api/mapping/PlaceMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java similarity index 94% rename from src/main/java/org/opentripplanner/api/mapping/PlaceMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java index e806c5615d2..3ebdc678f1e 100644 --- a/src/main/java/org/opentripplanner/api/mapping/PlaceMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -8,9 +8,9 @@ import java.util.Locale; import java.util.Optional; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiPlace; -import org.opentripplanner.api.model.ApiVehicleParkingSpaces; -import org.opentripplanner.api.model.ApiVehicleParkingWithEntrance; +import org.opentripplanner.ext.restapi.model.ApiPlace; +import org.opentripplanner.ext.restapi.model.ApiVehicleParkingSpaces; +import org.opentripplanner.ext.restapi.model.ApiVehicleParkingWithEntrance; import org.opentripplanner.model.plan.Place; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.VehicleParkingWithEntrance; diff --git a/src/main/java/org/opentripplanner/api/mapping/RelativeDirectionMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java similarity index 91% rename from src/main/java/org/opentripplanner/api/mapping/RelativeDirectionMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java index 78c4495292c..a1bdd145a55 100644 --- a/src/main/java/org/opentripplanner/api/mapping/RelativeDirectionMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RelativeDirectionMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiRelativeDirection; +import org.opentripplanner.ext.restapi.model.ApiRelativeDirection; import org.opentripplanner.model.plan.RelativeDirection; public class RelativeDirectionMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/RouteMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java similarity index 93% rename from src/main/java/org/opentripplanner/api/mapping/RouteMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java index f64a350092c..374fad1e94b 100644 --- a/src/main/java/org/opentripplanner/api/mapping/RouteMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java @@ -1,10 +1,10 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiRoute; -import org.opentripplanner.api.model.ApiRouteShort; +import org.opentripplanner.ext.restapi.model.ApiRoute; +import org.opentripplanner.ext.restapi.model.ApiRouteShort; import org.opentripplanner.transit.model.network.Route; import org.opentripplanner.transit.model.organization.Branding; diff --git a/src/main/java/org/opentripplanner/api/mapping/RouteTypeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java similarity index 92% rename from src/main/java/org/opentripplanner/api/mapping/RouteTypeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java index af300b1d39a..9dede395e80 100644 --- a/src/main/java/org/opentripplanner/api/mapping/RouteTypeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteTypeMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.transit.model.basic.TransitMode; diff --git a/src/main/java/org/opentripplanner/api/mapping/StopMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java similarity index 95% rename from src/main/java/org/opentripplanner/api/mapping/StopMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java index 954584fd76f..7dc911120d5 100644 --- a/src/main/java/org/opentripplanner/api/mapping/StopMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java @@ -1,10 +1,10 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiStop; -import org.opentripplanner.api.model.ApiStopShort; +import org.opentripplanner.ext.restapi.model.ApiStop; +import org.opentripplanner.ext.restapi.model.ApiStopShort; import org.opentripplanner.transit.model.site.StopLocation; public class StopMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/StopTimesInPatternMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java similarity index 86% rename from src/main/java/org/opentripplanner/api/mapping/StopTimesInPatternMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java index 66da0071959..d917bac9203 100644 --- a/src/main/java/org/opentripplanner/api/mapping/StopTimesInPatternMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopTimesInPatternMapper.java @@ -1,9 +1,9 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiStopTimesInPattern; +import org.opentripplanner.ext.restapi.model.ApiStopTimesInPattern; import org.opentripplanner.model.StopTimesInPattern; public class StopTimesInPatternMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/StreetNoteMaperMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java similarity index 91% rename from src/main/java/org/opentripplanner/api/mapping/StreetNoteMaperMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java index 9ee44d102bb..62926eb6e18 100644 --- a/src/main/java/org/opentripplanner/api/mapping/StreetNoteMaperMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java @@ -1,10 +1,10 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.List; import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiAlert; +import org.opentripplanner.ext.restapi.model.ApiAlert; import org.opentripplanner.street.model.note.StreetNote; public class StreetNoteMaperMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/SystemNoticeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java similarity index 87% rename from src/main/java/org/opentripplanner/api/mapping/SystemNoticeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java index f30a62d2d97..1c79a4a7074 100644 --- a/src/main/java/org/opentripplanner/api/mapping/SystemNoticeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/SystemNoticeMapper.java @@ -1,9 +1,9 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiSystemNotice; +import org.opentripplanner.ext.restapi.model.ApiSystemNotice; import org.opentripplanner.model.SystemNotice; public final class SystemNoticeMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/TransferMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java similarity index 77% rename from src/main/java/org/opentripplanner/api/mapping/TransferMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java index 3004d86aa44..49b87f25779 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TransferMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TransferMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiTransfer; +import org.opentripplanner.ext.restapi.model.ApiTransfer; import org.opentripplanner.model.PathTransfer; public class TransferMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/TripMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java similarity index 92% rename from src/main/java/org/opentripplanner/api/mapping/TripMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java index 33df525a9a7..891741f531e 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TripMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java @@ -1,10 +1,10 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.opentripplanner.api.model.ApiTrip; -import org.opentripplanner.api.model.ApiTripShort; +import org.opentripplanner.ext.restapi.model.ApiTrip; +import org.opentripplanner.ext.restapi.model.ApiTripShort; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.timetable.Trip; diff --git a/src/main/java/org/opentripplanner/api/mapping/TripPatternMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java similarity index 88% rename from src/main/java/org/opentripplanner/api/mapping/TripPatternMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java index 439d2b5fe2f..ba68979c73f 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TripPatternMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPatternMapper.java @@ -1,11 +1,11 @@ -package org.opentripplanner.api.mapping; +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.api.model.ApiPatternDetail; -import org.opentripplanner.api.model.ApiPatternShort; +import org.opentripplanner.ext.restapi.model.ApiPatternDetail; +import org.opentripplanner.ext.restapi.model.ApiPatternShort; import org.opentripplanner.transit.model.network.TripPattern; public class TripPatternMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/TripPlanMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java similarity index 89% rename from src/main/java/org/opentripplanner/api/mapping/TripPlanMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java index 8c5459af8ed..891afcf9542 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TripPlanMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripPlanMapper.java @@ -1,8 +1,8 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Date; import java.util.Locale; -import org.opentripplanner.api.model.ApiTripPlan; +import org.opentripplanner.ext.restapi.model.ApiTripPlan; import org.opentripplanner.model.plan.TripPlan; public class TripPlanMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/TripSearchMetadataMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java similarity index 85% rename from src/main/java/org/opentripplanner/api/mapping/TripSearchMetadataMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java index 0a3b46bb118..db92e821493 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TripSearchMetadataMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripSearchMetadataMapper.java @@ -1,7 +1,7 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.time.Instant; -import org.opentripplanner.api.model.ApiTripSearchMetadata; +import org.opentripplanner.ext.restapi.model.ApiTripSearchMetadata; import org.opentripplanner.routing.api.response.TripSearchMetadata; public class TripSearchMetadataMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/TripTimeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java similarity index 89% rename from src/main/java/org/opentripplanner/api/mapping/TripTimeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java index 2f5bfe91026..3cbb71cdb72 100644 --- a/src/main/java/org/opentripplanner/api/mapping/TripTimeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java @@ -1,10 +1,10 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiRealTimeState; -import org.opentripplanner.api.model.ApiTripTimeShort; +import org.opentripplanner.ext.restapi.model.ApiRealTimeState; +import org.opentripplanner.ext.restapi.model.ApiTripTimeShort; import org.opentripplanner.model.TripTimeOnDate; public class TripTimeMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/VehicleRentalStationMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java similarity index 88% rename from src/main/java/org/opentripplanner/api/mapping/VehicleRentalStationMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java index 482a966dec0..2f68448fdf4 100644 --- a/src/main/java/org/opentripplanner/api/mapping/VehicleRentalStationMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/VehicleRentalStationMapper.java @@ -1,8 +1,8 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import java.util.List; import java.util.Locale; -import org.opentripplanner.api.model.ApiVehicleRentalStation; +import org.opentripplanner.ext.restapi.model.ApiVehicleRentalStation; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; public class VehicleRentalStationMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/VertexTypeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java similarity index 83% rename from src/main/java/org/opentripplanner/api/mapping/VertexTypeMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java index 340be3d60fd..5f59ea4fd57 100644 --- a/src/main/java/org/opentripplanner/api/mapping/VertexTypeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/VertexTypeMapper.java @@ -1,6 +1,6 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import org.opentripplanner.api.model.ApiVertexType; +import org.opentripplanner.ext.restapi.model.ApiVertexType; import org.opentripplanner.model.plan.VertexType; public class VertexTypeMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/WalkStepMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java similarity index 84% rename from src/main/java/org/opentripplanner/api/mapping/WalkStepMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java index 5d633079e4a..fba316d32ba 100644 --- a/src/main/java/org/opentripplanner/api/mapping/WalkStepMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java @@ -1,13 +1,13 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; -import static org.opentripplanner.api.mapping.ElevationMapper.mapElevation; -import static org.opentripplanner.api.mapping.RelativeDirectionMapper.mapRelativeDirection; +import static org.opentripplanner.ext.restapi.mapping.ElevationMapper.mapElevation; +import static org.opentripplanner.ext.restapi.mapping.RelativeDirectionMapper.mapRelativeDirection; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.api.model.ApiWalkStep; +import org.opentripplanner.ext.restapi.model.ApiWalkStep; import org.opentripplanner.model.plan.WalkStep; public class WalkStepMapper { diff --git a/src/main/java/org/opentripplanner/api/mapping/WheelchairAccessibilityMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java similarity index 87% rename from src/main/java/org/opentripplanner/api/mapping/WheelchairAccessibilityMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java index 05d8cc97959..e0aafeaee05 100644 --- a/src/main/java/org/opentripplanner/api/mapping/WheelchairAccessibilityMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WheelchairAccessibilityMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import org.opentripplanner.transit.model.basic.Accessibility; diff --git a/src/main/java/org/opentripplanner/api/model/ApiAbsoluteDirection.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java similarity index 79% rename from src/main/java/org/opentripplanner/api/model/ApiAbsoluteDirection.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java index 48d93618bf7..ffa00cbc54e 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiAbsoluteDirection.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAbsoluteDirection.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * An absolute cardinal or intermediate direction. diff --git a/src/main/java/org/opentripplanner/api/model/ApiAgency.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java similarity index 93% rename from src/main/java/org/opentripplanner/api/model/ApiAgency.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java index e895ea655cd..ada6739a795 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiAgency.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAgency.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiAlert.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java similarity index 83% rename from src/main/java/org/opentripplanner/api/model/ApiAlert.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java index 3c4d77c6129..a503a7d18e2 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiAlert.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiAlert.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.Date; diff --git a/src/main/java/org/opentripplanner/api/model/ApiBookingInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java similarity index 98% rename from src/main/java/org/opentripplanner/api/model/ApiBookingInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java index f3a553fc1f1..c89d6429caa 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiBookingInfo.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingInfo.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.time.Duration; diff --git a/src/main/java/org/opentripplanner/api/model/ApiBookingTime.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java similarity index 94% rename from src/main/java/org/opentripplanner/api/model/ApiBookingTime.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java index e0c140f8ee1..08eee69a3cf 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiBookingTime.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiBookingTime.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import org.opentripplanner.framework.tostring.ToStringBuilder; diff --git a/src/main/java/org/opentripplanner/api/model/ApiContactInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/ApiContactInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java index 06c1fc8d198..b7c2ec90166 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiContactInfo.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiContactInfo.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import org.opentripplanner.framework.tostring.ToStringBuilder; diff --git a/src/main/java/org/opentripplanner/api/model/ApiCurrency.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java similarity index 71% rename from src/main/java/org/opentripplanner/api/model/ApiCurrency.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java index 3835f7986ca..b3cff1eaa93 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiCurrency.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiCurrency.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public record ApiCurrency( String currency, diff --git a/src/main/java/org/opentripplanner/api/model/ApiFareComponent.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java similarity index 76% rename from src/main/java/org/opentripplanner/api/model/ApiFareComponent.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java index 8d6038c487a..e26f859c4f2 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiFareComponent.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareComponent.java @@ -1,7 +1,6 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; -import java.util.Optional; import org.opentripplanner.transit.model.framework.FeedScopedId; public record ApiFareComponent( diff --git a/src/main/java/org/opentripplanner/api/model/ApiFareProduct.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java similarity index 91% rename from src/main/java/org/opentripplanner/api/model/ApiFareProduct.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java index 2beb991855d..af8561b73cb 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiFareProduct.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareProduct.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * A Fares V2 product. This is a type of ticket or monthly pass that customers can buy. diff --git a/src/main/java/org/opentripplanner/api/model/ApiFareQualifier.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java similarity index 83% rename from src/main/java/org/opentripplanner/api/model/ApiFareQualifier.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java index 702caca7a0f..94a3731863a 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiFareQualifier.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFareQualifier.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * Qualifiers for Fares V2 fare products. Qualifiers can be rider categories (youth, senior, veteran) or diff --git a/src/main/java/org/opentripplanner/api/model/ApiFeedInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java similarity index 93% rename from src/main/java/org/opentripplanner/api/model/ApiFeedInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java index a1614ba6391..1b96ee0759d 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiFeedInfo.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiFeedInfo.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiItinerary.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java similarity index 98% rename from src/main/java/org/opentripplanner/api/model/ApiItinerary.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java index e2d205de13e..0bce9426fd8 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiItinerary.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItinerary.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.Calendar; diff --git a/src/main/java/org/opentripplanner/api/model/ApiItineraryFares.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java similarity index 92% rename from src/main/java/org/opentripplanner/api/model/ApiItineraryFares.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java index e908a81b452..a7140e59d4d 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiItineraryFares.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiItineraryFares.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; import java.util.Map; diff --git a/src/main/java/org/opentripplanner/api/model/ApiLeg.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java similarity index 99% rename from src/main/java/org/opentripplanner/api/model/ApiLeg.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java index 87be725615d..7bbd83f7c2d 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiLeg.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLeg.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.Calendar; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiLegProducts.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java similarity index 88% rename from src/main/java/org/opentripplanner/api/model/ApiLegProducts.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java index ef7d95a3abf..abd4643100b 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiLegProducts.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiLegProducts.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.Collection; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiMoney.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java similarity index 56% rename from src/main/java/org/opentripplanner/api/model/ApiMoney.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java index a9a27e828ae..a5f3f840bf6 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiMoney.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiMoney.java @@ -1,3 +1,3 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public record ApiMoney(int cents, ApiCurrency currency) {} diff --git a/src/main/java/org/opentripplanner/api/model/ApiPatternDetail.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java similarity index 87% rename from src/main/java/org/opentripplanner/api/model/ApiPatternDetail.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java index 1acb3acb6d5..d24f7f35c12 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiPatternDetail.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternDetail.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.Collection; diff --git a/src/main/java/org/opentripplanner/api/model/ApiPatternShort.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java similarity index 68% rename from src/main/java/org/opentripplanner/api/model/ApiPatternShort.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java index 0adcb6c2f18..d2acd234f47 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiPatternShort.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPatternShort.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public class ApiPatternShort { diff --git a/src/main/java/org/opentripplanner/api/model/ApiPlace.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/ApiPlace.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java index 3ac922059ee..7cfe3bc7c22 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiPlace.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiPlace.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.Calendar; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiRealTimeState.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java similarity index 96% rename from src/main/java/org/opentripplanner/api/model/ApiRealTimeState.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java index df307007157..d9a068349ec 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRealTimeState.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRealTimeState.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import org.opentripplanner.transit.model.timetable.RealTimeState; diff --git a/src/main/java/org/opentripplanner/api/model/ApiRelativeDirection.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java similarity index 90% rename from src/main/java/org/opentripplanner/api/model/ApiRelativeDirection.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java index e8e1553d51f..02a530f06de 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRelativeDirection.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRelativeDirection.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * Represents a turn direction, relative to the current heading. diff --git a/src/main/java/org/opentripplanner/api/model/ApiRoute.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java similarity index 95% rename from src/main/java/org/opentripplanner/api/model/ApiRoute.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java index 1826091f210..d4ce90d9b23 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRoute.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRoute.java @@ -1,5 +1,5 @@ /* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiRouteShort.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java similarity index 85% rename from src/main/java/org/opentripplanner/api/model/ApiRouteShort.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java index db74e2514cc..a62dcc4bdb6 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRouteShort.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouteShort.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public class ApiRouteShort { diff --git a/src/main/java/org/opentripplanner/api/model/ApiRouterInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/ApiRouterInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java index 3c08defcba5..a0bbb1116b3 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRouterInfo.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterInfo.java @@ -1,9 +1,9 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.Date; import java.util.List; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.ModeMapper; +import org.opentripplanner.ext.restapi.mapping.ModeMapper; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.routing.vehicle_parking.VehicleParkingService; import org.opentripplanner.service.vehiclerental.VehicleRentalService; diff --git a/src/main/java/org/opentripplanner/api/model/ApiRouterList.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java similarity index 75% rename from src/main/java/org/opentripplanner/api/model/ApiRouterList.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java index ec412716202..dd7ef3544af 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiRouterList.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiRouterList.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiStop.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java similarity index 96% rename from src/main/java/org/opentripplanner/api/model/ApiStop.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java index b2604268f76..abe4adb623a 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiStop.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStop.java @@ -1,5 +1,5 @@ /* This file is based on code copied from project OneBusAway, see the LICENSE file for further information. */ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiStopShort.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java similarity index 92% rename from src/main/java/org/opentripplanner/api/model/ApiStopShort.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java index 3fe4daf7c4c..1eafd760248 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiStopShort.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopShort.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/org/opentripplanner/api/model/ApiStopTimesInPattern.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java similarity index 74% rename from src/main/java/org/opentripplanner/api/model/ApiStopTimesInPattern.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java index c0069c1662a..405c200651b 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiStopTimesInPattern.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiStopTimesInPattern.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiSystemNotice.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java similarity index 95% rename from src/main/java/org/opentripplanner/api/model/ApiSystemNotice.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java index ab95bc2034d..dc7eb51177e 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiSystemNotice.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiSystemNotice.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import org.opentripplanner.routing.alertpatch.TransitAlert; import org.opentripplanner.transit.model.basic.Notice; diff --git a/src/main/java/org/opentripplanner/api/model/ApiTransfer.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java similarity index 82% rename from src/main/java/org/opentripplanner/api/model/ApiTransfer.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java index a9d45aac4c1..38cede8c1f1 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTransfer.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTransfer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** Represents a transfer from a stop */ public class ApiTransfer { diff --git a/src/main/java/org/opentripplanner/api/model/ApiTravelOption.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/ApiTravelOption.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java index 06b186969b0..d09de672d91 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTravelOption.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOption.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.HashSet; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiTravelOptionsMaker.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java similarity index 98% rename from src/main/java/org/opentripplanner/api/model/ApiTravelOptionsMaker.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java index 5c0109f8baf..cf424392d70 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTravelOptionsMaker.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMaker.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiTrip.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java similarity index 96% rename from src/main/java/org/opentripplanner/api/model/ApiTrip.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java index 947991ac392..3ff0626c9a8 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTrip.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTrip.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; import java.util.Objects; diff --git a/src/main/java/org/opentripplanner/api/model/ApiTripPlan.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java similarity index 90% rename from src/main/java/org/opentripplanner/api/model/ApiTripPlan.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java index 7c62b6cdd66..bfb812b69c3 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTripPlan.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripPlan.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.Date; diff --git a/src/main/java/org/opentripplanner/api/model/ApiTripSearchMetadata.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java similarity index 98% rename from src/main/java/org/opentripplanner/api/model/ApiTripSearchMetadata.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java index 486118883f9..abe5a74337f 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTripSearchMetadata.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripSearchMetadata.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * Meta-data about the trip search performed. diff --git a/src/main/java/org/opentripplanner/api/model/ApiTripShort.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java similarity index 77% rename from src/main/java/org/opentripplanner/api/model/ApiTripShort.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java index 17560af64ce..cedfa471d4a 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTripShort.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripShort.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public class ApiTripShort { diff --git a/src/main/java/org/opentripplanner/api/model/ApiTripTimeShort.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java similarity index 93% rename from src/main/java/org/opentripplanner/api/model/ApiTripTimeShort.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java index 0a340d4a812..21c6010c5a2 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiTripTimeShort.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiTripTimeShort.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.io.Serializable; diff --git a/src/main/java/org/opentripplanner/api/model/ApiVehicleParkingSpaces.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/ApiVehicleParkingSpaces.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java index 8c4ab4b8fee..bcb10e70f0f 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiVehicleParkingSpaces.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingSpaces.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; public class ApiVehicleParkingSpaces { diff --git a/src/main/java/org/opentripplanner/api/model/ApiVehicleParkingWithEntrance.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java similarity index 99% rename from src/main/java/org/opentripplanner/api/model/ApiVehicleParkingWithEntrance.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java index 8cac78f6c9e..68a9f37dfe4 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiVehicleParkingWithEntrance.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleParkingWithEntrance.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStation.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java similarity index 95% rename from src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStation.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java index 354961bae16..8431ac5c387 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStation.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStation.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStationUris; diff --git a/src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStationList.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java similarity index 78% rename from src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStationList.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java index ed74f8a7ab7..c97a18c337e 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiVehicleRentalStationList.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVehicleRentalStationList.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/model/ApiVertexType.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java similarity index 81% rename from src/main/java/org/opentripplanner/api/model/ApiVertexType.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java index 3bcc4034272..595f0628e0a 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiVertexType.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiVertexType.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; /** * Represent type of vertex, used in Place aka from, to in API for easier client side localization diff --git a/src/main/java/org/opentripplanner/api/model/ApiWalkStep.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java similarity index 98% rename from src/main/java/org/opentripplanner/api/model/ApiWalkStep.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java index 5e810d98602..363a01cb7b5 100644 --- a/src/main/java/org/opentripplanner/api/model/ApiWalkStep.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ApiWalkStep.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import java.util.List; diff --git a/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java b/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java similarity index 83% rename from src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java index 7b11f5fa736..b885883b17e 100644 --- a/src/main/java/org/opentripplanner/api/resource/ElevationMetadata.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/ElevationMetadata.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.resource; +package org.opentripplanner.ext.restapi.model; /** * Contains elevation-specific metadata to be included in the response diff --git a/src/main/java/org/opentripplanner/api/resource/TripPlannerResponse.java b/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java similarity index 95% rename from src/main/java/org/opentripplanner/api/resource/TripPlannerResponse.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java index 970acad5ac2..337301cddfd 100644 --- a/src/main/java/org/opentripplanner/api/resource/TripPlannerResponse.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java @@ -1,12 +1,11 @@ -package org.opentripplanner.api.resource; +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.model.ApiTripPlan; -import org.opentripplanner.api.model.ApiTripSearchMetadata; import org.opentripplanner.api.model.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 { diff --git a/src/main/java/org/opentripplanner/api/model/error/PlannerError.java b/src/ext/java/org/opentripplanner/ext/restapi/model/error/PlannerError.java similarity index 100% rename from src/main/java/org/opentripplanner/api/model/error/PlannerError.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/error/PlannerError.java diff --git a/src/main/java/org/opentripplanner/api/model/serverinfo/ApiConfigInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiConfigInfo.java similarity index 100% rename from src/main/java/org/opentripplanner/api/model/serverinfo/ApiConfigInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiConfigInfo.java diff --git a/src/main/java/org/opentripplanner/api/model/serverinfo/ApiProjectVersion.java b/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiProjectVersion.java similarity index 100% rename from src/main/java/org/opentripplanner/api/model/serverinfo/ApiProjectVersion.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiProjectVersion.java diff --git a/src/main/java/org/opentripplanner/api/model/serverinfo/ApiServerInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiServerInfo.java similarity index 100% rename from src/main/java/org/opentripplanner/api/model/serverinfo/ApiServerInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiServerInfo.java diff --git a/src/main/java/org/opentripplanner/api/model/serverinfo/ApiVersionControlInfo.java b/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiVersionControlInfo.java similarity index 100% rename from src/main/java/org/opentripplanner/api/model/serverinfo/ApiVersionControlInfo.java rename to src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiVersionControlInfo.java diff --git a/src/main/java/org/opentripplanner/api/resource/BikeRental.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java similarity index 91% rename from src/main/java/org/opentripplanner/api/resource/BikeRental.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java index fdac9b39023..0da598f8a3f 100644 --- a/src/main/java/org/opentripplanner/api/resource/BikeRental.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/BikeRental.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.resource; +package org.opentripplanner.ext.restapi.resources; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @@ -12,9 +12,9 @@ import java.util.List; import java.util.Locale; import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.api.mapping.VehicleRentalStationMapper; -import org.opentripplanner.api.model.ApiVehicleRentalStation; -import org.opentripplanner.api.model.ApiVehicleRentalStationList; +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; diff --git a/src/main/java/org/opentripplanner/index/IndexAPI.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java similarity index 93% rename from src/main/java/org/opentripplanner/index/IndexAPI.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java index 74eba3a60b8..90fd12a1c7c 100644 --- a/src/main/java/org/opentripplanner/index/IndexAPI.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java @@ -1,4 +1,4 @@ -package org.opentripplanner.index; +package org.opentripplanner.ext.restapi.resources; import jakarta.ws.rs.BadRequestException; import jakarta.ws.rs.DefaultValue; @@ -25,31 +25,31 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.api.mapping.AgencyMapper; -import org.opentripplanner.api.mapping.AlertMapper; -import org.opentripplanner.api.mapping.FeedInfoMapper; -import org.opentripplanner.api.mapping.FeedScopedIdMapper; -import org.opentripplanner.api.mapping.RouteMapper; -import org.opentripplanner.api.mapping.StopMapper; -import org.opentripplanner.api.mapping.StopTimesInPatternMapper; -import org.opentripplanner.api.mapping.TransferMapper; -import org.opentripplanner.api.mapping.TripMapper; -import org.opentripplanner.api.mapping.TripPatternMapper; -import org.opentripplanner.api.mapping.TripTimeMapper; -import org.opentripplanner.api.model.ApiAgency; -import org.opentripplanner.api.model.ApiAlert; -import org.opentripplanner.api.model.ApiFeedInfo; -import org.opentripplanner.api.model.ApiPatternShort; -import org.opentripplanner.api.model.ApiRoute; -import org.opentripplanner.api.model.ApiRouteShort; -import org.opentripplanner.api.model.ApiStop; -import org.opentripplanner.api.model.ApiStopShort; -import org.opentripplanner.api.model.ApiStopTimesInPattern; -import org.opentripplanner.api.model.ApiTransfer; -import org.opentripplanner.api.model.ApiTrip; -import org.opentripplanner.api.model.ApiTripShort; -import org.opentripplanner.api.model.ApiTripTimeShort; -import org.opentripplanner.api.support.SemanticHash; +import org.opentripplanner.apis.common.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.framework.time.ServiceDateUtils; import org.opentripplanner.model.StopTimesInPattern; diff --git a/src/main/java/org/opentripplanner/api/resource/PlannerResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java similarity index 93% rename from src/main/java/org/opentripplanner/api/resource/PlannerResource.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java index bb2b4f1020a..ac1ee80df95 100644 --- a/src/main/java/org/opentripplanner/api/resource/PlannerResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.resource; +package org.opentripplanner.ext.restapi.resources; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @@ -10,11 +10,12 @@ import jakarta.ws.rs.core.UriInfo; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.common.Message; -import org.opentripplanner.api.common.RoutingResource; -import org.opentripplanner.api.mapping.PlannerErrorMapper; -import org.opentripplanner.api.mapping.TripPlanMapper; -import org.opentripplanner.api.mapping.TripSearchMetadataMapper; import org.opentripplanner.api.model.error.PlannerError; +import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; +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.api.request.RouteRequest; import org.opentripplanner.routing.api.response.RoutingResponse; diff --git a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java similarity index 99% rename from src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java index aa827ae5b4c..78048abffa2 100644 --- a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RequestToPreferencesMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.common; +package org.opentripplanner.ext.restapi.resources; import jakarta.validation.constraints.NotNull; import java.util.function.Consumer; diff --git a/src/main/java/org/opentripplanner/api/resource/Routers.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java similarity index 93% rename from src/main/java/org/opentripplanner/api/resource/Routers.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java index 63ed28fbea3..9cfab49017c 100644 --- a/src/main/java/org/opentripplanner/api/resource/Routers.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/Routers.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.resource; +package org.opentripplanner.ext.restapi.resources; import jakarta.annotation.security.PermitAll; import jakarta.ws.rs.GET; @@ -7,8 +7,8 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; -import org.opentripplanner.api.model.ApiRouterInfo; -import org.opentripplanner.api.model.ApiRouterList; +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; diff --git a/src/main/java/org/opentripplanner/api/common/RoutingResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java similarity index 99% rename from src/main/java/org/opentripplanner/api/common/RoutingResource.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java index 9cb4f139bc4..b727607c8e6 100644 --- a/src/main/java/org/opentripplanner/api/common/RoutingResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/RoutingResource.java @@ -1,7 +1,7 @@ -package org.opentripplanner.api.common; +package org.opentripplanner.ext.restapi.resources; import static org.opentripplanner.api.common.LocationStringParser.fromOldStyleString; -import static org.opentripplanner.api.common.RequestToPreferencesMapper.setIfNotNull; +import static org.opentripplanner.ext.restapi.resources.RequestToPreferencesMapper.setIfNotNull; import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.QueryParam; diff --git a/src/main/java/org/opentripplanner/index/ValidateParameters.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java similarity index 96% rename from src/main/java/org/opentripplanner/index/ValidateParameters.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java index 41149ac31e3..5a94ca318f7 100644 --- a/src/main/java/org/opentripplanner/index/ValidateParameters.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/ValidateParameters.java @@ -1,4 +1,4 @@ -package org.opentripplanner.index; +package org.opentripplanner.ext.restapi.resources; import jakarta.ws.rs.BadRequestException; import java.util.HashSet; diff --git a/src/main/java/org/opentripplanner/api/resource/package-info.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java similarity index 74% rename from src/main/java/org/opentripplanner/api/resource/package-info.java rename to src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java index 4d67f4b2100..7b66666ee5d 100644 --- a/src/main/java/org/opentripplanner/api/resource/package-info.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/package-info.java @@ -2,4 +2,4 @@ * This package contains the JAX-RS-annotated REST resource classes for the OpenTripPlanner public * API, i.e. the Jersey REST endpoints. */ -package org.opentripplanner.api.resource; +package org.opentripplanner.ext.restapi.resources; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index f22145d261d..96093884a25 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -17,7 +17,7 @@ import java.util.Objects; import java.util.function.Predicate; import org.glassfish.grizzly.http.server.Request; -import org.opentripplanner.api.model.TileJson; +import org.opentripplanner.apis.common.TileJson; import org.opentripplanner.ext.vectortiles.layers.stations.StationsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.stops.StopsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.vehicleparkings.VehicleParkingGroupsLayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java index b706a0ae8c3..6e37471495e 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java @@ -6,8 +6,8 @@ import java.util.Map; import java.util.stream.Collectors; import org.json.simple.JSONArray; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.Station; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java index 56e8be7b3e4..1b09d2e8c5d 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java @@ -9,7 +9,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java index 502adc7899f..597480d493b 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java @@ -8,8 +8,8 @@ import java.util.stream.Collectors; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.RegularStop; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java index b6558f3cbe5..e57e3e48cb0 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java index a5bb4ae2c8b..cb2939da610 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java @@ -5,8 +5,8 @@ import java.util.Locale; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; public class DigitransitVehicleParkingGroupPropertyMapper diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java index 993675dcf06..a265d0552d0 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Locale; import javax.annotation.Nonnull; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.routing.vehicle_parking.VehicleParking; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java index 0e7c5cd90e8..8c1e24f8321 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java @@ -4,8 +4,8 @@ import java.util.List; import java.util.Locale; import org.json.simple.JSONObject; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; import org.opentripplanner.routing.vehicle_parking.VehicleParking; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java index f39d042ad6e..59440b78ab7 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java @@ -8,7 +8,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java index 66dde2e4258..7a43044d40c 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java @@ -11,7 +11,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 4e181ed4fa1..06fecf26e57 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -7,7 +7,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java index a6f2aa63fd4..949cb071de4 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java @@ -7,8 +7,8 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java index e1093467d4d..1450b7855bd 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Collection; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java index 1839edf8905..88549242b93 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java index 962c1db4b04..de0d3aa9bc0 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java @@ -5,8 +5,8 @@ import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/src/main/java/org/opentripplanner/api/package.md b/src/main/java/org/opentripplanner/api/package.md deleted file mode 100644 index 5498b2e4c47..00000000000 --- a/src/main/java/org/opentripplanner/api/package.md +++ /dev/null @@ -1,8 +0,0 @@ -# OTP REST API - -This package contains the code which exposes OpenTripPlanner services to the outside world as a REST -API. This includes Jersey REST resource classes (in the "resource" subpackage, picked up by Jersey's -package scanning process), and the classes modeling the structure of the response (in the "model" -subpackage). We provide OTP with the REST API as a embedded standalone Grizzly-based command-line -server. - diff --git a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java index 2c21e0396ce..89905298e66 100644 --- a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java @@ -17,7 +17,7 @@ import java.util.Objects; import java.util.function.Predicate; import org.glassfish.grizzly.http.server.Request; -import org.opentripplanner.api.model.TileJson; +import org.opentripplanner.apis.common.TileJson; import org.opentripplanner.inspector.vector.AreaStopsLayerBuilder; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java b/src/main/java/org/opentripplanner/apis/APIEndpoints.java similarity index 93% rename from src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java rename to src/main/java/org/opentripplanner/apis/APIEndpoints.java index b0d38aa00cd..773dccd9960 100644 --- a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/apis/APIEndpoints.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.configuration; +package org.opentripplanner.apis; import static org.opentripplanner.framework.application.OTPFeature.APIBikeRental; import static org.opentripplanner.framework.application.OTPFeature.APIGraphInspectorTile; @@ -17,11 +17,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -import org.opentripplanner.api.resource.BikeRental; import org.opentripplanner.api.resource.GraphInspectorTileResource; import org.opentripplanner.api.resource.GraphInspectorVectorTileResource; -import org.opentripplanner.api.resource.PlannerResource; -import org.opentripplanner.api.resource.Routers; import org.opentripplanner.api.resource.ServerInfo; import org.opentripplanner.api.resource.UpdaterStatusResource; import org.opentripplanner.apis.gtfs.GtfsGraphQLAPI; @@ -30,10 +27,13 @@ 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.traveltime.TravelTimeResource; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.application.OTPFeature; -import org.opentripplanner.index.IndexAPI; /** * Configure API resource endpoints. diff --git a/src/main/java/org/opentripplanner/api/support/SemanticHash.java b/src/main/java/org/opentripplanner/apis/common/SemanticHash.java similarity index 99% rename from src/main/java/org/opentripplanner/api/support/SemanticHash.java rename to src/main/java/org/opentripplanner/apis/common/SemanticHash.java index bf7e8da8b01..73ef2da906c 100644 --- a/src/main/java/org/opentripplanner/api/support/SemanticHash.java +++ b/src/main/java/org/opentripplanner/apis/common/SemanticHash.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.support; +package org.opentripplanner.apis.common; import com.google.common.hash.HashCode; import com.google.common.hash.HashFunction; diff --git a/src/main/java/org/opentripplanner/api/model/TileJson.java b/src/main/java/org/opentripplanner/apis/common/TileJson.java similarity index 97% rename from src/main/java/org/opentripplanner/api/model/TileJson.java rename to src/main/java/org/opentripplanner/apis/common/TileJson.java index d012241d892..c9b3856e932 100644 --- a/src/main/java/org/opentripplanner/api/model/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/common/TileJson.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.apis.common; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.UriInfo; diff --git a/src/main/java/org/opentripplanner/api/json/FeedScopedIdDeserializer.java b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java similarity index 95% rename from src/main/java/org/opentripplanner/api/json/FeedScopedIdDeserializer.java rename to src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java index aaccc900c1c..b1946038e7e 100644 --- a/src/main/java/org/opentripplanner/api/json/FeedScopedIdDeserializer.java +++ b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.json; +package org.opentripplanner.apis.common.json; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/src/main/java/org/opentripplanner/api/json/FeedScopedIdKeyDeserializer.java b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java similarity index 93% rename from src/main/java/org/opentripplanner/api/json/FeedScopedIdKeyDeserializer.java rename to src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java index a59f46e1052..316894763ad 100644 --- a/src/main/java/org/opentripplanner/api/json/FeedScopedIdKeyDeserializer.java +++ b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.json; +package org.opentripplanner.apis.common.json; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.KeyDeserializer; diff --git a/src/main/java/org/opentripplanner/api/json/FeedScopedIdSerializer.java b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java similarity index 97% rename from src/main/java/org/opentripplanner/api/json/FeedScopedIdSerializer.java rename to src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java index 1e357f642b1..471d80aa915 100644 --- a/src/main/java/org/opentripplanner/api/json/FeedScopedIdSerializer.java +++ b/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.json; +package org.opentripplanner.apis.common.json; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/src/main/java/org/opentripplanner/api/json/GraphQLResponseSerializer.java b/src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java similarity index 97% rename from src/main/java/org/opentripplanner/api/json/GraphQLResponseSerializer.java rename to src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java index caba621294c..de068d170e9 100644 --- a/src/main/java/org/opentripplanner/api/json/GraphQLResponseSerializer.java +++ b/src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.json; +package org.opentripplanner.apis.common.json; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/main/java/org/opentripplanner/api/json/JSONObjectMapperProvider.java b/src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java similarity index 98% rename from src/main/java/org/opentripplanner/api/json/JSONObjectMapperProvider.java rename to src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java index d4138563fc7..6121a0ba698 100644 --- a/src/main/java/org/opentripplanner/api/json/JSONObjectMapperProvider.java +++ b/src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.json; +package org.opentripplanner.apis.common.json; import com.bedatadriven.jackson.datatype.jts.JtsModule; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/org/opentripplanner/api/mapping/PlannerErrorMapper.java b/src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java similarity index 97% rename from src/main/java/org/opentripplanner/api/mapping/PlannerErrorMapper.java rename to src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java index 204495110c1..b85986c930b 100644 --- a/src/main/java/org/opentripplanner/api/mapping/PlannerErrorMapper.java +++ b/src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.apis.common.mapping; import java.util.List; import org.opentripplanner.api.common.Message; diff --git a/src/main/java/org/opentripplanner/api/mapping/PropertyMapper.java b/src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java similarity index 96% rename from src/main/java/org/opentripplanner/api/mapping/PropertyMapper.java rename to src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java index 88f102a2b06..ad2868239a8 100644 --- a/src/main/java/org/opentripplanner/api/mapping/PropertyMapper.java +++ b/src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.apis.common.mapping; import edu.colorado.cires.cmg.mvt.VectorTile; import edu.colorado.cires.cmg.mvt.adapt.jts.IUserDataConverter; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java index 20d15b1cfe8..955fd8222da 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java @@ -21,7 +21,7 @@ import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.Future; -import org.opentripplanner.api.json.GraphQLResponseSerializer; +import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index c70836a581f..9a4283d198a 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -26,7 +26,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.opentripplanner.api.json.GraphQLResponseSerializer; +import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; import org.opentripplanner.apis.gtfs.datafetchers.AgencyImpl; import org.opentripplanner.apis.gtfs.datafetchers.AlertEntityTypeResolver; import org.opentripplanner.apis.gtfs.datafetchers.AlertImpl; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java index b13f6123d4d..639cb95bf28 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/LegImpl.java @@ -6,11 +6,11 @@ import java.util.Objects; import java.util.stream.Collectors; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.LocalDateMapper; 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.NumberMapper; +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/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java index 241434c664f..5c121a6dd07 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java @@ -13,7 +13,7 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.api.support.SemanticHash; +import org.opentripplanner.apis.common.SemanticHash; import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java index 9ae58be1334..36dc4a987d8 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java @@ -3,8 +3,8 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; import java.util.stream.Collectors; -import org.opentripplanner.api.mapping.PlannerErrorMapper; import org.opentripplanner.api.resource.DebugOutput; +import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.StopArrival; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java index 7c516930888..d80db923df6 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java @@ -4,7 +4,7 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; -import org.opentripplanner.api.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; import org.opentripplanner.routing.api.response.RoutingError; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java index 2502d2b9539..c9b1abdaa64 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -15,7 +15,7 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.api.support.SemanticHash; +import org.opentripplanner.apis.common.SemanticHash; import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.GraphQLUtils; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java index baa601c7448..572535a540d 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java @@ -1,6 +1,6 @@ package org.opentripplanner.apis.gtfs.mapping; -import org.opentripplanner.api.mapping.StreetNoteMaperMapper; +import org.opentripplanner.ext.restapi.mapping.StreetNoteMaperMapper; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.alertpatch.TimePeriod; import org.opentripplanner.routing.alertpatch.TransitAlert; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java index 79052f17b69..a8ae74dede2 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java @@ -7,7 +7,7 @@ import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLObjectType; -import org.opentripplanner.api.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; public class RoutingErrorType { diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java index d9c3c0caa02..fcf794a7ca8 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java @@ -8,7 +8,7 @@ import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLObjectType; import java.util.stream.Collectors; -import org.opentripplanner.api.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; import org.opentripplanner.apis.transmodel.model.PlanResponse; import org.opentripplanner.apis.transmodel.support.GqlUtil; import org.opentripplanner.framework.graphql.GraphQLUtils; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java index ecb5a38ef01..e6a5fea3ba0 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java @@ -4,7 +4,7 @@ import graphql.ExecutionResult; import graphql.GraphQLError; import jakarta.ws.rs.core.Response; -import org.opentripplanner.api.json.GraphQLResponseSerializer; +import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; import org.opentripplanner.framework.application.OTPRequestTimeoutException; import org.opentripplanner.framework.http.OtpHttpStatus; diff --git a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java index 1604cf7d8d1..5f268d9f9bf 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TransitService; diff --git a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java index 88f7a17385b..db88579b35f 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java @@ -3,8 +3,8 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TransitService; diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java index 3e796487271..cec59ef136f 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java @@ -10,7 +10,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.framework.geometry.GeometryUtils; /** diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index 2718c649797..a36fdfad840 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,6 +1,6 @@ package org.opentripplanner.inspector.vector; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; /** * Configuration options for a single vector tile layer. diff --git a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java index 8a77b8502ea..3948f95e8ee 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java @@ -4,7 +4,7 @@ import java.util.Map; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java index 0d0f7b44fe9..7321727076c 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java @@ -6,7 +6,7 @@ import java.util.Collection; import java.util.List; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.common.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.street.model.vertex.Vertex; diff --git a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java index 18d94d23038..f0a2c854015 100644 --- a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java +++ b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java @@ -1,9 +1,11 @@ package org.opentripplanner.routing.error; +import org.opentripplanner.ext.restapi.resources.PlannerResource; + /** * Indicates that the call to org.opentripplanner.routing.services.PathService returned either null * or ZERO paths. * - * @see org.opentripplanner.api.resource.PlannerResource for where this is (locally) thrown. + * @see PlannerResource for where this is (locally) thrown. */ public class PathNotFoundException extends RuntimeException {} diff --git a/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java b/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java index 56aaa2d1361..5612d98ea0c 100644 --- a/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java +++ b/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java @@ -7,7 +7,6 @@ import io.micrometer.prometheus.PrometheusMeterRegistry; import jakarta.ws.rs.container.ContainerResponseFilter; import jakarta.ws.rs.core.Application; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -17,10 +16,9 @@ import org.glassfish.jersey.internal.inject.AbstractBinder; import org.glassfish.jersey.internal.inject.Binder; import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider; -import org.glassfish.jersey.server.ServerProperties; import org.opentripplanner.api.common.OTPExceptionMapper; -import org.opentripplanner.api.configuration.APIEndpoints; -import org.opentripplanner.api.json.JSONObjectMapperProvider; +import org.opentripplanner.apis.APIEndpoints; +import org.opentripplanner.apis.common.json.JSONObjectMapperProvider; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.slf4j.bridge.SLF4JBridgeHandler; diff --git a/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java b/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java index 184e6b7e6d7..956b2aa065e 100644 --- a/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java +++ b/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java @@ -8,9 +8,12 @@ import java.util.Map; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.opentripplanner.api.model.ApiAbsoluteDirection; -import org.opentripplanner.api.model.ApiRelativeDirection; -import org.opentripplanner.api.model.ApiVertexType; +import org.opentripplanner.ext.restapi.mapping.AbsoluteDirectionMapper; +import org.opentripplanner.ext.restapi.mapping.RelativeDirectionMapper; +import org.opentripplanner.ext.restapi.mapping.VertexTypeMapper; +import org.opentripplanner.ext.restapi.model.ApiAbsoluteDirection; +import org.opentripplanner.ext.restapi.model.ApiRelativeDirection; +import org.opentripplanner.ext.restapi.model.ApiVertexType; import org.opentripplanner.model.plan.AbsoluteDirection; import org.opentripplanner.model.plan.RelativeDirection; import org.opentripplanner.model.plan.VertexType; diff --git a/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java b/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java index 44fb360efd2..0d13a77e7c9 100644 --- a/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java +++ b/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Locale; import org.junit.jupiter.api.Test; +import org.opentripplanner.ext.restapi.mapping.FareMapper; import org.opentripplanner.model.fare.ItineraryFares; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.PlanTestConstants; diff --git a/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java b/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java index 9429151a422..16e0ae1547e 100644 --- a/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java +++ b/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; +import org.opentripplanner.ext.restapi.model.ApiTravelOption; +import org.opentripplanner.ext.restapi.model.ApiTravelOptionsMaker; import org.opentripplanner.transit.model.basic.TransitMode; /** diff --git a/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java b/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java index 44be1348eee..fe265b05081 100644 --- a/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java +++ b/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java @@ -2,9 +2,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.opentripplanner.ext.restapi.model.ApiWalkStep; public class ApiWalkStepTest { diff --git a/src/test/java/org/opentripplanner/api/common/PlannerResourceTest.java b/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java similarity index 95% rename from src/test/java/org/opentripplanner/api/common/PlannerResourceTest.java rename to src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java index 36e0650b081..a86e270a2af 100644 --- a/src/test/java/org/opentripplanner/api/common/PlannerResourceTest.java +++ b/src/test/java/org/opentripplanner/ext/restapi/resources/PlannerResourceTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.common; +package org.opentripplanner.ext.restapi.resources; import static graphql.Assert.assertNotNull; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -12,7 +12,6 @@ import org.opentripplanner.TestServerContext; import org.opentripplanner._support.time.ZoneIds; import org.opentripplanner.api.parameter.QualifiedModeSet; -import org.opentripplanner.api.resource.PlannerResource; import org.opentripplanner.routing.api.request.RequestModes; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.standalone.api.OtpServerRequestContext; diff --git a/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java b/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java index bf0e62dbc19..8dbf5536ea2 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/mapping/SnapshotTestBase.java @@ -36,11 +36,11 @@ import org.opentripplanner.ConstantsForTests; import org.opentripplanner.TestOtpModel; import org.opentripplanner.TestServerContext; -import org.opentripplanner.api.mapping.ItineraryMapper; -import org.opentripplanner.api.model.ApiLeg; 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.framework.time.TimeUtils; import org.opentripplanner.model.GenericLocation; import org.opentripplanner.model.plan.Itinerary; From 48572ef615d63fc55d131acee23c669fa350fb81 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 17 Dec 2023 23:31:19 +0100 Subject: [PATCH 014/103] Add (enabled) feature switch for LegacyRestApi --- docs/Configuration.md | 2 ++ .../java/org/opentripplanner/apis/APIEndpoints.java | 10 +++++----- .../framework/application/OTPFeature.java | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index f1c0af287ab..40e340aa4e7 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -235,6 +235,8 @@ Here is a list of all features which can be toggled on/off and their default val | `ParallelRouting` | Enable performing parts of the trip planning in parallel. | | | | `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little. | ✓️ | | | `TransmodelGraphQlApi` | Enable Transmodel (NeTEx) GraphQL API. | ✓️ | ✓️ | +| `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_(GTFS) and Interchanges(NeTEx). Turing this _off_ will increase the routing performance a little. | ✓️ | | +| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | | `ActuatorAPI` | Endpoint for actuators (service health status). | | ✓️ | | `AsyncGraphQLFetchers` | Whether the @async annotation in the GraphQL schema should lead to the fetch being executed asynchronously. This allows batch or alias queries to run in parallel at the cost of consuming extra threads. | | | | `Co2Emissions` | Enable the emissions sandbox module. | | ✓️ | diff --git a/src/main/java/org/opentripplanner/apis/APIEndpoints.java b/src/main/java/org/opentripplanner/apis/APIEndpoints.java index 773dccd9960..04a0e3a145a 100644 --- a/src/main/java/org/opentripplanner/apis/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/apis/APIEndpoints.java @@ -6,6 +6,7 @@ import static org.opentripplanner.framework.application.OTPFeature.APIUpdaterStatus; import static org.opentripplanner.framework.application.OTPFeature.ActuatorAPI; 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; @@ -43,13 +44,12 @@ public class APIEndpoints { private final List> resources = new ArrayList<>(); private APIEndpoints() { - // Add mandatory APIs - add(Routers.class); - add(PlannerResource.class); - add(IndexAPI.class); - // Add feature enabled APIs, these can be enabled by default, some is not. // See the OTPFeature enum for details. + addIfEnabled(LegacyRestApi, Routers.class); + addIfEnabled(LegacyRestApi, PlannerResource.class); + addIfEnabled(LegacyRestApi, IndexAPI.class); + addIfEnabled(APIBikeRental, BikeRental.class); addIfEnabled(APIGraphInspectorTile, GraphInspectorTileResource.class); addIfEnabled(APIGraphInspectorTile, GraphInspectorVectorTileResource.class); diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 05d1284a883..766fb136ecd 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -64,6 +64,7 @@ public enum OTPFeature { "Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little." ), TransmodelGraphQlApi(true, true, "Enable Transmodel (NeTEx) GraphQL API."), + LegacyRestApi(true, true, "Enable legacy REST API. This API will be removed in the future."), /* Sandbox extension features - Must be turned OFF by default */ From 21ec80c2f25bc0c93a070cd76ade29f9436b3ca9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 19 Dec 2023 00:17:01 +0100 Subject: [PATCH 015/103] Regenerate docs --- docs/Configuration.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index 40e340aa4e7..7da21ea2175 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -235,7 +235,6 @@ Here is a list of all features which can be toggled on/off and their default val | `ParallelRouting` | Enable performing parts of the trip planning in parallel. | | | | `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little. | ✓️ | | | `TransmodelGraphQlApi` | Enable Transmodel (NeTEx) GraphQL API. | ✓️ | ✓️ | -| `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_(GTFS) and Interchanges(NeTEx). Turing this _off_ will increase the routing performance a little. | ✓️ | | | `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | | `ActuatorAPI` | Endpoint for actuators (service health status). | | ✓️ | | `AsyncGraphQLFetchers` | Whether the @async annotation in the GraphQL schema should lead to the fetch being executed asynchronously. This allows batch or alias queries to run in parallel at the cost of consuming extra threads. | | | From 8768380908eabfcb3ab2c2295dfbdde9f5724232 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 20 Dec 2023 12:21:08 +0100 Subject: [PATCH 016/103] Apply review feedback --- docs/Configuration.md | 2 +- .../org/opentripplanner/ext/restapi/mapping/LegMapper.java | 1 + .../org/opentripplanner/ext/restapi/mapping/PlaceMapper.java | 1 + .../org/opentripplanner/ext/restapi/mapping/RouteMapper.java | 1 + .../org/opentripplanner/ext/restapi/mapping/StopMapper.java | 1 + .../org/opentripplanner/ext/restapi/mapping/TripMapper.java | 1 + .../opentripplanner/ext/restapi/mapping/TripTimeMapper.java | 1 + .../layers/stations/DigitransitStationPropertyMapper.java | 2 +- .../layers/stops/DigitransitStopPropertyMapper.java | 2 +- .../DigitransitVehicleParkingGroupPropertyMapper.java | 2 +- .../DigitransitVehicleParkingPropertyMapper.java | 2 +- .../StadtnaviVehicleParkingPropertyMapper.java | 2 +- ...igitransitRealtimeVehicleRentalStationPropertyMapper.java | 2 +- .../mapper/DigitransitVehicleRentalPropertyMapper.java | 2 +- .../DigitransitVehicleRentalStationPropertyMapper.java | 2 +- .../restapi/mapping => framework/i18n}/I18NStringMapper.java | 5 ++--- .../java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java | 2 +- .../java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java | 2 +- .../apis/transmodel/support/ExecutionResultMapper.java | 2 +- .../opentripplanner/framework/application/OTPFeature.java | 2 +- .../graphql}/GraphQLResponseSerializer.java | 3 ++- .../inspector/vector/DebugClientAreaStopPropertyMapper.java | 2 +- 22 files changed, 24 insertions(+), 18 deletions(-) rename src/ext/java/org/opentripplanner/{ext/restapi/mapping => framework/i18n}/I18NStringMapper.java (76%) rename src/main/java/org/opentripplanner/{apis/common/json => framework/graphql}/GraphQLResponseSerializer.java (94%) diff --git a/docs/Configuration.md b/docs/Configuration.md index 7da21ea2175..a0161c4ae20 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -235,7 +235,6 @@ Here is a list of all features which can be toggled on/off and their default val | `ParallelRouting` | Enable performing parts of the trip planning in parallel. | | | | `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little. | ✓️ | | | `TransmodelGraphQlApi` | Enable Transmodel (NeTEx) GraphQL API. | ✓️ | ✓️ | -| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | | `ActuatorAPI` | Endpoint for actuators (service health status). | | ✓️ | | `AsyncGraphQLFetchers` | Whether the @async annotation in the GraphQL schema should lead to the fetch being executed asynchronously. This allows batch or alias queries to run in parallel at the cost of consuming extra threads. | | | | `Co2Emissions` | Enable the emissions sandbox module. | | ✓️ | @@ -243,6 +242,7 @@ 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. | ✓️ | ✓️ | | `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! | | | diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index 91b41c8ff81..f16a9e8fbf5 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -10,6 +10,7 @@ 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; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java index 3ebdc678f1e..b1eb3410af8 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/PlaceMapper.java @@ -11,6 +11,7 @@ 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; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java index 374fad1e94b..decee369a17 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/RouteMapper.java @@ -5,6 +5,7 @@ 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; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java index 7dc911120d5..9e3c8b04262 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/StopMapper.java @@ -5,6 +5,7 @@ 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 { diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java index 891741f531e..f4894a4a7a3 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripMapper.java @@ -5,6 +5,7 @@ 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; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java index 3cbb71cdb72..f1f37e6d8b4 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/TripTimeMapper.java @@ -5,6 +5,7 @@ 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 { diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java index 6e37471495e..b7b21e01c38 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import org.json.simple.JSONArray; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.Station; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java index 597480d493b..d2b72e36cd3 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java @@ -9,7 +9,7 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.network.TripPattern; import org.opentripplanner.transit.model.site.RegularStop; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java index cb2939da610..66cb6060ca9 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java @@ -6,7 +6,7 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; public class DigitransitVehicleParkingGroupPropertyMapper diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java index a265d0552d0..27d2b78776b 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java @@ -6,7 +6,7 @@ import java.util.Locale; import javax.annotation.Nonnull; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.routing.vehicle_parking.VehicleParking; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java index 8c1e24f8321..7ff573864a2 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java @@ -5,7 +5,7 @@ import java.util.Locale; import org.json.simple.JSONObject; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; import org.opentripplanner.routing.vehicle_parking.VehicleParking; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java index 949cb071de4..87b5cf9e126 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Locale; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java index 88549242b93..90e553e6320 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Locale; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java index de0d3aa9bc0..6d82f592b38 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java @@ -6,7 +6,7 @@ import java.util.Locale; import java.util.stream.Collectors; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java b/src/ext/java/org/opentripplanner/framework/i18n/I18NStringMapper.java similarity index 76% rename from src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java rename to src/ext/java/org/opentripplanner/framework/i18n/I18NStringMapper.java index f7adef24108..acdb30b301f 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/I18NStringMapper.java +++ b/src/ext/java/org/opentripplanner/framework/i18n/I18NStringMapper.java @@ -1,9 +1,8 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.framework.i18n; import java.util.Locale; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.opentripplanner.framework.i18n.I18NString; public class I18NStringMapper { @@ -24,7 +23,7 @@ public String mapNonnullToApi(I18NString string) { } @Nullable - static String mapToApi(I18NString string, Locale locale) { + public static String mapToApi(I18NString string, Locale locale) { return string == null ? null : string.toString(locale); } } diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java index 955fd8222da..b9b93190816 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLAPI.java @@ -21,7 +21,7 @@ import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.Future; -import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; +import org.opentripplanner.framework.graphql.GraphQLResponseSerializer; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java index 9a4283d198a..b50bbaa9b9e 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/GtfsGraphQLIndex.java @@ -26,7 +26,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; import org.opentripplanner.apis.gtfs.datafetchers.AgencyImpl; import org.opentripplanner.apis.gtfs.datafetchers.AlertEntityTypeResolver; import org.opentripplanner.apis.gtfs.datafetchers.AlertImpl; @@ -88,6 +87,7 @@ import org.opentripplanner.ext.actuator.MicrometerGraphQLInstrumentation; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.framework.concurrent.OtpRequestThreadFactory; +import org.opentripplanner.framework.graphql.GraphQLResponseSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java index e6a5fea3ba0..d0ccb198e16 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/support/ExecutionResultMapper.java @@ -4,8 +4,8 @@ import graphql.ExecutionResult; import graphql.GraphQLError; import jakarta.ws.rs.core.Response; -import org.opentripplanner.apis.common.json.GraphQLResponseSerializer; import org.opentripplanner.framework.application.OTPRequestTimeoutException; +import org.opentripplanner.framework.graphql.GraphQLResponseSerializer; import org.opentripplanner.framework.http.OtpHttpStatus; /** diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 766fb136ecd..816279d5a95 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -64,7 +64,6 @@ public enum OTPFeature { "Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little." ), TransmodelGraphQlApi(true, true, "Enable Transmodel (NeTEx) GraphQL API."), - LegacyRestApi(true, true, "Enable legacy REST API. This API will be removed in the future."), /* Sandbox extension features - Must be turned OFF by default */ @@ -83,6 +82,7 @@ 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(true, true, "Enable legacy REST API. This API will be removed in the future."), RealtimeResolver( false, true, diff --git a/src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java b/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java similarity index 94% rename from src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java rename to src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java index de068d170e9..25242456722 100644 --- a/src/main/java/org/opentripplanner/apis/common/json/GraphQLResponseSerializer.java +++ b/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.json; +package org.opentripplanner.framework.graphql; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -10,6 +10,7 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import org.opentripplanner.apis.common.json.JSONObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java index db88579b35f..fb50a25fd33 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Locale; import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.ext.restapi.mapping.I18NStringMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TransitService; From b7ea0b206b4f7fdb132bb1ec29610e69162dc4d5 Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Thu, 21 Dec 2023 12:44:54 +0200 Subject: [PATCH 017/103] Consider escalator edges in island pruning --- .../graph_builder/module/islandpruning/PruneIslands.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java index d3024a144f5..2ffecd3442f 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java @@ -26,6 +26,7 @@ import org.opentripplanner.street.model.edge.AreaEdgeList; import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.ElevatorEdge; +import org.opentripplanner.street.model.edge.EscalatorEdge; import org.opentripplanner.street.model.edge.FreeEdge; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.street.model.edge.StreetTransitEntityLink; @@ -343,7 +344,8 @@ private void collectNeighbourVertices( e instanceof StreetEdge || e instanceof ElevatorEdge || e instanceof FreeEdge || - e instanceof StreetTransitEntityLink + e instanceof StreetTransitEntityLink || + e instanceof EscalatorEdge ) ) { continue; From 66271852440968d392dd9a4343c52a200a1a800c Mon Sep 17 00:00:00 2001 From: Lasse Tyrihjell Date: Thu, 21 Dec 2023 13:30:33 +0100 Subject: [PATCH 018/103] Exposing version in TransmodelGraphQL-api when provided in SIRI SX-message --- .../ext/siri/SiriAlertsUpdateHandler.java | 3 +++ .../model/siri/sx/PtSituationElementType.java | 9 +++++++++ .../routing/alertpatch/TransitAlert.java | 7 +++++++ .../routing/alertpatch/TransitAlertBuilder.java | 10 ++++++++++ .../org/opentripplanner/apis/transmodel/schema.graphql | 2 ++ 5 files changed, 31 insertions(+) diff --git a/src/ext/java/org/opentripplanner/ext/siri/SiriAlertsUpdateHandler.java b/src/ext/java/org/opentripplanner/ext/siri/SiriAlertsUpdateHandler.java index bc19650d1cd..68b055bda46 100644 --- a/src/ext/java/org/opentripplanner/ext/siri/SiriAlertsUpdateHandler.java +++ b/src/ext/java/org/opentripplanner/ext/siri/SiriAlertsUpdateHandler.java @@ -141,6 +141,9 @@ private TransitAlert handleAlert(PtSituationElement situation) { if (situation.getVersionedAtTime() != null) { alert.withUpdatedTime(situation.getVersionedAtTime()); } + if (situation.getVersion() != null && situation.getVersion().getValue() != null) { + alert.withVersion(situation.getVersion().getValue().intValue()); + } ArrayList periods = new ArrayList<>(); if (situation.getValidityPeriods().size() > 0) { diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java index b5616c2d3fc..0dc0e74d3b3 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/siri/sx/PtSituationElementType.java @@ -324,6 +324,15 @@ public static GraphQLObjectType create( }) .build() ) + .field( + GraphQLFieldDefinition + .newFieldDefinition() + .name("version") + .type(Scalars.GraphQLInt) + .description("Operator's version number for the situation element.") + .dataFetcher(environment -> environment.getSource().version()) + .build() + ) .field( GraphQLFieldDefinition .newFieldDefinition() diff --git a/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java b/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java index 98127555e56..8f375be0490 100644 --- a/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java +++ b/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java @@ -33,6 +33,7 @@ public class TransitAlert extends AbstractTransitEntity entities; @@ -52,6 +53,7 @@ public class TransitAlert extends AbstractTransitEntity entities = new HashSet<>(); private final List timePeriods = new ArrayList<>(); @@ -167,6 +168,15 @@ public TransitAlertBuilder withCreationTime(ZonedDateTime creationTime) { return this; } + public Integer version() { + return version; + } + + public TransitAlertBuilder withVersion(Integer version) { + this.version = version; + return this; + } + public ZonedDateTime updatedTime() { return updatedTime; } diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 49bdb466e84..c9bc2ebaee8 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -549,6 +549,8 @@ type PtSituationElement { summary: [MultilingualString!]! "Period this situation is in effect" validityPeriod: ValidityPeriod + "Operator's version number for the situation element." + version: Int "Timestamp when the situation element was updated." versionedAtTime: DateTime } From 82e843b16b27006512832023b76e7cae4aae13c5 Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Thu, 21 Dec 2023 16:06:29 +0200 Subject: [PATCH 019/103] Add test for island pruning between escalators --- .../islandpruning/EscalatorPruningTest.java | 71 ++++++++++++++++++ .../islandpruning/matinkyla-escalator.pbf | Bin 0 -> 501 bytes 2 files changed, 71 insertions(+) create mode 100644 src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java create mode 100644 src/test/resources/org/opentripplanner/graph_builder/module/islandpruning/matinkyla-escalator.pbf diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java new file mode 100644 index 00000000000..aa4191d3002 --- /dev/null +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java @@ -0,0 +1,71 @@ +package org.opentripplanner.graph_builder.module.islandpruning; + +import java.io.File; +import java.util.Set; +import java.util.stream.Collectors; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; +import org.opentripplanner.graph_builder.module.osm.OsmModule; +import org.opentripplanner.openstreetmap.OsmProvider; +import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.test.support.ResourceLoader; +import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.TransitModel; + +public class EscalatorPruningTest { + + private static Graph graph; + + @BeforeAll + static void setup() { + graph = + buildOsmGraph(ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf")); + } + + @Test + public void streetEdgesBetweenEscalatorEdgesRetained() { + Assertions.assertTrue( + graph + .getStreetEdges() + .stream() + .map(streetEdge -> streetEdge.getName().toString()) + .collect(Collectors.toSet()) + .containsAll(Set.of("490072445")) + ); + } + + private static Graph buildOsmGraph(File osmFile) { + try { + var deduplicator = new Deduplicator(); + var graph = new Graph(deduplicator); + var transitModel = new TransitModel(new StopModel(), deduplicator); + // Add street data from OSM + OsmProvider osmProvider = new OsmProvider(osmFile, true); + OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); + + osmModule.buildGraph(); + + transitModel.index(); + graph.index(transitModel.getStopModel()); + + // Prune floating islands and set noThru where necessary + PruneIslands pruneIslands = new PruneIslands( + graph, + transitModel, + DataImportIssueStore.NOOP, + null + ); + pruneIslands.setPruningThresholdIslandWithoutStops(40); + pruneIslands.setPruningThresholdIslandWithStops(5); + pruneIslands.setAdaptivePruningFactor(1); + pruneIslands.buildGraph(); + + return graph; + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/test/resources/org/opentripplanner/graph_builder/module/islandpruning/matinkyla-escalator.pbf b/src/test/resources/org/opentripplanner/graph_builder/module/islandpruning/matinkyla-escalator.pbf new file mode 100644 index 0000000000000000000000000000000000000000..bcae465ae99479ed8fcf15a9d00e50dc7dffff81 GIT binary patch literal 501 zcmVb8%gjs3&o2UU6Dw1JRB=gaK`|F+a(-S}YGr0#I#8`47i(f> zUUnuIds=>e2}nPyu93B_2^WijwXTs+x=<$^L3{rgCo^^II_I8|*?gL^5CEiKb-m#qT{=s+wh#9n4m_&pboVeF* zySta=ANyMN)68Dni?026&A6KF1lvM>p*4(BW*omSU4O|a#LCIc#?C6m%EZCM!mA|0 z!7T9h&WcrR60<)aaZ%`8y`4#e(TVHP<*scZlR-|Bvg7y**2e Date: Wed, 20 Dec 2023 12:54:28 +0100 Subject: [PATCH 020/103] refactor: Rename TransitGroupPriority to TransitPriorityGroup --- docs/RouteRequest.md | 24 +++++----- .../common/RequestToPreferencesMapper.java | 4 +- .../api/common/RoutingResource.java | 4 +- .../preferences/TransitPreferencesMapper.java | 2 +- .../apis/transmodel/model/plan/TripQuery.java | 14 +++--- .../raptor/api/model/RaptorTripPattern.java | 2 +- .../api/request/MultiCriteriaRequest.java | 10 ++--- ...java => RaptorTransitGroupCalculator.java} | 8 ++-- .../internalapi/PassThroughPointsService.java | 2 +- .../configure/McRangeRaptorConfig.java | 13 +++--- ...a => TransitGroupPriorityRideFactory.java} | 21 ++++----- ...p32n.java => TransitGroupPriority32n.java} | 20 ++++----- .../transit/mappers/RaptorRequestMapper.java | 8 ++-- .../request/PriorityGroupConfigurator.java | 20 ++++----- .../transit/request/PriorityGroupMatcher.java | 8 ++-- .../RaptorRoutingRequestTransitData.java | 6 +-- ...aptorRoutingRequestTransitDataCreator.java | 2 +- .../preference/TransitPreferences.java | 26 +++++------ .../api/request/request/TransitRequest.java | 16 +++---- ...oupSelect.java => TransitGroupSelect.java} | 20 ++++----- .../routerequest/RouteRequestConfig.java | 21 ++++----- ...g.java => TransitGroupPriorityConfig.java} | 30 ++++++------- .../apis/transmodel/schema.graphql | 10 ++--- .../moduletests/K01_TransitPriorityTest.java | 16 +++---- .../K02_TransitPriorityDestinationTest.java | 17 +++---- ....java => TransitGroupPriority32nTest.java} | 44 +++++++++---------- .../PriorityGroupConfiguratorTest.java | 40 ++++++++--------- .../request/PriorityGroupMatcherTest.java | 18 ++++---- .../preference/TransitPreferencesTest.java | 6 +-- 29 files changed, 207 insertions(+), 225 deletions(-) rename src/main/java/org/opentripplanner/raptor/api/request/{RaptorTransitPriorityGroupCalculator.java => RaptorTransitGroupCalculator.java} (71%) rename src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/{TransitPriorityGroupRideFactory.java => TransitGroupPriorityRideFactory.java} (67%) rename src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/{TransitPriorityGroup32n.java => TransitGroupPriority32n.java} (76%) rename src/main/java/org/opentripplanner/routing/api/request/request/filter/{TransitPriorityGroupSelect.java => TransitGroupSelect.java} (87%) rename src/main/java/org/opentripplanner/standalone/config/routerequest/{TransitPriorityGroupConfig.java => TransitGroupPriorityConfig.java} (76%) rename src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/{TransitPriorityGroup32nTest.java => TransitGroupPriority32nTest.java} (51%) diff --git a/docs/RouteRequest.md b/docs/RouteRequest.md index 9e891cf732d..cef482eb781 100644 --- a/docs/RouteRequest.md +++ b/docs/RouteRequest.md @@ -57,7 +57,7 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe | numItineraries | `integer` | The maximum number of itineraries to return. | *Optional* | `50` | 2.0 | | [optimize](#rd_optimize) | `enum` | The set of characteristics that the user wants to optimize for. | *Optional* | `"safe"` | 2.0 | | [otherThanPreferredRoutesPenalty](#rd_otherThanPreferredRoutesPenalty) | `integer` | Penalty added for using every route that is not preferred if user set any route as preferred. | *Optional* | `300` | 2.0 | -| [relaxTransitPriorityGroup](#rd_relaxTransitPriorityGroup) | `string` | The relax function for transit-priority-groups | *Optional* | `"0s + 1.00 t"` | 2.5 | +| [relaxTransitGroupPriority](#rd_relaxTransitGroupPriority) | `string` | The relax function for transit-group-priority | *Optional* | `"0s + 1.00 t"` | 2.5 | | [relaxTransitSearchGeneralizedCostAtDestination](#rd_relaxTransitSearchGeneralizedCostAtDestination) | `double` | Whether non-optimal transit paths at the destination should be returned | *Optional* | | 2.3 | | [searchWindow](#rd_searchWindow) | `duration` | The duration of the search-window. | *Optional* | | 2.0 | | stairsReluctance | `double` | Used instead of walkReluctance for stairs. | *Optional* | `2.0` | 2.0 | @@ -108,7 +108,7 @@ and in the [transferRequests in build-config.json](BuildConfiguration.md#transfe |    [extraStopBoardAlightCostsFactor](#rd_to_extraStopBoardAlightCostsFactor) | `double` | Add an extra board- and alight-cost for prioritized stops. | *Optional* | `0.0` | 2.1 | |    [minSafeWaitTimeFactor](#rd_to_minSafeWaitTimeFactor) | `double` | Used to set a maximum wait-time cost, base on min-safe-transfer-time. | *Optional* | `5.0` | 2.1 | |    [optimizeTransferWaitTime](#rd_to_optimizeTransferWaitTime) | `boolean` | This enables the transfer wait time optimization. | *Optional* | `true` | 2.1 | -| [transitPriorityGroups](#rd_transitPriorityGroups) | `object` | Transit priority groups configuration | *Optional* | | 2.5 | +| [transitGroupPriority](#rd_transitGroupPriority) | `object` | Group transit patterns and give each group a mutual advantage in the Raptor search. | *Optional* | | 2.5 | | [transitReluctanceForMode](#rd_transitReluctanceForMode) | `enum map of double` | Transit reluctance for a given transport mode | *Optional* | | 2.1 | | [unpreferred](#rd_unpreferred) | `object` | Parameters listing authorities or lines that preferably should not be used in trip patters. | *Optional* | | 2.2 | |    [agencies](#rd_unpreferred_agencies) | `feed-scoped-id[]` | The ids of the agencies that incur an extra cost when being used. Format: `FeedId:AgencyId` | *Optional* | | 2.2 | @@ -247,16 +247,16 @@ Penalty added for using every route that is not preferred if user set any route We return number of seconds that we are willing to wait for preferred route. -

relaxTransitPriorityGroup

+

relaxTransitGroupPriority

**Since version:** `2.5` ∙ **Type:** `string` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"0s + 1.00 t"` **Path:** /routingDefaults -The relax function for transit-priority-groups +The relax function for transit-group-priority -A path is considered optimal if the generalized-cost is less than the -generalized-cost of another path. If this parameter is set, the comparison is relaxed -further if they belong to different transit-priority-groups. +A path is considered optimal if the generalized-cost is less than the generalized-cost of +another path. If this parameter is set, the comparison is relaxed further if they belong +to different transit groups.

relaxTransitSearchGeneralizedCostAtDestination

@@ -812,22 +812,20 @@ This enables the transfer wait time optimization. If not enabled generalizedCost function is used to pick the optimal transfer point. -

transitPriorityGroups

+

transitGroupPriority

**Since version:** `2.5` ∙ **Type:** `object` ∙ **Cardinality:** `Optional` **Path:** /routingDefaults -Transit priority groups configuration +Group transit patterns and give each group a mutual advantage in the Raptor search. Use this to separate transit patterns into groups. Each group will be given a group-id. A path (multiple legs) will then have a set of group-ids based on the group-id from each leg. Hence, two paths with a different set of group-ids will BOTH be optimal unless the cost is -worse than the relaxation specified in the `relaxTransitPriorityGroup` parameter. This is +worse than the relaxation specified in the `relaxTransitGroupPriority` parameter. This is only available in the TransmodelAPI for now. -Unmatched patterns are put in the BASE priority-group (group id: 0). This group is special. -If a path only have legs in the base group, then that path dominates other paths, but other -paths must be better to make it. +Unmatched patterns are put in the BASE priority-group. **THIS IS STILL AN EXPERIMENTAL FEATURE - IT MAY CHANGE WITHOUT ANY NOTICE!** diff --git a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java index aa827ae5b4c..6a8b71fe939 100644 --- a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java @@ -95,9 +95,9 @@ private BoardAndAlightSlack mapTransit() { setIfNotNull(req.otherThanPreferredRoutesPenalty, tr::setOtherThanPreferredRoutesPenalty); setIfNotNull(req.ignoreRealtimeUpdates, tr::setIgnoreRealtimeUpdates); - if (req.relaxTransitPriorityGroup != null) { + if (req.relaxTransitGroupPriority != null) { tr.withTransitGroupPriorityGeneralizedCostSlack( - CostLinearFunction.of(req.relaxTransitPriorityGroup) + CostLinearFunction.of(req.relaxTransitGroupPriority) ); } else { setIfNotNull( diff --git a/src/main/java/org/opentripplanner/api/common/RoutingResource.java b/src/main/java/org/opentripplanner/api/common/RoutingResource.java index 9cb4f139bc4..72812234b29 100644 --- a/src/main/java/org/opentripplanner/api/common/RoutingResource.java +++ b/src/main/java/org/opentripplanner/api/common/RoutingResource.java @@ -658,8 +658,8 @@ public abstract class RoutingResource { @QueryParam("useVehicleParkingAvailabilityInformation") protected Boolean useVehicleParkingAvailabilityInformation; - @QueryParam("relaxTransitPriorityGroup") - protected String relaxTransitPriorityGroup; + @QueryParam("relaxTransitGroupPriority") + protected String relaxTransitGroupPriority; /** * Whether non-optimal transit paths at the destination should be returned. diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java index caa8ebf7715..d4bf92b828c 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java @@ -34,7 +34,7 @@ public static void mapTransitPreferences( callWith.argument("includePlannedCancellations", transit::setIncludePlannedCancellations); callWith.argument("includeRealtimeCancellations", transit::setIncludeRealtimeCancellations); callWith.argument( - "relaxTransitPriorityGroup", + "relaxTransitGroupPriority", transit::withTransitGroupPriorityGeneralizedCostSlack ); callWith.argument( diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index d06c5954444..52bafc1f28b 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -277,16 +277,16 @@ public static GraphQLFieldDefinition create( .argument( GraphQLArgument .newArgument() - .name("relaxTransitPriorityGroup") + .name("relaxTransitGroupPriority") .description( """ Relax generalized-cost when comparing trips with a different set of - transit-priority-groups. The groups are set server side for service-journey and + transit-group-priorities. The groups are set server side for service-journey and can not be configured in the API. This mainly helps to return competition neutral - services. Long distance authorities are put in different transit-priority-groups. + services. Long distance authorities are put in different transit-groups. This relaxes the comparison inside the routing engine for each stop-arrival. If two - paths have a different set of transit-priority-groups, then the generalized-cost + paths have a different set of transit-group-priorities, then the generalized-cost comparison is relaxed. The final set of paths are filtered through the normal itinerary-filters. @@ -298,9 +298,9 @@ public static GraphQLFieldDefinition create( ) .type(RelaxCostType.INPUT_TYPE) .defaultValueLiteral( - preferences.transit().relaxTransitPriorityGroup().isNormal() + preferences.transit().relaxTransitGroupPriority().isNormal() ? NullValue.of() - : RelaxCostType.valueOf(preferences.transit().relaxTransitPriorityGroup()) + : RelaxCostType.valueOf(preferences.transit().relaxTransitGroupPriority()) ) .build() ) @@ -523,7 +523,7 @@ public static GraphQLFieldDefinition create( GraphQLArgument .newArgument() .name("relaxTransitSearchGeneralizedCostAtDestination") - .deprecate("This is replaced by 'relaxTransitPriorityGroup'.") + .deprecate("This is replaced by 'relaxTransitGroupPriority'.") .description( """ Whether non-optimal transit paths at the destination should be returned. Let c be the diff --git a/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java b/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java index 98a2533486b..e5be1cab0d5 100644 --- a/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java +++ b/src/main/java/org/opentripplanner/raptor/api/model/RaptorTripPattern.java @@ -46,7 +46,7 @@ public interface RaptorTripPattern { int slackIndex(); /** - * A pattern may belong to a transit-priority-group. Each group is given an advantage during + * A pattern may belong to a transit-group-priority. Each group is given an advantage during * the multi-criteria search, so the best alternative for each group is found. */ int priorityGroupId(); diff --git a/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java b/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java index 64cd9dae1a5..368b4660922 100644 --- a/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java +++ b/src/main/java/org/opentripplanner/raptor/api/request/MultiCriteriaRequest.java @@ -18,7 +18,7 @@ public class MultiCriteriaRequest { private final RelaxFunction relaxC1; @Nullable - private final RaptorTransitPriorityGroupCalculator transitPriorityCalculator; + private final RaptorTransitGroupCalculator transitPriorityCalculator; private final List passThroughPoints; @@ -63,7 +63,7 @@ public RelaxFunction relaxC1() { return relaxC1; } - public Optional transitPriorityCalculator() { + public Optional transitPriorityCalculator() { return Optional.ofNullable(transitPriorityCalculator); } @@ -140,7 +140,7 @@ public static class Builder { private final MultiCriteriaRequest original; private RelaxFunction relaxC1; - private RaptorTransitPriorityGroupCalculator transitPriorityCalculator; + private RaptorTransitGroupCalculator transitPriorityCalculator; private List passThroughPoints; private Double relaxCostAtDestination; @@ -163,11 +163,11 @@ public Builder withRelaxC1(RelaxFunction relaxC1) { } @Nullable - public RaptorTransitPriorityGroupCalculator transitPriorityCalculator() { + public RaptorTransitGroupCalculator transitPriorityCalculator() { return transitPriorityCalculator; } - public Builder withTransitPriorityCalculator(RaptorTransitPriorityGroupCalculator value) { + public Builder withTransitPriorityCalculator(RaptorTransitGroupCalculator value) { transitPriorityCalculator = value; return this; } diff --git a/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitPriorityGroupCalculator.java b/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupCalculator.java similarity index 71% rename from src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitPriorityGroupCalculator.java rename to src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupCalculator.java index c3890fa47b3..b5f0598415e 100644 --- a/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitPriorityGroupCalculator.java +++ b/src/main/java/org/opentripplanner/raptor/api/request/RaptorTransitGroupCalculator.java @@ -2,19 +2,19 @@ import org.opentripplanner.raptor.api.model.DominanceFunction; -public interface RaptorTransitPriorityGroupCalculator { +public interface RaptorTransitGroupCalculator { /** - * Merge in the trip transit priority group id with an existing set. Note! Both the set + * Merge in the transit group id with an existing set. Note! Both the set * and the group id type is {@code int}. * * @param currentGroupIds the set of groupIds for all legs in a path. * @param boardingGroupId the transit group id to add to the given set. * @return the new computed set of groupIds */ - int mergeTransitPriorityGroupIds(int currentGroupIds, int boardingGroupId); + int mergeGroupIds(int currentGroupIds, int boardingGroupId); /** - * This is the dominance function to use for comparing transit-priority-groupIds. + * This is the dominance function to use for comparing transit-groups. * It is critical that the implementation is "static" so it can be inlined, since it * is run in the innermost loop of Raptor. */ diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java index 69899b55688..4932d9c46fe 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/PassThroughPointsService.java @@ -54,7 +54,7 @@ default boolean isNoop() { void updateC2Value(int currentPathC2, IntConsumer update); /** - * This is the dominance function to use for comparing transit-priority-groupIds. + * This is the dominance function to use for comparing transit-group-priorityIds. * It is critical that the implementation is "static" so it can be inlined, since it * is run in the innermost loop of Raptor. */ diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java index e7aa07fb914..8eef90950dd 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/configure/McRangeRaptorConfig.java @@ -6,7 +6,7 @@ import org.opentripplanner.raptor.api.model.DominanceFunction; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; import org.opentripplanner.raptor.api.request.MultiCriteriaRequest; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.rangeraptor.context.SearchContext; import org.opentripplanner.raptor.rangeraptor.internalapi.Heuristics; import org.opentripplanner.raptor.rangeraptor.internalapi.ParetoSetCost; @@ -29,7 +29,7 @@ import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c1.PatternRideC1; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2.PassThroughRideFactory; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2.PatternRideC2; -import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2.TransitPriorityGroupRideFactory; +import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.c2.TransitGroupPriorityRideFactory; import org.opentripplanner.raptor.rangeraptor.path.DestinationArrivalPaths; import org.opentripplanner.raptor.rangeraptor.path.configure.PathConfig; import org.opentripplanner.raptor.util.paretoset.ParetoComparator; @@ -173,7 +173,8 @@ private MultiCriteriaRequest mcRequest() { } /** - * Currently "transit-priority-groups" is the only feature using two multi-criteria(c2). + * Use c2 in the search, this is use-case specific. For example the pass-through or + * transit-group-priority features uses the c2 value. */ private boolean includeC2() { return mcRequest().includeC2(); @@ -184,7 +185,7 @@ private PatternRideFactory> createPatternRideC2Factory() { return new PassThroughRideFactory<>(passThroughPointsService); } if (isTransitPriority()) { - return new TransitPriorityGroupRideFactory<>(getTransitPriorityGroupCalculator()); + return new TransitGroupPriorityRideFactory<>(getTransitGroupPriorityCalculator()); } throw new IllegalStateException("Only pass-through and transit-priority uses c2."); } @@ -195,12 +196,12 @@ private DominanceFunction dominanceFunctionC2() { return passThroughPointsService.dominanceFunction(); } if (isTransitPriority()) { - return getTransitPriorityGroupCalculator().dominanceFunction(); + return getTransitGroupPriorityCalculator().dominanceFunction(); } return null; } - private RaptorTransitPriorityGroupCalculator getTransitPriorityGroupCalculator() { + private RaptorTransitGroupCalculator getTransitGroupPriorityCalculator() { return mcRequest().transitPriorityCalculator().orElseThrow(); } diff --git a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitPriorityGroupRideFactory.java b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java similarity index 67% rename from src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitPriorityGroupRideFactory.java rename to src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java index eca049233b9..5d65c40d021 100644 --- a/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitPriorityGroupRideFactory.java +++ b/src/main/java/org/opentripplanner/raptor/rangeraptor/multicriteria/ride/c2/TransitGroupPriorityRideFactory.java @@ -2,25 +2,25 @@ import org.opentripplanner.raptor.api.model.RaptorTripPattern; import org.opentripplanner.raptor.api.model.RaptorTripSchedule; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.rangeraptor.multicriteria.arrivals.McStopArrival; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRide; import org.opentripplanner.raptor.rangeraptor.multicriteria.ride.PatternRideFactory; /** - * This factory creates new {@link PatternRide}s and merge in transit-priority-group ids + * This factory creates new {@link PatternRide}s and merge in transit-group-priority ids * into c2. */ -public class TransitPriorityGroupRideFactory +public class TransitGroupPriorityRideFactory implements PatternRideFactory> { private int currentPatternGroupPriority; - private final RaptorTransitPriorityGroupCalculator transitPriorityGroupCalculator; + private final RaptorTransitGroupCalculator transitGroupPriorityCalculator; - public TransitPriorityGroupRideFactory( - RaptorTransitPriorityGroupCalculator transitPriorityGroupCalculator + public TransitGroupPriorityRideFactory( + RaptorTransitGroupCalculator transitGroupPriorityCalculator ) { - this.transitPriorityGroupCalculator = transitPriorityGroupCalculator; + this.transitGroupPriorityCalculator = transitGroupPriorityCalculator; } @Override @@ -52,12 +52,9 @@ public void prepareForTransitWith(RaptorTripPattern pattern) { } /** - * Currently transit-priority-group is the only usage of c2 + * Currently transit-group-priority is the only usage of c2 */ private int calculateC2(int c2) { - return transitPriorityGroupCalculator.mergeTransitPriorityGroupIds( - c2, - currentPatternGroupPriority - ); + return transitGroupPriorityCalculator.mergeGroupIds(c2, currentPatternGroupPriority); } } diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32n.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32n.java similarity index 76% rename from src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32n.java rename to src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32n.java index 9b744932b8b..feb3f6f7b3a 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32n.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32n.java @@ -1,33 +1,33 @@ package org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority; import org.opentripplanner.raptor.api.model.DominanceFunction; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; /** * This is a "BitSet" implementation for groupId. It can store upto 32 groups, * a set with few elements does NOT dominate a set with more elements. */ -public class TransitPriorityGroup32n { +public class TransitGroupPriority32n { private static final int GROUP_ZERO = 0; private static final int MIN_SEQ_NO = 0; private static final int MAX_SEQ_NO = 32; - public static RaptorTransitPriorityGroupCalculator priorityCalculator() { - return new RaptorTransitPriorityGroupCalculator() { + public static RaptorTransitGroupCalculator priorityCalculator() { + return new RaptorTransitGroupCalculator() { @Override - public int mergeTransitPriorityGroupIds(int currentGroupIds, int boardingGroupId) { + public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { return mergeInGroupId(currentGroupIds, boardingGroupId); } @Override public DominanceFunction dominanceFunction() { - return TransitPriorityGroup32n::dominate; + return TransitGroupPriority32n::dominate; } @Override public String toString() { - return "TransitPriorityGroup32nCalculator{}"; + return "TransitGroupPriority32nCalculator{}"; } }; } @@ -42,7 +42,7 @@ public static boolean dominate(int left, int right) { @Override public String toString() { - return "TransitPriorityGroup32n{}"; + return "TransitGroupPriority32n{}"; } /** @@ -64,12 +64,12 @@ public static int mergeInGroupId(final int currentSetOfGroupIds, final int newGr private static void assertValidGroupSeqNo(int priorityGroupIndex) { if (priorityGroupIndex < MIN_SEQ_NO) { throw new IllegalArgumentException( - "Transit priority group can not be a negative number: " + priorityGroupIndex + "Transit group priority can not be a negative number: " + priorityGroupIndex ); } if (priorityGroupIndex > MAX_SEQ_NO) { throw new IllegalArgumentException( - "Transit priority group exceeds max number of groups: " + + "Transit group priority exceeds max number of groups: " + priorityGroupIndex + " (MAX=" + MAX_SEQ_NO + diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java index 75c1bcf7214..e5384933750 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/mappers/RaptorRequestMapper.java @@ -21,7 +21,7 @@ import org.opentripplanner.routing.algorithm.raptoradapter.router.performance.PerformanceTimersForRaptor; import org.opentripplanner.routing.algorithm.raptoradapter.transit.TripSchedule; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority.TransitPriorityGroup32n; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority.TransitGroupPriority32n; import org.opentripplanner.routing.api.request.RouteRequest; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.transit.model.site.StopLocation; @@ -117,9 +117,9 @@ private RaptorRequest doMap() { builder.withMultiCriteria(mcBuilder -> { var pt = preferences.transit(); var r = pt.raptor(); - if (!pt.relaxTransitPriorityGroup().isNormal()) { - mcBuilder.withTransitPriorityCalculator(TransitPriorityGroup32n.priorityCalculator()); - mcBuilder.withRelaxC1(mapRelaxCost(pt.relaxTransitPriorityGroup())); + if (!pt.relaxTransitGroupPriority().isNormal()) { + mcBuilder.withTransitPriorityCalculator(TransitGroupPriority32n.priorityCalculator()); + mcBuilder.withRelaxC1(mapRelaxCost(pt.relaxTransitGroupPriority())); } else { mcBuilder.withPassThroughPoints(mapPassThroughPoints()); r.relaxGeneralizedCostAtDestination().ifPresent(mcBuilder::withRelaxCostAtDestination); diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfigurator.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfigurator.java index 25006af49d8..826b9c09a13 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfigurator.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfigurator.java @@ -8,14 +8,14 @@ import java.util.List; import java.util.stream.Stream; import org.opentripplanner.framework.lang.ArrayUtils; -import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority.TransitPriorityGroup32n; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.grouppriority.TransitGroupPriority32n; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.RoutingTripPattern; /** * This class dynamically builds an index of transit-group-ids from the - * provided {@link TransitPriorityGroupSelect}s while serving the caller with + * provided {@link TransitGroupSelect}s while serving the caller with * group-ids for each requested pattern. It is made for optimal * performance, since it is used in request scope. *

@@ -44,7 +44,7 @@ public class PriorityGroupConfigurator { */ private static final int GROUP_INDEX_COUNTER_START = 1; - private final int baseGroupId = TransitPriorityGroup32n.groupId(GROUP_INDEX_COUNTER_START); + private final int baseGroupId = TransitGroupPriority32n.groupId(GROUP_INDEX_COUNTER_START); private int groupIndexCounter = GROUP_INDEX_COUNTER_START; private final boolean enabled; private final PriorityGroupMatcher[] agencyMatchers; @@ -63,8 +63,8 @@ private PriorityGroupConfigurator() { } private PriorityGroupConfigurator( - Collection byAgency, - Collection global + Collection byAgency, + Collection global ) { this.agencyMatchers = PriorityGroupMatcher.of(byAgency); this.globalMatchers = PriorityGroupMatcher.of(global); @@ -80,8 +80,8 @@ public static PriorityGroupConfigurator empty() { } public static PriorityGroupConfigurator of( - Collection byAgency, - Collection global + Collection byAgency, + Collection global ) { if (Stream.of(byAgency, global).allMatch(Collection::isEmpty)) { return empty(); @@ -94,7 +94,7 @@ public static PriorityGroupConfigurator of( *

* @throws IllegalArgumentException if more than 32 group-ids are requested. */ - public int lookupTransitPriorityGroupId(RoutingTripPattern tripPattern) { + public int lookupTransitGroupPriorityId(RoutingTripPattern tripPattern) { if (!enabled || tripPattern == null) { return baseGroupId; } @@ -128,7 +128,7 @@ public int baseGroupId() { } private int nextGroupId() { - return TransitPriorityGroup32n.groupId(++groupIndexCounter); + return TransitGroupPriority32n.groupId(++groupIndexCounter); } /** Pair of matcher and groupId. Used only inside this class. */ diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcher.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcher.java index 4d8a0475239..c017f2862ab 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcher.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcher.java @@ -15,13 +15,13 @@ import java.util.function.Predicate; import java.util.regex.Pattern; import java.util.stream.Collectors; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; /** - * This class turns a {@link TransitPriorityGroupSelect} into a matcher. + * This class turns a {@link TransitGroupSelect} into a matcher. *

* Design: It uses the composite design pattern. A matcher is created for each * value in the "select", then the list of non-empty matchers is merged into @@ -42,7 +42,7 @@ boolean isEmpty() { } }; - public static PriorityGroupMatcher of(TransitPriorityGroupSelect select) { + public static PriorityGroupMatcher of(TransitGroupSelect select) { if (select.isEmpty()) { return NOOP; } @@ -65,7 +65,7 @@ public static PriorityGroupMatcher of(TransitPriorityGroupSelect select) { return andOf(list); } - static PriorityGroupMatcher[] of(Collection selectors) { + static PriorityGroupMatcher[] of(Collection selectors) { return selectors .stream() .map(PriorityGroupMatcher::of) diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java index f1212b2f545..4338593d59d 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitData.java @@ -92,7 +92,7 @@ public RaptorRoutingRequestTransitData( additionalPastSearchDays, additionalFutureSearchDays, filter, - createTransitPriorityGroupConfigurator(request) + createTransitGroupPriorityConfigurator(request) ); this.patternIndex = transitDataCreator.createPatternIndex(tripPatterns); this.activeTripPatternsPerStop = transitDataCreator.createTripPatternsPerStop(tripPatterns); @@ -243,8 +243,8 @@ public RaptorConstrainedBoardingSearch transferConstraintsReverseS return new ConstrainedBoardingSearch(false, toStopTransfers, fromStopTransfers); } - private PriorityGroupConfigurator createTransitPriorityGroupConfigurator(RouteRequest request) { - if (request.preferences().transit().relaxTransitPriorityGroup().isNormal()) { + private PriorityGroupConfigurator createTransitGroupPriorityConfigurator(RouteRequest request) { + if (request.preferences().transit().relaxTransitGroupPriority().isNormal()) { return PriorityGroupConfigurator.empty(); } var transitRequest = request.journey().transit(); diff --git a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java index 0cb155facd5..b8f915d6eb4 100644 --- a/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java +++ b/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/RaptorRoutingRequestTransitDataCreator.java @@ -147,7 +147,7 @@ static List merge( tripPattern.getAlightingPossible(), BoardAlight.ALIGHT ), - priorityGroupConfigurator.lookupTransitPriorityGroupId(tripPattern) + priorityGroupConfigurator.lookupTransitGroupPriorityId(tripPattern) ) ); } diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java index da5c4aad60d..c0a090937d9 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java @@ -26,7 +26,7 @@ public final class TransitPreferences implements Serializable { private final Map reluctanceForMode; private final Cost otherThanPreferredRoutesPenalty; private final CostLinearFunction unpreferredCost; - private final CostLinearFunction relaxTransitPriorityGroup; + private final CostLinearFunction relaxTransitGroupPriority; private final boolean ignoreRealtimeUpdates; private final boolean includePlannedCancellations; private final boolean includeRealtimeCancellations; @@ -37,7 +37,7 @@ private TransitPreferences() { this.reluctanceForMode = Map.of(); this.otherThanPreferredRoutesPenalty = Cost.costOfMinutes(5); this.unpreferredCost = CostLinearFunction.NORMAL; - this.relaxTransitPriorityGroup = CostLinearFunction.NORMAL; + this.relaxTransitGroupPriority = CostLinearFunction.NORMAL; this.ignoreRealtimeUpdates = false; this.includePlannedCancellations = false; this.includeRealtimeCancellations = false; @@ -50,7 +50,7 @@ private TransitPreferences(Builder builder) { this.reluctanceForMode = Map.copyOf(requireNonNull(builder.reluctanceForMode)); this.otherThanPreferredRoutesPenalty = builder.otherThanPreferredRoutesPenalty; this.unpreferredCost = requireNonNull(builder.unpreferredCost); - this.relaxTransitPriorityGroup = Objects.requireNonNull(builder.relaxTransitPriorityGroup); + this.relaxTransitGroupPriority = Objects.requireNonNull(builder.relaxTransitGroupPriority); this.ignoreRealtimeUpdates = builder.ignoreRealtimeUpdates; this.includePlannedCancellations = builder.includePlannedCancellations; this.includeRealtimeCancellations = builder.includeRealtimeCancellations; @@ -128,13 +128,13 @@ public CostLinearFunction unpreferredCost() { } /** - * This is used to relax the cost when comparing transit-priority-groups. The default is the - * NORMAL function({@code f(x) = x}. This is the same as not using priority-groups. The + * This is used to relax the cost when comparing transit-groups. The default is the + * NORMAL function({@code f(t) = t}. This is the same as not using priority-groups. The * coefficient must be in range {@code [1.0 to 4.0]} and the constant must be in range * {@code [$0 to $1440(4h)]}. */ - public CostLinearFunction relaxTransitPriorityGroup() { - return relaxTransitPriorityGroup; + public CostLinearFunction relaxTransitGroupPriority() { + return relaxTransitGroupPriority; } /** @@ -176,7 +176,7 @@ public boolean equals(Object o) { reluctanceForMode.equals(that.reluctanceForMode) && otherThanPreferredRoutesPenalty == that.otherThanPreferredRoutesPenalty && unpreferredCost.equals(that.unpreferredCost) && - Objects.equals(relaxTransitPriorityGroup, that.relaxTransitPriorityGroup) && + Objects.equals(relaxTransitGroupPriority, that.relaxTransitGroupPriority) && ignoreRealtimeUpdates == that.ignoreRealtimeUpdates && includePlannedCancellations == that.includePlannedCancellations && includeRealtimeCancellations == that.includeRealtimeCancellations && @@ -192,7 +192,7 @@ public int hashCode() { reluctanceForMode, otherThanPreferredRoutesPenalty, unpreferredCost, - relaxTransitPriorityGroup, + relaxTransitGroupPriority, ignoreRealtimeUpdates, includePlannedCancellations, includeRealtimeCancellations, @@ -213,7 +213,7 @@ public String toString() { DEFAULT.otherThanPreferredRoutesPenalty ) .addObj("unpreferredCost", unpreferredCost, DEFAULT.unpreferredCost) - .addObj("relaxTransitPriorityGroup", relaxTransitPriorityGroup, CostLinearFunction.NORMAL) + .addObj("relaxTransitGroupPriority", relaxTransitGroupPriority, CostLinearFunction.NORMAL) .addBoolIfTrue( "ignoreRealtimeUpdates", ignoreRealtimeUpdates != DEFAULT.ignoreRealtimeUpdates @@ -240,7 +240,7 @@ public static class Builder { private Map reluctanceForMode; private Cost otherThanPreferredRoutesPenalty; private CostLinearFunction unpreferredCost; - private CostLinearFunction relaxTransitPriorityGroup; + private CostLinearFunction relaxTransitGroupPriority; private boolean ignoreRealtimeUpdates; private boolean includePlannedCancellations; private boolean includeRealtimeCancellations; @@ -253,7 +253,7 @@ public Builder(TransitPreferences original) { this.reluctanceForMode = original.reluctanceForMode; this.otherThanPreferredRoutesPenalty = original.otherThanPreferredRoutesPenalty; this.unpreferredCost = original.unpreferredCost; - this.relaxTransitPriorityGroup = original.relaxTransitPriorityGroup; + this.relaxTransitGroupPriority = original.relaxTransitGroupPriority; this.ignoreRealtimeUpdates = original.ignoreRealtimeUpdates; this.includePlannedCancellations = original.includePlannedCancellations; this.includeRealtimeCancellations = original.includeRealtimeCancellations; @@ -303,7 +303,7 @@ public Builder setUnpreferredCostString(String constFunction) { } public Builder withTransitGroupPriorityGeneralizedCostSlack(CostLinearFunction value) { - this.relaxTransitPriorityGroup = value; + this.relaxTransitGroupPriority = value; return this; } diff --git a/src/main/java/org/opentripplanner/routing/api/request/request/TransitRequest.java b/src/main/java/org/opentripplanner/routing/api/request/request/TransitRequest.java index 67a56249328..b5626c479a0 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/request/TransitRequest.java +++ b/src/main/java/org/opentripplanner/routing/api/request/request/TransitRequest.java @@ -8,7 +8,7 @@ import org.opentripplanner.routing.api.request.DebugRaptor; import org.opentripplanner.routing.api.request.request.filter.AllowAllTransitFilter; import org.opentripplanner.routing.api.request.request.filter.TransitFilter; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.framework.FeedScopedId; // TODO VIA: Javadoc @@ -31,8 +31,8 @@ public class TransitRequest implements Cloneable, Serializable { private List unpreferredRoutes = List.of(); - private List priorityGroupsByAgency = new ArrayList<>(); - private List priorityGroupsGlobal = new ArrayList<>(); + private List priorityGroupsByAgency = new ArrayList<>(); + private List priorityGroupsGlobal = new ArrayList<>(); private DebugRaptor raptorDebugging = new DebugRaptor(); public void setBannedTripsFromString(String ids) { @@ -64,16 +64,14 @@ public void setFilters(List filters) { *

* Note! Entities that are not matched are put in the BASE-GROUP with id 0. */ - public List priorityGroupsByAgency() { + public List priorityGroupsByAgency() { return priorityGroupsByAgency; } /** * All patterns matching the same select will be assigned the same group-id. */ - public void addPriorityGroupsByAgency( - Collection priorityGroupsByAgency - ) { + public void addPriorityGroupsByAgency(Collection priorityGroupsByAgency) { this.priorityGroupsByAgency.addAll(priorityGroupsByAgency); } @@ -82,11 +80,11 @@ public void addPriorityGroupsByAgency( *

* Note! Entities that are not matched are put in the BASE-GROUP with id 0. */ - public List priorityGroupsGlobal() { + public List priorityGroupsGlobal() { return priorityGroupsGlobal; } - public void addPriorityGroupsGlobal(Collection priorityGroupsGlobal) { + public void addPriorityGroupsGlobal(Collection priorityGroupsGlobal) { this.priorityGroupsGlobal.addAll(priorityGroupsGlobal); } diff --git a/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitPriorityGroupSelect.java b/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java similarity index 87% rename from src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitPriorityGroupSelect.java rename to src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java index 6d763e9c3bc..dfa5daa0e31 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitPriorityGroupSelect.java +++ b/src/main/java/org/opentripplanner/routing/api/request/request/filter/TransitGroupSelect.java @@ -21,23 +21,23 @@ *

  • {@code Entity(mode:SUBWAY, agency:A3)}
  • * */ -public class TransitPriorityGroupSelect { +public class TransitGroupSelect { - private static final TransitPriorityGroupSelect DEFAULT = new TransitPriorityGroupSelect(); + private static final TransitGroupSelect DEFAULT = new TransitGroupSelect(); private final List modes; private final List subModeRegexp; private final List agencyIds; private final List routeIds; - public TransitPriorityGroupSelect() { + public TransitGroupSelect() { this.modes = List.of(); this.subModeRegexp = List.of(); this.agencyIds = List.of(); this.routeIds = List.of(); } - private TransitPriorityGroupSelect(Builder builder) { + private TransitGroupSelect(Builder builder) { // Sort and keep only unique entries, this make this // implementation consistent for eq/hc/toString. this.modes = @@ -77,7 +77,7 @@ public boolean isEmpty() { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - TransitPriorityGroupSelect that = (TransitPriorityGroupSelect) o; + TransitGroupSelect that = (TransitGroupSelect) o; return ( Objects.equals(modes, that.modes) && Objects.equals(subModeRegexp, that.subModeRegexp) && @@ -96,7 +96,7 @@ public String toString() { return isEmpty() ? "TransitGroupSelect{ EMPTY }" : ToStringBuilder - .of(TransitPriorityGroupSelect.class) + .of(TransitGroupSelect.class) .addCol("modes", modes) .addCol("subModeRegexp", subModeRegexp) .addCol("agencyIds", agencyIds) @@ -106,13 +106,13 @@ public String toString() { public static class Builder { - private final TransitPriorityGroupSelect original; + private final TransitGroupSelect original; private final List modes; private final List subModeRegexp; private final List agencyIds; private final List routeIds; - public Builder(TransitPriorityGroupSelect original) { + public Builder(TransitGroupSelect original) { this.original = original; this.modes = new ArrayList<>(original.modes); this.subModeRegexp = new ArrayList<>(original.subModeRegexp); @@ -140,8 +140,8 @@ public Builder addRouteIds(Collection routeIds) { return this; } - public TransitPriorityGroupSelect build() { - var obj = new TransitPriorityGroupSelect(this); + public TransitGroupSelect build() { + var obj = new TransitGroupSelect(this); return original.equals(obj) ? original : obj; } } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index f6a79ea9192..1f3807f46b6 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -167,7 +167,7 @@ cost function. The cost function (`unpreferredCost`) is defined as a linear func .asFeedScopedIds(request.journey().transit().unpreferredAgencies()) ); - TransitPriorityGroupConfig.mapTransitRequest(c, request.journey().transit()); + TransitGroupPriorityConfig.mapTransitRequest(c, request.journey().transit()); // Map preferences request.withPreferences(preferences -> mapPreferences(c, request, preferences)); @@ -297,25 +297,26 @@ The board time is added to the time when going from the stop (offboard) to onboa .asCostLinearFunction(dft.unpreferredCost()) ); - String relaxTransitPriorityGroupValue = c - .of("relaxTransitPriorityGroup") + String relaxTransitGroupPriorityValue = c + .of("relaxTransitGroupPriority") .since(V2_5) - .summary("The relax function for transit-priority-groups") + .summary("The relax function for transit-group-priority") .description( """ - A path is considered optimal if the generalized-cost is less than the - generalized-cost of another path. If this parameter is set, the comparison is relaxed - further if they belong to different transit-priority-groups. + A path is considered optimal if the generalized-cost is less than the generalized-cost of + another path. If this parameter is set, the comparison is relaxed further if they belong + to different transit groups. """ ) - .asString(dft.relaxTransitPriorityGroup().toString()); + .asString(dft.relaxTransitGroupPriority().toString()); - if (relaxTransitPriorityGroupValue != null) { + if (relaxTransitGroupPriorityValue != null) { builder.withTransitGroupPriorityGeneralizedCostSlack( - CostLinearFunction.of(relaxTransitPriorityGroupValue) + CostLinearFunction.of(relaxTransitGroupPriorityValue) ); } + // TODO REMOVE THIS builder.withRaptor(it -> c .of("relaxTransitSearchGeneralizedCostAtDestination") diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransitPriorityGroupConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransitGroupPriorityConfig.java similarity index 76% rename from src/main/java/org/opentripplanner/standalone/config/routerequest/TransitPriorityGroupConfig.java rename to src/main/java/org/opentripplanner/standalone/config/routerequest/TransitGroupPriorityConfig.java index 51faafc7cbf..e5f1ccd784a 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/TransitPriorityGroupConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/TransitGroupPriorityConfig.java @@ -6,36 +6,36 @@ import java.util.Collection; import java.util.List; import org.opentripplanner.routing.api.request.request.TransitRequest; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; import org.opentripplanner.standalone.config.framework.json.OtpVersion; import org.opentripplanner.transit.model.basic.TransitMode; -public class TransitPriorityGroupConfig { +public class TransitGroupPriorityConfig { public static void mapTransitRequest(NodeAdapter root, TransitRequest transit) { var c = root - .of("transitPriorityGroups") + .of("transitGroupPriority") .since(OtpVersion.V2_5) - .summary("Transit priority groups configuration") + .summary( + "Group transit patterns and give each group a mutual advantage in the Raptor search." + ) .description( """ Use this to separate transit patterns into groups. Each group will be given a group-id. A path (multiple legs) will then have a set of group-ids based on the group-id from each leg. Hence, two paths with a different set of group-ids will BOTH be optimal unless the cost is - worse than the relaxation specified in the `relaxTransitPriorityGroup` parameter. This is + worse than the relaxation specified in the `relaxTransitGroupPriority` parameter. This is only available in the TransmodelAPI for now. - Unmatched patterns are put in the BASE priority-group (group id: 0). This group is special. - If a path only have legs in the base group, then that path dominates other paths, but other - paths must be better to make it. + Unmatched patterns are put in the BASE priority-group. """ ) .experimentalFeature() .asObject(); transit.addPriorityGroupsByAgency( - TransitPriorityGroupConfig.mapList( + TransitGroupPriorityConfig.mapList( c, "byAgency", "All groups here are split by agency. For example if you list mode " + @@ -44,7 +44,7 @@ public static void mapTransitRequest(NodeAdapter root, TransitRequest transit) { ) ); transit.addPriorityGroupsGlobal( - TransitPriorityGroupConfig.mapList( + TransitGroupPriorityConfig.mapList( c, "global", "All services matching a 'global' group will get the same group-id. Use this " + @@ -53,7 +53,7 @@ public static void mapTransitRequest(NodeAdapter root, TransitRequest transit) { ); } - private static Collection mapList( + private static Collection mapList( NodeAdapter root, String parameterName, String description @@ -61,13 +61,13 @@ private static Collection mapList( return root .of(parameterName) .since(V2_5) - .summary("Configuration for transit priority groups.") + .summary("List of transit groups.") .description(description + " The max total number of group-ids are 32, so be careful.") - .asObjects(TransitPriorityGroupConfig::mapTransitGroupSelect); + .asObjects(TransitGroupPriorityConfig::mapTransitGroupSelect); } - private static TransitPriorityGroupSelect mapTransitGroupSelect(NodeAdapter c) { - return TransitPriorityGroupSelect + private static TransitGroupSelect mapTransitGroupSelect(NodeAdapter c) { + return TransitGroupSelect .of() .addModes( c diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index 349c05f63dd..ab79917b9cc 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -825,12 +825,12 @@ type QueryType { passThroughPoints: [PassThroughPoint!], """ Relax generalized-cost when comparing trips with a different set of - transit-priority-groups. The groups are set server side for service-journey and + transit-group-priorities. The groups are set server side for service-journey and can not be configured in the API. This mainly helps to return competition neutral - services. Long distance authorities are put in different transit-priority-groups. + services. Long distance authorities are put in different transit-groups. This relaxes the comparison inside the routing engine for each stop-arrival. If two - paths have a different set of transit-priority-groups, then the generalized-cost + paths have a different set of transit-group-priorities, then the generalized-cost comparison is relaxed. The final set of paths are filtered through the normal itinerary-filters. @@ -839,7 +839,7 @@ type QueryType { THIS IS STILL AN EXPERIMENTAL FEATURE - IT MAY CHANGE WITHOUT ANY NOTICE! """ - relaxTransitPriorityGroup: RelaxCostInput = null, + relaxTransitGroupPriority: RelaxCostInput = null, """ Whether non-optimal transit paths at the destination should be returned. Let c be the existing minimum pareto optimal generalized-cost to beat. Then a trip with cost c' is @@ -852,7 +852,7 @@ type QueryType { Values less than 1.0 is not allowed, and values greater than 2.0 are not supported, due to performance reasons. """ - relaxTransitSearchGeneralizedCostAtDestination: Float = null @deprecated(reason : "This is replaced by 'relaxTransitPriorityGroup'."), + relaxTransitSearchGeneralizedCostAtDestination: Float = null @deprecated(reason : "This is replaced by 'relaxTransitGroupPriority'."), """ The length of the search-window in minutes. This parameter is optional. diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java index c1db11be779..43351b06eb8 100644 --- a/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java +++ b/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java @@ -22,7 +22,7 @@ import org.opentripplanner.raptor.api.model.DominanceFunction; import org.opentripplanner.raptor.api.request.RaptorProfile; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; @@ -33,9 +33,9 @@ */ public class K01_TransitPriorityTest { - private static final RaptorTransitPriorityGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitPriorityGroupCalculator() { + private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitGroupCalculator() { @Override - public int mergeTransitPriorityGroupIds(int currentGroupIds, int boardingGroupId) { + public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { return currentGroupIds | boardingGroupId; } @@ -51,14 +51,8 @@ public DominanceFunction dominanceFunction() { private static final int GROUP_A = 0x01; private static final int GROUP_B = 0x02; private static final int GROUP_C = 0x04; - private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeTransitPriorityGroupIds( - GROUP_A, - GROUP_B - ); - private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeTransitPriorityGroupIds( - GROUP_A, - GROUP_C - ); + private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_B); + private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_C); private static final int C1_SLACK_90s = RaptorCostConverter.toRaptorCost(90); private final TestTransitData data = new TestTransitData(); diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java index c7b64cb5b9e..6954ac0d41a 100644 --- a/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java +++ b/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java @@ -8,7 +8,6 @@ import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_D; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_E; import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_F; -import static org.opentripplanner.raptor._data.RaptorTestConstants.STOP_G; import static org.opentripplanner.raptor._data.RaptorTestConstants.T00_00; import static org.opentripplanner.raptor._data.RaptorTestConstants.T01_00; import static org.opentripplanner.raptor._data.api.PathUtils.pathsToString; @@ -26,7 +25,7 @@ import org.opentripplanner.raptor.api.model.DominanceFunction; import org.opentripplanner.raptor.api.request.RaptorProfile; import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; @@ -37,9 +36,9 @@ */ public class K02_TransitPriorityDestinationTest { - private static final RaptorTransitPriorityGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitPriorityGroupCalculator() { + private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitGroupCalculator() { @Override - public int mergeTransitPriorityGroupIds(int currentGroupIds, int boardingGroupId) { + public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { return currentGroupIds | boardingGroupId; } @@ -55,14 +54,8 @@ public DominanceFunction dominanceFunction() { private static final int GROUP_A = 0x01; private static final int GROUP_B = 0x02; private static final int GROUP_C = 0x04; - private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeTransitPriorityGroupIds( - GROUP_A, - GROUP_B - ); - private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeTransitPriorityGroupIds( - GROUP_A, - GROUP_C - ); + private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_B); + private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_C); private static final int C1_SLACK_90s = RaptorCostConverter.toRaptorCost(90); private final TestTransitData data = new TestTransitData(); diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32nTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32nTest.java similarity index 51% rename from src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32nTest.java rename to src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32nTest.java index 85083a3ee6a..2713a190dbf 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitPriorityGroup32nTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/cost/grouppriority/TransitGroupPriority32nTest.java @@ -6,9 +6,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; -import org.opentripplanner.raptor.api.request.RaptorTransitPriorityGroupCalculator; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; -class TransitPriorityGroup32nTest { +class TransitGroupPriority32nTest { private static final int GROUP_INDEX_0 = 0; private static final int GROUP_INDEX_1 = 1; @@ -16,35 +16,35 @@ class TransitPriorityGroup32nTest { private static final int GROUP_INDEX_30 = 30; private static final int GROUP_INDEX_31 = 31; - private static final int GROUP_0 = TransitPriorityGroup32n.groupId(GROUP_INDEX_0); - private static final int GROUP_1 = TransitPriorityGroup32n.groupId(GROUP_INDEX_1); - private static final int GROUP_2 = TransitPriorityGroup32n.groupId(GROUP_INDEX_2); - private static final int GROUP_30 = TransitPriorityGroup32n.groupId(GROUP_INDEX_30); - private static final int GROUP_31 = TransitPriorityGroup32n.groupId(GROUP_INDEX_31); - private static final RaptorTransitPriorityGroupCalculator subjct = TransitPriorityGroup32n.priorityCalculator(); + private static final int GROUP_0 = TransitGroupPriority32n.groupId(GROUP_INDEX_0); + private static final int GROUP_1 = TransitGroupPriority32n.groupId(GROUP_INDEX_1); + private static final int GROUP_2 = TransitGroupPriority32n.groupId(GROUP_INDEX_2); + private static final int GROUP_30 = TransitGroupPriority32n.groupId(GROUP_INDEX_30); + private static final int GROUP_31 = TransitGroupPriority32n.groupId(GROUP_INDEX_31); + private static final RaptorTransitGroupCalculator subjct = TransitGroupPriority32n.priorityCalculator(); @Test void groupId() { - assertEqualsHex(0x00_00_00_00, TransitPriorityGroup32n.groupId(0)); - assertEqualsHex(0x00_00_00_01, TransitPriorityGroup32n.groupId(1)); - assertEqualsHex(0x00_00_00_02, TransitPriorityGroup32n.groupId(2)); - assertEqualsHex(0x00_00_00_04, TransitPriorityGroup32n.groupId(3)); - assertEqualsHex(0x40_00_00_00, TransitPriorityGroup32n.groupId(31)); - assertEqualsHex(0x80_00_00_00, TransitPriorityGroup32n.groupId(32)); + assertEqualsHex(0x00_00_00_00, TransitGroupPriority32n.groupId(0)); + assertEqualsHex(0x00_00_00_01, TransitGroupPriority32n.groupId(1)); + assertEqualsHex(0x00_00_00_02, TransitGroupPriority32n.groupId(2)); + assertEqualsHex(0x00_00_00_04, TransitGroupPriority32n.groupId(3)); + assertEqualsHex(0x40_00_00_00, TransitGroupPriority32n.groupId(31)); + assertEqualsHex(0x80_00_00_00, TransitGroupPriority32n.groupId(32)); - assertThrows(IllegalArgumentException.class, () -> TransitPriorityGroup32n.groupId(-1)); - assertThrows(IllegalArgumentException.class, () -> TransitPriorityGroup32n.groupId(33)); + assertThrows(IllegalArgumentException.class, () -> TransitGroupPriority32n.groupId(-1)); + assertThrows(IllegalArgumentException.class, () -> TransitGroupPriority32n.groupId(33)); } @Test - void mergeTransitPriorityGroupIds() { - assertEqualsHex(GROUP_0, subjct.mergeTransitPriorityGroupIds(GROUP_0, GROUP_0)); - assertEqualsHex(GROUP_1, subjct.mergeTransitPriorityGroupIds(GROUP_1, GROUP_1)); - assertEqualsHex(GROUP_0 | GROUP_1, subjct.mergeTransitPriorityGroupIds(GROUP_0, GROUP_1)); - assertEqualsHex(GROUP_30 | GROUP_31, subjct.mergeTransitPriorityGroupIds(GROUP_30, GROUP_31)); + void mergeTransitGroupPriorityIds() { + assertEqualsHex(GROUP_0, subjct.mergeGroupIds(GROUP_0, GROUP_0)); + assertEqualsHex(GROUP_1, subjct.mergeGroupIds(GROUP_1, GROUP_1)); + assertEqualsHex(GROUP_0 | GROUP_1, subjct.mergeGroupIds(GROUP_0, GROUP_1)); + assertEqualsHex(GROUP_30 | GROUP_31, subjct.mergeGroupIds(GROUP_30, GROUP_31)); assertEqualsHex( GROUP_0 | GROUP_1 | GROUP_2 | GROUP_30 | GROUP_31, - subjct.mergeTransitPriorityGroupIds(GROUP_0 | GROUP_1 | GROUP_2 | GROUP_30, GROUP_31) + subjct.mergeGroupIds(GROUP_0 | GROUP_1 | GROUP_2 | GROUP_30, GROUP_31) ); } diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfiguratorTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfiguratorTest.java index 777aee5352c..cc4bb09f01e 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfiguratorTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupConfiguratorTest.java @@ -7,7 +7,7 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.network.RoutingTripPattern; import org.opentripplanner.transit.model.site.RegularStop; @@ -69,14 +69,14 @@ class PriorityGroupConfiguratorTest { @Test void emptyConfigurationShouldReturnGroupZero() { var subject = PriorityGroupConfigurator.of(List.of(), List.of()); - assertEquals(subject.baseGroupId(), subject.lookupTransitPriorityGroupId(railR1)); - assertEquals(subject.baseGroupId(), subject.lookupTransitPriorityGroupId(busB2)); - assertEquals(subject.baseGroupId(), subject.lookupTransitPriorityGroupId(null)); + assertEquals(subject.baseGroupId(), subject.lookupTransitGroupPriorityId(railR1)); + assertEquals(subject.baseGroupId(), subject.lookupTransitGroupPriorityId(busB2)); + assertEquals(subject.baseGroupId(), subject.lookupTransitGroupPriorityId(null)); } @Test - void lookupTransitPriorityGroupIdByAgency() { - var select = TransitPriorityGroupSelect + void lookupTransitGroupIdByAgency() { + var select = TransitGroupSelect .of() .addModes(List.of(TransitMode.BUS, TransitMode.RAIL)) .build(); @@ -85,12 +85,12 @@ void lookupTransitPriorityGroupIdByAgency() { var subject = PriorityGroupConfigurator.of(List.of(select), List.of()); // Agency groups are indexed (group-id set) at request time - assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitPriorityGroupId(null)); - assertEquals(EXP_GROUP_1, subject.lookupTransitPriorityGroupId(busB2)); - assertEquals(EXP_GROUP_2, subject.lookupTransitPriorityGroupId(railR3)); - assertEquals(EXP_GROUP_3, subject.lookupTransitPriorityGroupId(railR1)); - assertEquals(EXP_GROUP_2, subject.lookupTransitPriorityGroupId(busB3)); - assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitPriorityGroupId(ferryF3)); + assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitGroupPriorityId(null)); + assertEquals(EXP_GROUP_1, subject.lookupTransitGroupPriorityId(busB2)); + assertEquals(EXP_GROUP_2, subject.lookupTransitGroupPriorityId(railR3)); + assertEquals(EXP_GROUP_3, subject.lookupTransitGroupPriorityId(railR1)); + assertEquals(EXP_GROUP_2, subject.lookupTransitGroupPriorityId(busB3)); + assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitGroupPriorityId(ferryF3)); } @Test @@ -99,17 +99,17 @@ void lookupTransitPriorityGroupIdByGlobalMode() { var subject = PriorityGroupConfigurator.of( List.of(), List.of( - TransitPriorityGroupSelect.of().addModes(List.of(TransitMode.BUS)).build(), - TransitPriorityGroupSelect.of().addModes(List.of(TransitMode.RAIL)).build() + TransitGroupSelect.of().addModes(List.of(TransitMode.BUS)).build(), + TransitGroupSelect.of().addModes(List.of(TransitMode.RAIL)).build() ) ); - assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitPriorityGroupId(null)); - assertEquals(EXP_GROUP_2, subject.lookupTransitPriorityGroupId(railR1)); - assertEquals(EXP_GROUP_1, subject.lookupTransitPriorityGroupId(busB2)); - assertEquals(EXP_GROUP_2, subject.lookupTransitPriorityGroupId(railR3)); - assertEquals(EXP_GROUP_1, subject.lookupTransitPriorityGroupId(busB3)); - assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitPriorityGroupId(ferryF3)); + assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitGroupPriorityId(null)); + assertEquals(EXP_GROUP_2, subject.lookupTransitGroupPriorityId(railR1)); + assertEquals(EXP_GROUP_1, subject.lookupTransitGroupPriorityId(busB2)); + assertEquals(EXP_GROUP_2, subject.lookupTransitGroupPriorityId(railR3)); + assertEquals(EXP_GROUP_1, subject.lookupTransitGroupPriorityId(busB3)); + assertEquals(EXP_GROUP_ID_BASE, subject.lookupTransitGroupPriorityId(ferryF3)); } private static TestRouteData route( diff --git a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcherTest.java b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcherTest.java index 880d8bc9b45..91d0142f9ef 100644 --- a/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcherTest.java +++ b/src/test/java/org/opentripplanner/routing/algorithm/raptoradapter/transit/request/PriorityGroupMatcherTest.java @@ -6,7 +6,7 @@ import java.util.List; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.api.request.request.filter.TransitPriorityGroupSelect; +import org.opentripplanner.routing.api.request.request.filter.TransitGroupSelect; import org.opentripplanner.transit.model.basic.TransitMode; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.network.TripPattern; @@ -35,7 +35,7 @@ class PriorityGroupMatcherTest { @Test void testMode() { var m = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addModes(List.of(TransitMode.BUS, TransitMode.TRAM)).build() + TransitGroupSelect.of().addModes(List.of(TransitMode.BUS, TransitMode.TRAM)).build() ); assertEquals("Mode(BUS | TRAM)", m.toString()); assertFalse(m.isEmpty()); @@ -47,10 +47,10 @@ void testMode() { @Test void testAgencyIds() { var m1 = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addAgencyIds(List.of(r1agencyId)).build() + TransitGroupSelect.of().addAgencyIds(List.of(r1agencyId)).build() ); var m2 = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addAgencyIds(List.of(r1agencyId, anyId)).build() + TransitGroupSelect.of().addAgencyIds(List.of(r1agencyId, anyId)).build() ); var matchers = List.of(m1, m2); @@ -68,10 +68,10 @@ void testAgencyIds() { @Test void routeIds() { var m1 = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addRouteIds(List.of(r1routeId)).build() + TransitGroupSelect.of().addRouteIds(List.of(r1routeId)).build() ); var m2 = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addRouteIds(List.of(r1routeId, anyId)).build() + TransitGroupSelect.of().addRouteIds(List.of(r1routeId, anyId)).build() ); var matchers = List.of(m1, m2); @@ -89,7 +89,7 @@ void routeIds() { @Test void testSubMode() { var subject = PriorityGroupMatcher.of( - TransitPriorityGroupSelect.of().addSubModeRegexp(List.of(".*local.*")).build() + TransitGroupSelect.of().addSubModeRegexp(List.of(".*local.*")).build() ); assertEquals("SubModeRegexp(.*local.*)", subject.toString()); @@ -103,7 +103,7 @@ void testSubMode() { @Test void testAnd() { var subject = PriorityGroupMatcher.of( - TransitPriorityGroupSelect + TransitGroupSelect .of() .addSubModeRegexp(List.of("express")) .addRouteIds(List.of(r1routeId)) @@ -125,7 +125,7 @@ void testAnd() { @Test void testToString() { var subject = PriorityGroupMatcher.of( - TransitPriorityGroupSelect + TransitGroupSelect .of() .addModes(List.of(TransitMode.BUS, TransitMode.TRAM)) .addAgencyIds(List.of(anyId, r1agencyId)) diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java index 811c4a70b29..eb48de51867 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java @@ -77,8 +77,8 @@ void unpreferredCost() { } @Test - void relaxTransitPriorityGroup() { - assertEquals(TRANSIT_GROUP_PRIORITY_RELAX, subject.relaxTransitPriorityGroup()); + void relaxTransitGroupPriority() { + assertEquals(TRANSIT_GROUP_PRIORITY_RELAX, subject.relaxTransitGroupPriority()); } @Test @@ -125,7 +125,7 @@ void testToString() { "reluctanceForMode: {AIRPLANE=2.1}, " + "otherThanPreferredRoutesPenalty: $350, " + "unpreferredCost: 5m + 1.15 t, " + - "relaxTransitPriorityGroup: 5m + 1.50 t, " + + "relaxTransitGroupPriority: 5m + 1.50 t, " + "ignoreRealtimeUpdates, " + "includePlannedCancellations, " + "includeRealtimeCancellations, " + From 4c537c8a2f6ee9d1872d35892a31432972e03168 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Wed, 20 Dec 2023 14:55:33 +0100 Subject: [PATCH 021/103] fix: Properly implement the `relaxTransitGroupPriority` parameter in Transmodel API --- .../common/RequestToPreferencesMapper.java | 4 +- .../preferences/TransitPreferencesMapper.java | 8 +- .../transmodel/model/plan/RelaxCostType.java | 45 +++++++--- .../apis/transmodel/model/plan/TripQuery.java | 2 +- .../graphql/scalar/CostScalarFactory.java | 83 +++++++++++++++++++ .../preference/TransitPreferences.java | 2 +- .../routerequest/RouteRequestConfig.java | 4 +- .../apis/transmodel/schema.graphql | 13 +-- .../model/plan/RelaxCostTypeTest.java | 71 ++++++++++++++++ .../preference/TransitPreferencesTest.java | 2 +- 10 files changed, 209 insertions(+), 25 deletions(-) create mode 100644 src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java create mode 100644 src/test/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostTypeTest.java diff --git a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java index 6a8b71fe939..5c64d04a5d5 100644 --- a/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/api/common/RequestToPreferencesMapper.java @@ -96,9 +96,7 @@ private BoardAndAlightSlack mapTransit() { setIfNotNull(req.ignoreRealtimeUpdates, tr::setIgnoreRealtimeUpdates); if (req.relaxTransitGroupPriority != null) { - tr.withTransitGroupPriorityGeneralizedCostSlack( - CostLinearFunction.of(req.relaxTransitGroupPriority) - ); + tr.withRelaxTransitGroupPriority(CostLinearFunction.of(req.relaxTransitGroupPriority)); } else { setIfNotNull( req.relaxTransitSearchGeneralizedCostAtDestination, diff --git a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java index d4bf92b828c..28643bf8199 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/mapping/preferences/TransitPreferencesMapper.java @@ -1,8 +1,11 @@ package org.opentripplanner.apis.transmodel.mapping.preferences; import graphql.schema.DataFetchingEnvironment; +import java.util.Map; import org.opentripplanner.apis.transmodel.model.TransportModeSlack; +import org.opentripplanner.apis.transmodel.model.plan.RelaxCostType; import org.opentripplanner.apis.transmodel.support.DataFetcherDecorator; +import org.opentripplanner.routing.api.request.framework.CostLinearFunction; import org.opentripplanner.routing.api.request.preference.TransitPreferences; public class TransitPreferencesMapper { @@ -35,7 +38,10 @@ public static void mapTransitPreferences( callWith.argument("includeRealtimeCancellations", transit::setIncludeRealtimeCancellations); callWith.argument( "relaxTransitGroupPriority", - transit::withTransitGroupPriorityGeneralizedCostSlack + it -> + transit.withRelaxTransitGroupPriority( + RelaxCostType.mapToDomain((Map) it, CostLinearFunction.NORMAL) + ) ); callWith.argument( "relaxTransitSearchGeneralizedCostAtDestination", diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java index 3bd3ed129ef..d3455083695 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java @@ -2,13 +2,15 @@ import graphql.Scalars; import graphql.language.FloatValue; -import graphql.language.IntValue; import graphql.language.ObjectField; import graphql.language.ObjectValue; +import graphql.language.StringValue; import graphql.schema.GraphQLInputObjectField; import graphql.schema.GraphQLInputObjectType; -import graphql.schema.GraphQLList; -import graphql.schema.GraphQLNonNull; +import java.util.Map; +import org.opentripplanner.framework.graphql.scalar.CostScalarFactory; +import org.opentripplanner.framework.model.Cost; +import org.opentripplanner.framework.time.DurationUtils; import org.opentripplanner.routing.api.request.framework.CostLinearFunction; public class RelaxCostType { @@ -26,8 +28,8 @@ public class RelaxCostType { with twice as high cost as another one, is accepted. A `constant=$300` means a "fixed" constant is added to the limit. A `{ratio=1.0, constant=0}` is said to be the NORMAL relaxed cost - the limit is the same as the cost used to calculate the limit. The NORMAL is usually - the default. We can express the RelaxCost as a function `f(x) = constant + ratio * x`. - `f(x)=x` is the NORMAL function. + the default. We can express the RelaxCost as a function `f(t) = constant + ratio * t`. + `f(t)=t` is the NORMAL function. """ ) .field( @@ -44,11 +46,12 @@ public class RelaxCostType { .newInputObjectField() .name(CONSTANT) .description( - "The constant value to add to the limit. Must be a positive number. The unit" + - " is cost-seconds." + "The constant value to add to the limit. Must be a positive number. The value is" + + "equivalent to transit-cost-seconds. Integers is treated as seconds, but you may use " + + "the duration format. Example: '3665 = 'DT1h1m5s' = '1h1m5s'." ) - .defaultValueLiteral(IntValue.of(0)) - .type(new GraphQLList(new GraphQLNonNull(Scalars.GraphQLID))) + .defaultValueProgrammatic("0s") + .type(CostScalarFactory.costScalar()) .build() ) .build(); @@ -63,9 +66,31 @@ public static ObjectValue valueOf(CostLinearFunction value) { ObjectField .newObjectField() .name(CONSTANT) - .value(IntValue.of(value.constant().toSeconds())) + // We only use this to display default value (this is an input type), so using the + // lenient OTP version of duration is ok - it is slightly more readable. + .value(StringValue.of(DurationUtils.durationToStr(value.constant().asDuration()))) .build() ) .build(); } + + public static CostLinearFunction mapToDomain( + Map input, + CostLinearFunction defaultValue + ) { + if (input == null || input.isEmpty()) { + return defaultValue; + } + + double ratio = 1.0; + Cost constant = Cost.ZERO; + + if (input.containsKey(RATIO)) { + ratio = (Double) input.get(RATIO); + } + if (input.containsKey(CONSTANT)) { + constant = (Cost) input.get(CONSTANT); + } + return CostLinearFunction.of(constant, ratio); + } } diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java index 52bafc1f28b..410ec0ee74a 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripQuery.java @@ -291,7 +291,7 @@ public static GraphQLFieldDefinition create( itinerary-filters. - The `ratio` must be greater or equal to 1.0 and less then 1.2. - - The `slack` must be greater or equal to 0 and less then 3600. + - The `constant` must be greater or equal to '0s' and less then '1h'. THIS IS STILL AN EXPERIMENTAL FEATURE - IT MAY CHANGE WITHOUT ANY NOTICE! """.stripIndent() diff --git a/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java b/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java new file mode 100644 index 00000000000..6f710328174 --- /dev/null +++ b/src/main/java/org/opentripplanner/framework/graphql/scalar/CostScalarFactory.java @@ -0,0 +1,83 @@ +package org.opentripplanner.framework.graphql.scalar; + +import graphql.GraphQLContext; +import graphql.execution.CoercedVariables; +import graphql.language.StringValue; +import graphql.language.Value; +import graphql.schema.Coercing; +import graphql.schema.CoercingParseLiteralException; +import graphql.schema.CoercingParseValueException; +import graphql.schema.GraphQLScalarType; +import java.util.Locale; +import java.util.NoSuchElementException; +import javax.annotation.Nonnull; +import org.opentripplanner.framework.model.Cost; +import org.opentripplanner.framework.time.DurationUtils; + +public class CostScalarFactory { + + private static final String TYPENAME = "Cost"; + + private static final String DOCUMENTATION = + "A cost value, normally a value of 1 is equivalent to riding transit for 1 second, " + + "but it might not depending on the use-case. Format: 3665 = DT1h1m5s = 1h1m5s"; + + private static final GraphQLScalarType SCALAR_INSTANCE = createCostScalar(); + + private CostScalarFactory() {} + + public static GraphQLScalarType costScalar() { + return SCALAR_INSTANCE; + } + + private static GraphQLScalarType createCostScalar() { + return GraphQLScalarType + .newScalar() + .name(TYPENAME) + .description(DOCUMENTATION) + .coercing(createCoercing()) + .build(); + } + + private static String serializeCost(Cost cost) { + return cost.asDuration().toString(); + } + + private static Cost parseCost(String input) throws CoercingParseValueException { + try { + return Cost.fromDuration(DurationUtils.parseSecondsOrDuration(input).orElseThrow()); + } catch (IllegalArgumentException | NoSuchElementException e) { + throw new CoercingParseValueException(e.getMessage(), e); + } + } + + private static Coercing createCoercing() { + return new Coercing<>() { + @Override + public String serialize(@Nonnull Object result, GraphQLContext c, Locale l) { + return serializeCost((Cost) result); + } + + @Override + public Cost parseValue(Object input, GraphQLContext c, Locale l) + throws CoercingParseValueException { + return parseCost((String) input); + } + + @Override + public Cost parseLiteral(Value input, CoercedVariables v, GraphQLContext c, Locale l) + throws CoercingParseLiteralException { + if (input instanceof StringValue stringValue) { + return parseCost(stringValue.getValue()); + } + return null; + } + + @Override + @Nonnull + public Value valueToLiteral(Object input, GraphQLContext c, Locale l) { + return StringValue.of((String) input); + } + }; + } +} diff --git a/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java b/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java index c0a090937d9..9c54fcb6d5c 100644 --- a/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java +++ b/src/main/java/org/opentripplanner/routing/api/request/preference/TransitPreferences.java @@ -302,7 +302,7 @@ public Builder setUnpreferredCostString(String constFunction) { return setUnpreferredCost(CostLinearFunction.of(constFunction)); } - public Builder withTransitGroupPriorityGeneralizedCostSlack(CostLinearFunction value) { + public Builder withRelaxTransitGroupPriority(CostLinearFunction value) { this.relaxTransitGroupPriority = value; return this; } diff --git a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java index 1f3807f46b6..a975848e260 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerequest/RouteRequestConfig.java @@ -311,9 +311,7 @@ The board time is added to the time when going from the stop (offboard) to onboa .asString(dft.relaxTransitGroupPriority().toString()); if (relaxTransitGroupPriorityValue != null) { - builder.withTransitGroupPriorityGeneralizedCostSlack( - CostLinearFunction.of(relaxTransitGroupPriorityValue) - ); + builder.withRelaxTransitGroupPriority(CostLinearFunction.of(relaxTransitGroupPriorityValue)); } // TODO REMOVE THIS diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index ab79917b9cc..b5d1dc00a39 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -835,7 +835,7 @@ type QueryType { itinerary-filters. - The `ratio` must be greater or equal to 1.0 and less then 1.2. - - The `slack` must be greater or equal to 0 and less then 3600. + - The `constant` must be greater or equal to '0s' and less then '1h'. THIS IS STILL AN EXPERIMENTAL FEATURE - IT MAY CHANGE WITHOUT ANY NOTICE! """ @@ -1867,6 +1867,9 @@ enum WheelchairBoarding { "List of coordinates like: [[60.89, 11.12], [62.56, 12.10]]" scalar Coordinates +"A cost value, normally a value of 1 is equivalent to riding transit for 1 second, but it might not depending on the use-case. Format: 3665 = DT1h1m5s = 1h1m5s" +scalar Cost + "Local date using the ISO 8601 format: `YYYY-MM-DD`. Example: `2020-05-17`." scalar Date @@ -2028,12 +2031,12 @@ This is used to include more results into the result. A `ratio=2.0` means a path with twice as high cost as another one, is accepted. A `constant=$300` means a "fixed" constant is added to the limit. A `{ratio=1.0, constant=0}` is said to be the NORMAL relaxed cost - the limit is the same as the cost used to calculate the limit. The NORMAL is usually -the default. We can express the RelaxCost as a function `f(x) = constant + ratio * x`. -`f(x)=x` is the NORMAL function. +the default. We can express the RelaxCost as a function `f(t) = constant + ratio * t`. +`f(t)=t` is the NORMAL function. """ input RelaxCostInput { - "The constant value to add to the limit. Must be a positive number. The unit is cost-seconds." - constant: [ID!] = 0 + "The constant value to add to the limit. Must be a positive number. The value isequivalent to transit-cost-seconds. Integers is treated as seconds, but you may use the duration format. Example: '3665 = 'DT1h1m5s' = '1h1m5s'." + constant: Cost = "0s" "The factor to multiply with the 'other cost'. Minimum value is 1.0." ratio: Float = 1.0 } diff --git a/src/test/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostTypeTest.java b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostTypeTest.java new file mode 100644 index 00000000000..b4da249742c --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostTypeTest.java @@ -0,0 +1,71 @@ +package org.opentripplanner.apis.transmodel.model.plan; + +import static org.junit.jupiter.api.Assertions.*; +import static org.opentripplanner.apis.transmodel.model.plan.RelaxCostType.CONSTANT; +import static org.opentripplanner.apis.transmodel.model.plan.RelaxCostType.RATIO; + +import graphql.language.FloatValue; +import graphql.language.ObjectField; +import graphql.language.ObjectValue; +import graphql.language.StringValue; +import java.util.Map; +import org.junit.jupiter.api.Test; +import org.opentripplanner.framework.model.Cost; +import org.opentripplanner.routing.api.request.framework.CostLinearFunction; + +class RelaxCostTypeTest { + + @Test + void valueOf() { + assertEquals( + ObjectValue + .newObjectValue() + .objectField(ObjectField.newObjectField().name(RATIO).value(FloatValue.of(1.0)).build()) + .objectField( + ObjectField.newObjectField().name(CONSTANT).value(StringValue.of("0s")).build() + ) + .build() + .toString(), + RelaxCostType.valueOf(CostLinearFunction.NORMAL).toString() + ); + assertEquals( + ObjectValue + .newObjectValue() + .objectField(ObjectField.newObjectField().name(RATIO).value(FloatValue.of(1.3)).build()) + .objectField( + ObjectField.newObjectField().name(CONSTANT).value(StringValue.of("1m7s")).build() + ) + .build() + .toString(), + RelaxCostType.valueOf(CostLinearFunction.of(Cost.costOfSeconds(67), 1.3)).toString() + ); + } + + @Test + void mapToDomain() { + Map input; + + input = Map.of(RATIO, 1.0, CONSTANT, Cost.ZERO); + assertEquals( + CostLinearFunction.NORMAL, + RelaxCostType.mapToDomain(input, CostLinearFunction.ZERO) + ); + + input = Map.of(RATIO, 0.0, CONSTANT, Cost.ZERO); + assertEquals( + CostLinearFunction.ZERO, + RelaxCostType.mapToDomain(input, CostLinearFunction.ZERO) + ); + + input = Map.of(RATIO, 1.7, CONSTANT, Cost.costOfSeconds(3600 + 3 * 60 + 7)); + assertEquals( + CostLinearFunction.of("1h3m7s + 1.7t"), + RelaxCostType.mapToDomain(input, CostLinearFunction.ZERO) + ); + assertEquals( + CostLinearFunction.NORMAL, + RelaxCostType.mapToDomain(null, CostLinearFunction.NORMAL) + ); + assertEquals(CostLinearFunction.ZERO, RelaxCostType.mapToDomain(null, CostLinearFunction.ZERO)); + } +} diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java index eb48de51867..b77a7d9085b 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/TransitPreferencesTest.java @@ -42,7 +42,7 @@ class TransitPreferencesTest { .setUnpreferredCost(UNPREFERRED_COST) .withBoardSlack(b -> b.withDefault(D45s).with(TransitMode.AIRPLANE, D35m)) .withAlightSlack(b -> b.withDefault(D15s).with(TransitMode.AIRPLANE, D25m)) - .withTransitGroupPriorityGeneralizedCostSlack(TRANSIT_GROUP_PRIORITY_RELAX) + .withRelaxTransitGroupPriority(TRANSIT_GROUP_PRIORITY_RELAX) .setIgnoreRealtimeUpdates(IGNORE_REALTIME_UPDATES) .setIncludePlannedCancellations(INCLUDE_PLANNED_CANCELLATIONS) .setIncludeRealtimeCancellations(INCLUDE_REALTIME_CANCELLATIONS) From ce558ec12dd1a00e695875badae520c31068a1c9 Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 21 Dec 2023 16:28:49 +0100 Subject: [PATCH 022/103] refactor: Cleanup transit-group-priority module-tests --- .../moduletests/K01_TransitPriorityTest.java | 44 +++------------- .../K02_TransitPriorityDestinationTest.java | 44 +++------------- .../support/TestGroupPriorityCalculator.java | 51 +++++++++++++++++++ 3 files changed, 63 insertions(+), 76 deletions(-) create mode 100644 src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java index 43351b06eb8..1795663aaba 100644 --- a/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java +++ b/src/test/java/org/opentripplanner/raptor/moduletests/K01_TransitPriorityTest.java @@ -12,6 +12,9 @@ import static org.opentripplanner.raptor._data.transit.TestRoute.route; import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_A; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_B; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_C; import java.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -24,6 +27,7 @@ import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; +import org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** @@ -33,26 +37,8 @@ */ public class K01_TransitPriorityTest { - private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitGroupCalculator() { - @Override - public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { - return currentGroupIds | boardingGroupId; - } - - /** - * Left dominate right, if right has at least one priority group not in left. - */ - @Override - public DominanceFunction dominanceFunction() { - return (l, r) -> ((l ^ r) & r) != 0; - } - }; - - private static final int GROUP_A = 0x01; - private static final int GROUP_B = 0x02; - private static final int GROUP_C = 0x04; - private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_B); - private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_C); + private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = + TestGroupPriorityCalculator.PRIORITY_CALCULATOR; private static final int C1_SLACK_90s = RaptorCostConverter.toRaptorCost(90); private final TestTransitData data = new TestTransitData(); @@ -102,7 +88,6 @@ private void prepareRequest() { ); // Add 1 second access/egress paths requestBuilder.searchParams().addAccessPaths(walk(STOP_B, 1)).addEgressPaths(walk(STOP_C, 1)); - assetGroupCalculatorIsSetupCorrect(); } @Test @@ -116,21 +101,4 @@ public void transitPriority() { pathsToString(raptorService.route(requestBuilder.build(), data)) ); } - - /** - * Make sure the calculator and group setup is done correct. - */ - void assetGroupCalculatorIsSetupCorrect() { - var d = PRIORITY_GROUP_CALCULATOR.dominanceFunction(); - - assertTrue(d.leftDominateRight(GROUP_A, GROUP_B)); - assertTrue(d.leftDominateRight(GROUP_B, GROUP_A)); - assertFalse(d.leftDominateRight(GROUP_A, GROUP_A)); - // 3 = 1&2, 5 = 1&4 - assertTrue(d.leftDominateRight(GROUP_A, GROUP_AB)); - assertFalse(d.leftDominateRight(GROUP_AB, GROUP_A)); - assertFalse(d.leftDominateRight(GROUP_AB, GROUP_AB)); - assertTrue(d.leftDominateRight(GROUP_AB, GROUP_AC)); - assertTrue(d.leftDominateRight(GROUP_AC, GROUP_AB)); - } } diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java b/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java index 6954ac0d41a..a2185acef5e 100644 --- a/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java +++ b/src/test/java/org/opentripplanner/raptor/moduletests/K02_TransitPriorityDestinationTest.java @@ -15,6 +15,9 @@ import static org.opentripplanner.raptor._data.transit.TestRoute.route; import static org.opentripplanner.raptor._data.transit.TestTripPattern.pattern; import static org.opentripplanner.raptor._data.transit.TestTripSchedule.schedule; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_A; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_B; +import static org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator.GROUP_C; import java.time.Duration; import org.junit.jupiter.api.BeforeEach; @@ -27,6 +30,7 @@ import org.opentripplanner.raptor.api.request.RaptorRequestBuilder; import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; import org.opentripplanner.raptor.configure.RaptorConfig; +import org.opentripplanner.raptor.moduletests.support.TestGroupPriorityCalculator; import org.opentripplanner.routing.algorithm.raptoradapter.transit.cost.RaptorCostConverter; /** @@ -36,26 +40,8 @@ */ public class K02_TransitPriorityDestinationTest { - private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = new RaptorTransitGroupCalculator() { - @Override - public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { - return currentGroupIds | boardingGroupId; - } - - /** - * Left dominate right, if right has at least one priority group not in left. - */ - @Override - public DominanceFunction dominanceFunction() { - return (l, r) -> ((l ^ r) & r) != 0; - } - }; - - private static final int GROUP_A = 0x01; - private static final int GROUP_B = 0x02; - private static final int GROUP_C = 0x04; - private static final int GROUP_AB = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_B); - private static final int GROUP_AC = PRIORITY_GROUP_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_C); + private static final RaptorTransitGroupCalculator PRIORITY_GROUP_CALCULATOR = + TestGroupPriorityCalculator.PRIORITY_CALCULATOR; private static final int C1_SLACK_90s = RaptorCostConverter.toRaptorCost(90); private final TestTransitData data = new TestTransitData(); @@ -110,7 +96,6 @@ private void prepareRequest() { .addEgressPaths(walk(STOP_D, 1)) .addEgressPaths(walk(STOP_E, 1)) .addEgressPaths(walk(STOP_F, 1)); - assetGroupCalculatorIsSetupCorrect(); } @Test @@ -124,21 +109,4 @@ public void transitPriority() { pathsToString(raptorService.route(requestBuilder.build(), data)) ); } - - /** - * Make sure the calculator and group setup is done correct. - */ - void assetGroupCalculatorIsSetupCorrect() { - var d = PRIORITY_GROUP_CALCULATOR.dominanceFunction(); - - assertTrue(d.leftDominateRight(GROUP_A, GROUP_B)); - assertTrue(d.leftDominateRight(GROUP_B, GROUP_A)); - assertFalse(d.leftDominateRight(GROUP_A, GROUP_A)); - // 3 = 1&2, 5 = 1&4 - assertTrue(d.leftDominateRight(GROUP_A, GROUP_AB)); - assertFalse(d.leftDominateRight(GROUP_AB, GROUP_A)); - assertFalse(d.leftDominateRight(GROUP_AB, GROUP_AB)); - assertTrue(d.leftDominateRight(GROUP_AB, GROUP_AC)); - assertTrue(d.leftDominateRight(GROUP_AC, GROUP_AB)); - } } diff --git a/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java b/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java new file mode 100644 index 00000000000..cdbe82f18a6 --- /dev/null +++ b/src/test/java/org/opentripplanner/raptor/moduletests/support/TestGroupPriorityCalculator.java @@ -0,0 +1,51 @@ +package org.opentripplanner.raptor.moduletests.support; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.raptor.api.model.DominanceFunction; +import org.opentripplanner.raptor.api.request.RaptorTransitGroupCalculator; + +public class TestGroupPriorityCalculator implements RaptorTransitGroupCalculator { + + public static final RaptorTransitGroupCalculator PRIORITY_CALCULATOR = new TestGroupPriorityCalculator(); + + public static final int GROUP_A = 0x01; + public static final int GROUP_B = 0x02; + public static final int GROUP_C = 0x04; + + private static final int GROUP_AB = PRIORITY_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_B); + private static final int GROUP_AC = PRIORITY_CALCULATOR.mergeGroupIds(GROUP_A, GROUP_C); + + @Override + public int mergeGroupIds(int currentGroupIds, int boardingGroupId) { + return currentGroupIds | boardingGroupId; + } + + /** + * Left dominate right, if right has at least one priority group not in left. + */ + @Override + public DominanceFunction dominanceFunction() { + return (l, r) -> ((l ^ r) & r) != 0; + } + + /** + * Make sure the calculator and group setup is done correct. + */ + @Test + void assetGroupCalculatorIsSetupCorrect() { + var d = PRIORITY_CALCULATOR.dominanceFunction(); + + assertTrue(d.leftDominateRight(GROUP_A, GROUP_B)); + assertTrue(d.leftDominateRight(GROUP_B, GROUP_A)); + assertFalse(d.leftDominateRight(GROUP_A, GROUP_A)); + // 3 = 1&2, 5 = 1&4 + assertTrue(d.leftDominateRight(GROUP_A, GROUP_AB)); + assertFalse(d.leftDominateRight(GROUP_AB, GROUP_A)); + assertFalse(d.leftDominateRight(GROUP_AB, GROUP_AB)); + assertTrue(d.leftDominateRight(GROUP_AB, GROUP_AC)); + assertTrue(d.leftDominateRight(GROUP_AC, GROUP_AB)); + } +} From 4aed01b1a266fd7ba4c45f2e8ad5fbbb30c59543 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Fri, 29 Dec 2023 17:38:38 +0200 Subject: [PATCH 023/103] Fix typo --- .../street/model/edge/VehicleRentalEdgeTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java index f61c9599685..84f5efcc1c5 100644 --- a/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java +++ b/src/test/java/org/opentripplanner/street/model/edge/VehicleRentalEdgeTest.java @@ -227,8 +227,8 @@ private void initEdgeAndRequest( .withCar(car -> car.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) ) - .withBike(bik -> - bik.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) + .withBike(bike -> + bike.withRental(rental -> rental.withUseAvailabilityInformation(useRealtime)) ) .build() ) From 52d2107032468c75148226a6d9a8133d93b828fb Mon Sep 17 00:00:00 2001 From: Pi-Cla Date: Fri, 29 Dec 2023 19:57:42 -0700 Subject: [PATCH 024/103] doc: mention protomaps in basic tutorial It does not require installing any additional software and the interface is intuitive to use --- docs/Basic-Tutorial.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Basic-Tutorial.md b/docs/Basic-Tutorial.md index 6b993395aec..3d99d96f4da 100644 --- a/docs/Basic-Tutorial.md +++ b/docs/Basic-Tutorial.md @@ -64,6 +64,8 @@ states, from which you can prepare your own smaller bounding-box extracts using [Osmosis](http://wiki.openstreetmap.org/wiki/Osmosis#Extracting_bounding_boxes) , [osmconvert](http://wiki.openstreetmap.org/wiki/Osmconvert#Applying_Geographical_Borders), or (our favorite) [Osmium-Tool](https://osmcode.org/osmium-tool/manual.html#creating-geographic-extracts). +There is also [Protomaps](https://app.protomaps.com/) which can create custom extracts +for any region of the world with an easy to use drag and drop interface. OSM data can be delivered as XML or in the more compact binary PBF format. OpenTripPlanner consumes only PBF because it's smaller and more efficient. @@ -202,4 +204,4 @@ You can run the OTP .jar file with the `--help` option for a full list of comman ## Exploring the API -If you want to learn how to use OTP's API's, check out the [GraphQL tutorial](apis/GraphQL-Tutorial.md). \ No newline at end of file +If you want to learn how to use OTP's API's, check out the [GraphQL tutorial](apis/GraphQL-Tutorial.md). From cc80089ed05efe9801641714cf0f9a1afa609aa0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 03:32:35 +0000 Subject: [PATCH 025/103] fix(deps): update lucene.version to v9.9.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index de8baecefd9..fd08bc9975a 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ 1.11.5 5.5.3 1.4.14 - 9.8.0 + 9.9.1 2.0.10 2.0.15 1.26 From 5c8e8477eb31914a328670697ca9ac74857d965f Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Tue, 2 Jan 2024 12:42:52 +0200 Subject: [PATCH 026/103] Extract static method for OSM graph building --- .../islandpruning/EscalatorPruningTest.java | 50 ++----------------- .../islandpruning/IslandPruningUtils.java | 46 +++++++++++++++++ .../islandpruning/PruneNoThruIslandsTest.java | 41 +-------------- 3 files changed, 52 insertions(+), 85 deletions(-) create mode 100644 src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java index aa4191d3002..b063fcbd184 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java @@ -1,32 +1,22 @@ package org.opentripplanner.graph_builder.module.islandpruning; -import java.io.File; +import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; + import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.graph_builder.module.osm.OsmModule; -import org.opentripplanner.openstreetmap.OsmProvider; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.ResourceLoader; -import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; public class EscalatorPruningTest { private static Graph graph; - @BeforeAll - static void setup() { - graph = - buildOsmGraph(ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf")); - } - @Test public void streetEdgesBetweenEscalatorEdgesRetained() { + graph = + buildOsmGraph(ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf")); Assertions.assertTrue( graph .getStreetEdges() @@ -36,36 +26,4 @@ public void streetEdgesBetweenEscalatorEdgesRetained() { .containsAll(Set.of("490072445")) ); } - - private static Graph buildOsmGraph(File osmFile) { - try { - var deduplicator = new Deduplicator(); - var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); - // Add street data from OSM - OsmProvider osmProvider = new OsmProvider(osmFile, true); - OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); - - osmModule.buildGraph(); - - transitModel.index(); - graph.index(transitModel.getStopModel()); - - // Prune floating islands and set noThru where necessary - PruneIslands pruneIslands = new PruneIslands( - graph, - transitModel, - DataImportIssueStore.NOOP, - null - ); - pruneIslands.setPruningThresholdIslandWithoutStops(40); - pruneIslands.setPruningThresholdIslandWithStops(5); - pruneIslands.setAdaptivePruningFactor(1); - pruneIslands.buildGraph(); - - return graph; - } catch (Exception e) { - throw new RuntimeException(e); - } - } } diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java new file mode 100644 index 00000000000..499756de70e --- /dev/null +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java @@ -0,0 +1,46 @@ +package org.opentripplanner.graph_builder.module.islandpruning; + +import java.io.File; +import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; +import org.opentripplanner.graph_builder.module.osm.OsmModule; +import org.opentripplanner.openstreetmap.OsmProvider; +import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.transit.model.framework.Deduplicator; +import org.opentripplanner.transit.service.StopModel; +import org.opentripplanner.transit.service.TransitModel; + +public class IslandPruningUtils { + + static Graph buildOsmGraph(File osmFile) { + try { + var deduplicator = new Deduplicator(); + var graph = new Graph(deduplicator); + var transitModel = new TransitModel(new StopModel(), deduplicator); + // Add street data from OSM + OsmProvider osmProvider = new OsmProvider(osmFile, true); + OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); + + osmModule.buildGraph(); + + transitModel.index(); + graph.index(transitModel.getStopModel()); + + // Prune floating islands and set noThru where necessary + PruneIslands pruneIslands = new PruneIslands( + graph, + transitModel, + DataImportIssueStore.NOOP, + null + ); + pruneIslands.setPruningThresholdIslandWithoutStops(10); + pruneIslands.setPruningThresholdIslandWithStops(2); + pruneIslands.setAdaptivePruningFactor(50); + pruneIslands.setAdaptivePruningDistance(250); + pruneIslands.buildGraph(); + + return graph; + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java index 53a2d60fe0f..f9453b0941c 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java @@ -1,20 +1,15 @@ package org.opentripplanner.graph_builder.module.islandpruning; -import java.io.File; +import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; + import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.graph_builder.module.osm.OsmModule; -import org.opentripplanner.openstreetmap.OsmProvider; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.street.model.edge.StreetEdge; import org.opentripplanner.test.support.ResourceLoader; -import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; public class PruneNoThruIslandsTest { @@ -67,36 +62,4 @@ public void pruneFloatingBikeAndWalkIsland() { .contains("159830257") ); } - - private static Graph buildOsmGraph(File osmFile) { - try { - var deduplicator = new Deduplicator(); - var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); - // Add street data from OSM - OsmProvider osmProvider = new OsmProvider(osmFile, true); - OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); - - osmModule.buildGraph(); - - transitModel.index(); - graph.index(transitModel.getStopModel()); - - // Prune floating islands and set noThru where necessary - PruneIslands pruneIslands = new PruneIslands( - graph, - transitModel, - DataImportIssueStore.NOOP, - null - ); - pruneIslands.setPruningThresholdIslandWithoutStops(40); - pruneIslands.setPruningThresholdIslandWithStops(5); - pruneIslands.setAdaptivePruningFactor(1); - pruneIslands.buildGraph(); - - return graph; - } catch (Exception e) { - throw new RuntimeException(e); - } - } } From 9138ba08acb320ee2c9be83e5f2c849008282897 Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Tue, 2 Jan 2024 13:07:28 +0200 Subject: [PATCH 027/103] Make OSM graph building method package-private --- .../graph_builder/module/islandpruning/IslandPruningUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java index 499756de70e..dbe86247cac 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java @@ -9,7 +9,7 @@ import org.opentripplanner.transit.service.StopModel; import org.opentripplanner.transit.service.TransitModel; -public class IslandPruningUtils { +class IslandPruningUtils { static Graph buildOsmGraph(File osmFile) { try { From 32ebf6c4389b3e261fbe1e207624a7ef93c42130 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jan 2024 16:42:03 +0100 Subject: [PATCH 028/103] Move serialization code into sandbox --- .../ext/restapi/serialization}/FeedScopedIdDeserializer.java | 2 +- .../ext/restapi/serialization}/FeedScopedIdKeyDeserializer.java | 2 +- .../ext/restapi/serialization}/FeedScopedIdSerializer.java | 2 +- .../ext/restapi/serialization}/JSONObjectMapperProvider.java | 2 +- .../framework/graphql/GraphQLResponseSerializer.java | 2 +- .../opentripplanner/standalone/server/OTPWebApplication.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename src/{main/java/org/opentripplanner/apis/common/json => ext/java/org/opentripplanner/ext/restapi/serialization}/FeedScopedIdDeserializer.java (94%) rename src/{main/java/org/opentripplanner/apis/common/json => ext/java/org/opentripplanner/ext/restapi/serialization}/FeedScopedIdKeyDeserializer.java (91%) rename src/{main/java/org/opentripplanner/apis/common/json => ext/java/org/opentripplanner/ext/restapi/serialization}/FeedScopedIdSerializer.java (96%) rename src/{main/java/org/opentripplanner/apis/common/json => ext/java/org/opentripplanner/ext/restapi/serialization}/JSONObjectMapperProvider.java (98%) diff --git a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java similarity index 94% rename from src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java rename to src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java index b1946038e7e..75b1b58bfee 100644 --- a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdDeserializer.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdDeserializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.json; +package org.opentripplanner.ext.restapi.serialization; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java similarity index 91% rename from src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java rename to src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java index 316894763ad..75270e9dd0b 100644 --- a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdKeyDeserializer.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdKeyDeserializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.json; +package org.opentripplanner.ext.restapi.serialization; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.KeyDeserializer; diff --git a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java similarity index 96% rename from src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java rename to src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java index 471d80aa915..c9c67e675c4 100644 --- a/src/main/java/org/opentripplanner/apis/common/json/FeedScopedIdSerializer.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/serialization/FeedScopedIdSerializer.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.json; +package org.opentripplanner.ext.restapi.serialization; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java b/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java similarity index 98% rename from src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java rename to src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java index 6121a0ba698..e271e945ca1 100644 --- a/src/main/java/org/opentripplanner/apis/common/json/JSONObjectMapperProvider.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/serialization/JSONObjectMapperProvider.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.json; +package org.opentripplanner.ext.restapi.serialization; import com.bedatadriven.jackson.datatype.jts.JtsModule; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java b/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java index 25242456722..cb3b146a113 100644 --- a/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java +++ b/src/main/java/org/opentripplanner/framework/graphql/GraphQLResponseSerializer.java @@ -10,7 +10,7 @@ import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; -import org.opentripplanner.apis.common.json.JSONObjectMapperProvider; +import org.opentripplanner.ext.restapi.serialization.JSONObjectMapperProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java b/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java index 5612d98ea0c..b238a74c7d3 100644 --- a/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java +++ b/src/main/java/org/opentripplanner/standalone/server/OTPWebApplication.java @@ -18,7 +18,7 @@ import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider; import org.opentripplanner.api.common.OTPExceptionMapper; import org.opentripplanner.apis.APIEndpoints; -import org.opentripplanner.apis.common.json.JSONObjectMapperProvider; +import org.opentripplanner.ext.restapi.serialization.JSONObjectMapperProvider; import org.opentripplanner.framework.application.OTPFeature; import org.opentripplanner.standalone.api.OtpServerRequestContext; import org.slf4j.bridge.SLF4JBridgeHandler; From 2218c1af12110e1d84730f25a76870cf94e856ec Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 19 Dec 2023 18:52:42 +0100 Subject: [PATCH 029/103] Add new debug vector tiles --- .../api/configuration/APIEndpoints.java | 2 +- .../GraphInspectorVectorTileResource.java | 58 +++++++++++++++--- .../apis/vectortiles/MapboxStyleJson.java | 53 ++++++++++++++++ .../vector/RegularStopsLayerBuilder.java | 60 +++++++++++++++++++ 4 files changed, 164 insertions(+), 9 deletions(-) rename src/main/java/org/opentripplanner/{api/resource => apis/vectortiles}/GraphInspectorVectorTileResource.java (72%) create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java create mode 100644 src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java diff --git a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java b/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java index b0d38aa00cd..64bbb2896a2 100644 --- a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java @@ -19,13 +19,13 @@ import java.util.List; import org.opentripplanner.api.resource.BikeRental; import org.opentripplanner.api.resource.GraphInspectorTileResource; -import org.opentripplanner.api.resource.GraphInspectorVectorTileResource; import org.opentripplanner.api.resource.PlannerResource; import org.opentripplanner.api.resource.Routers; import org.opentripplanner.api.resource.ServerInfo; import org.opentripplanner.api.resource.UpdaterStatusResource; import org.opentripplanner.apis.gtfs.GtfsGraphQLAPI; import org.opentripplanner.apis.transmodel.TransmodelAPI; +import org.opentripplanner.apis.vectortiles.GraphInspectorVectorTileResource; import org.opentripplanner.ext.actuator.ActuatorAPI; import org.opentripplanner.ext.geocoder.GeocoderResource; import org.opentripplanner.ext.parkAndRideApi.ParkAndRideResource; diff --git a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java similarity index 72% rename from src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java rename to src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 2c21e0396ce..04d2630a301 100644 --- a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.resource; +package org.opentripplanner.apis.vectortiles; import static org.opentripplanner.framework.io.HttpUtils.APPLICATION_X_PROTOBUF; @@ -14,13 +14,20 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Objects; import java.util.function.Predicate; +import java.util.stream.Collectors; +import javax.annotation.Nonnull; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.model.TileJson; +import org.opentripplanner.apis.vectortiles.MapboxStyleJson.LayerStyleBuilder; +import org.opentripplanner.apis.vectortiles.MapboxStyleJson.VectorTileSource; +import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.inspector.vector.AreaStopsLayerBuilder; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.inspector.vector.RegularStopsLayerBuilder; import org.opentripplanner.inspector.vector.VectorTileResponseFactory; import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; import org.opentripplanner.model.FeedInfo; @@ -34,6 +41,7 @@ public class GraphInspectorVectorTileResource { private static final List> DEBUG_LAYERS = List.of( + new LayerParams("regularStops", LayerType.RegularStop), new LayerParams("areaStops", LayerType.AreaStop), new LayerParams("geofencingZones", LayerType.GeofencingZones) ); @@ -84,13 +92,7 @@ public TileJson getTileJson( @PathParam("layers") String requestedLayers ) { var envelope = serverContext.worldEnvelopeService().envelope().orElseThrow(); - List feedInfos = serverContext - .transitService() - .getFeedIds() - .stream() - .map(serverContext.transitService()::getFeedInfo) - .filter(Predicate.not(Objects::isNull)) - .toList(); + List feedInfos = feedInfos(); return new TileJson( uri, @@ -103,18 +105,58 @@ public TileJson getTileJson( ); } + @GET + @Path("/style.json") + @Produces(MediaType.APPLICATION_JSON) + public MapboxStyleJson getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) { + var base = HttpUtils.getBaseAddress(uri, headers); + final String allLayers = DEBUG_LAYERS + .stream() + .map(LayerParameters::name) + .collect(Collectors.joining(",")); + var url = + base + + "/otp/routers/" + + ignoreRouterId + + "/inspector/vectortile/" + + allLayers + + "/tilejson.json"; + return new MapboxStyleJson( + "OTP Debug Tiles", + Map.of("debug", new VectorTileSource("vector", url)), + List.of(LayerStyleBuilder.ofId("regular-stop").source("regularStops").circleColor("#f73109").build()) + ); + } + + @Nonnull + private List feedInfos() { + return serverContext + .transitService() + .getFeedIds() + .stream() + .map(serverContext.transitService()::getFeedInfo) + .filter(Predicate.not(Objects::isNull)) + .toList(); + } + private static LayerBuilder createLayerBuilder( LayerParameters layerParameters, Locale locale, OtpServerRequestContext context ) { return switch (layerParameters.type()) { + case RegularStop -> new RegularStopsLayerBuilder( + context.transitService(), + layerParameters, + locale + ); case AreaStop -> new AreaStopsLayerBuilder(context.transitService(), layerParameters, locale); case GeofencingZones -> new GeofencingZonesLayerBuilder(context.graph(), layerParameters); }; } private enum LayerType { + RegularStop, AreaStop, GeofencingZones, } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java new file mode 100644 index 00000000000..72f92a9c02e --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java @@ -0,0 +1,53 @@ +package org.opentripplanner.apis.vectortiles; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.opentripplanner.framework.json.ObjectMappers; + +public record MapboxStyleJson( + String name, + Map sources, + List layers +) { + public record VectorTileSource(String type, String url) {} + + public static class LayerStyleBuilder { + + private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.ignoringExtraFields(); + private final Map props = new HashMap<>(); + private final Map paint = new HashMap<>(); + + public static LayerStyleBuilder ofId(String id) { + return new LayerStyleBuilder(id); + } + + private LayerStyleBuilder(String id) { + props.put("id", id); + } + + /** + * Which vector tile source this should apply to. + */ + public LayerStyleBuilder source(String source) { + props.put("source", source); + return this; + } + + public LayerStyleBuilder circleColor(String color) { + paint.put("circle-color", color); + return this; + } + + public JsonNode build() { + var copy = new HashMap<>(props); + if(!paint.isEmpty()) { + copy.put("paint", paint); + } + return OBJECT_MAPPER.valueToTree(copy); + } + + } +} diff --git a/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java new file mode 100644 index 00000000000..c4bf0d88a23 --- /dev/null +++ b/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java @@ -0,0 +1,60 @@ +package org.opentripplanner.inspector.vector; + +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.function.Function; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.transit.service.TransitService; + +/** + * A vector tile layer containing all {@link RegularStop}s inside the vector tile bounds. + */ +public class RegularStopsLayerBuilder extends LayerBuilder { + + private static final Map mappers = Map.of( + MapperType.DebugClient, + DebugClientAreaStopPropertyMapper::create + ); + private final Function> findAreaStops; + + public RegularStopsLayerBuilder( + TransitService transitService, + LayerParameters layerParameters, + Locale locale + ) { + super( + mappers.get(MapperType.valueOf(layerParameters.mapper())).build(transitService, locale), + layerParameters.name(), + layerParameters.expansionFactor() + ); + this.findAreaStops = transitService::findRegularStop; + } + + @Override + protected List getGeometries(Envelope query) { + return findAreaStops + .apply(query) + .stream() + .map(stop -> { + Geometry geometry = stop.getGeometry().copy(); + geometry.setUserData(stop); + return geometry; + }) + .toList(); + } + + enum MapperType { + DebugClient, + } + + @FunctionalInterface + private interface MapperFactory { + PropertyMapper build(TransitService transitService, Locale locale); + } +} From 176187c5dba4a735fbd78171d98c5dda0c29c1cb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 19 Dec 2023 18:48:30 +0100 Subject: [PATCH 030/103] Add stop layer to tile.json --- .../GraphInspectorVectorTileResource.java | 40 ++++++- .../apis/vectortiles/MapboxStyleJson.java | 53 --------- .../vectortiles/model/LayerStyleBuilder.java | 105 ++++++++++++++++++ .../vectortiles/model/MapboxStyleJson.java | 46 ++++++++ .../apis/vectortiles/model/TileSource.java | 25 +++++ .../vector/AreaStopsLayerBuilder.java | 10 +- .../DebugClientAreaStopPropertyMapper.java | 14 +-- .../vector/RegularStopsLayerBuilder.java | 20 +--- .../vector/AreaStopLayerBuilderTest.java | 5 +- 9 files changed, 225 insertions(+), 93 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 04d2630a301..8df1fd9e388 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -14,15 +14,17 @@ import java.util.Arrays; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.Objects; import java.util.function.Predicate; import java.util.stream.Collectors; import javax.annotation.Nonnull; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.model.TileJson; -import org.opentripplanner.apis.vectortiles.MapboxStyleJson.LayerStyleBuilder; -import org.opentripplanner.apis.vectortiles.MapboxStyleJson.VectorTileSource; +import org.opentripplanner.apis.vectortiles.model.LayerStyleBuilder; +import org.opentripplanner.apis.vectortiles.model.MapboxStyleJson; +import org.opentripplanner.apis.vectortiles.model.TileSource; +import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; +import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.inspector.vector.AreaStopsLayerBuilder; import org.opentripplanner.inspector.vector.LayerBuilder; @@ -121,10 +123,38 @@ public MapboxStyleJson getTileJson(@Context UriInfo uri, @Context HttpHeaders he "/inspector/vectortile/" + allLayers + "/tilejson.json"; + var vectorSource = new VectorSource("debug", url); + var backgroundSource = new RasterSource( + "background", + List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), + 256 + ); + List sources = List.of( + backgroundSource, + vectorSource + ); return new MapboxStyleJson( "OTP Debug Tiles", - Map.of("debug", new VectorTileSource("vector", url)), - List.of(LayerStyleBuilder.ofId("regular-stop").source("regularStops").circleColor("#f73109").build()) + sources, + List.of( + LayerStyleBuilder + .ofId("background") + .typeRaster() + .source(backgroundSource) + .minZoom(0) + .maxZoom(22) + .build(), + LayerStyleBuilder + .ofId("regular-stop") + .source(vectorSource) + .sourceLayer("regularStops") + .typeCircle() + .circleStroke("#140d0e", 1) + .circleColor("#fcf9fa") + .minZoom(13) + .maxZoom(22) + .build() + ) ); } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java deleted file mode 100644 index 72f92a9c02e..00000000000 --- a/src/main/java/org/opentripplanner/apis/vectortiles/MapboxStyleJson.java +++ /dev/null @@ -1,53 +0,0 @@ -package org.opentripplanner.apis.vectortiles; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.opentripplanner.framework.json.ObjectMappers; - -public record MapboxStyleJson( - String name, - Map sources, - List layers -) { - public record VectorTileSource(String type, String url) {} - - public static class LayerStyleBuilder { - - private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.ignoringExtraFields(); - private final Map props = new HashMap<>(); - private final Map paint = new HashMap<>(); - - public static LayerStyleBuilder ofId(String id) { - return new LayerStyleBuilder(id); - } - - private LayerStyleBuilder(String id) { - props.put("id", id); - } - - /** - * Which vector tile source this should apply to. - */ - public LayerStyleBuilder source(String source) { - props.put("source", source); - return this; - } - - public LayerStyleBuilder circleColor(String color) { - paint.put("circle-color", color); - return this; - } - - public JsonNode build() { - var copy = new HashMap<>(props); - if(!paint.isEmpty()) { - copy.put("paint", paint); - } - return OBJECT_MAPPER.valueToTree(copy); - } - - } -} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java new file mode 100644 index 00000000000..65a009ec53e --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java @@ -0,0 +1,105 @@ +package org.opentripplanner.apis.vectortiles.model; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Stream; +import org.opentripplanner.framework.json.ObjectMappers; + +/** + * Builds a Maplibre/Mapbox vector tile + * layer style. + */ +public class LayerStyleBuilder { + + private static final ObjectMapper OBJECT_MAPPER = ObjectMappers.ignoringExtraFields(); + private static final String TYPE = "type"; + private static final String SOURCE_LAYER = "source-layer"; + private final Map props = new HashMap<>(); + private final Map paint = new HashMap<>(); + + public static LayerStyleBuilder ofId(String id) { + return new LayerStyleBuilder(id); + } + + public enum LayerType { + Circle, + Raster, + } + + private LayerStyleBuilder(String id) { + props.put("id", id); + } + + public LayerStyleBuilder minZoom(int i) { + props.put("minzoom", i); + return this; + } + + public LayerStyleBuilder maxZoom(int i) { + props.put("maxzoom", i); + return this; + } + + /** + * Which vector tile source this should apply to. + */ + public LayerStyleBuilder source(TileSource source) { + props.put("source", source.id()); + return this; + } + + public LayerStyleBuilder sourceLayer(String source) { + props.put(SOURCE_LAYER, source); + return this; + } + + public LayerStyleBuilder typeRaster() { + return type(LayerType.Raster); + } + + public LayerStyleBuilder typeCircle() { + return type(LayerType.Circle); + } + + private LayerStyleBuilder type(LayerType type) { + props.put(TYPE, type.name().toLowerCase()); + return this; + } + + public LayerStyleBuilder circleColor(String color) { + paint.put("circle-color", validateColor(color)); + return this; + } + + public LayerStyleBuilder circleStroke(String color, int width) { + paint.put("circle-stroke-color", validateColor(color)); + paint.put("circle-stroke-width", width); + return this; + } + + public JsonNode build() { + validate(); + + var copy = new HashMap<>(props); + if (!paint.isEmpty()) { + copy.put("paint", paint); + } + return OBJECT_MAPPER.valueToTree(copy); + } + + private String validateColor(String color) { + if (!color.startsWith("#")) { + throw new IllegalArgumentException("Colors must start with '#'"); + } + return color; + } + + private void validate() { + Stream + .of(TYPE) + .forEach(p -> Objects.requireNonNull(props.get(p), "%s must be set".formatted(p))); + } +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java new file mode 100644 index 00000000000..bf84b697b92 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java @@ -0,0 +1,46 @@ +package org.opentripplanner.apis.vectortiles.model; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public final class MapboxStyleJson { + + private final String name; + private final List sources; + private final List layers; + + public MapboxStyleJson( + String name, + List sources, + List layers + ) { + this.name = name; + this.sources = sources; + this.layers = layers; + } + + @JsonSerialize + public int version() { + return 8; + } + + @JsonSerialize + public String name() { + return name; + } + + @JsonSerialize + public Map sources() { + var output = new HashMap(); + sources.forEach(s -> output.put(s.id(), s)); + return output; + } + + @JsonSerialize + public List layers() { + return layers; + } +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java new file mode 100644 index 00000000000..2e404d9a1eb --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java @@ -0,0 +1,25 @@ +package org.opentripplanner.apis.vectortiles.model; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.List; + +public sealed interface TileSource { + @JsonSerialize + String type(); + + String id(); + + record VectorSource(String id, String url) implements TileSource { + @Override + public String type() { + return "vector"; + } + } + + record RasterSource(String id, List tiles, int tileSize) implements TileSource { + @Override + public String type() { + return "raster"; + } + } +} diff --git a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java index 1604cf7d8d1..6ce7b0962ba 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java @@ -3,23 +3,19 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.opentripplanner.api.mapping.PropertyMapper; import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; /** * A vector tile layer containing all {@link AreaStop}s inside the vector tile bounds. */ -public class AreaStopsLayerBuilder extends LayerBuilder { +public class AreaStopsLayerBuilder extends LayerBuilder { - private static final Map mappers = Map.of( - MapperType.DebugClient, - DebugClientAreaStopPropertyMapper::create - ); private final Function> findAreaStops; public AreaStopsLayerBuilder( @@ -28,7 +24,7 @@ public AreaStopsLayerBuilder( Locale locale ) { super( - mappers.get(MapperType.valueOf(layerParameters.mapper())).build(transitService, locale), + new DebugClientAreaStopPropertyMapper(locale), layerParameters.name(), layerParameters.expansionFactor() ); diff --git a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java index 88f7a17385b..1d507140378 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java @@ -5,29 +5,29 @@ import java.util.Locale; import org.opentripplanner.api.mapping.I18NStringMapper; import org.opentripplanner.api.mapping.PropertyMapper; -import org.opentripplanner.transit.model.site.AreaStop; +import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; /** * A {@link PropertyMapper} for the {@link AreaStopsLayerBuilder} for the OTP debug client. */ -public class DebugClientAreaStopPropertyMapper extends PropertyMapper { +public class DebugClientAreaStopPropertyMapper extends PropertyMapper { private final I18NStringMapper i18NStringMapper; - public DebugClientAreaStopPropertyMapper(TransitService transitService, Locale locale) { + public DebugClientAreaStopPropertyMapper(Locale locale) { this.i18NStringMapper = new I18NStringMapper(locale); } - public static PropertyMapper create(TransitService transitService, Locale locale) { - return new DebugClientAreaStopPropertyMapper(transitService, locale); + public static PropertyMapper create(TransitService ignored, Locale locale) { + return new DebugClientAreaStopPropertyMapper(locale); } @Override - protected Collection map(AreaStop input) { + protected Collection map(StopLocation input) { return List.of( new KeyValue("id", input.getId().toString()), - new KeyValue("name", i18NStringMapper.mapNonnullToApi(input.getName())) + new KeyValue("name", i18NStringMapper.mapToApi(input.getName())) ); } } diff --git a/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java index c4bf0d88a23..26e3f8726ae 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java @@ -3,24 +3,18 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import java.util.Map; import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.apis.common.mapping.PropertyMapper; -import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.RegularStop; +import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; /** * A vector tile layer containing all {@link RegularStop}s inside the vector tile bounds. */ -public class RegularStopsLayerBuilder extends LayerBuilder { +public class RegularStopsLayerBuilder extends LayerBuilder { - private static final Map mappers = Map.of( - MapperType.DebugClient, - DebugClientAreaStopPropertyMapper::create - ); private final Function> findAreaStops; public RegularStopsLayerBuilder( @@ -29,7 +23,7 @@ public RegularStopsLayerBuilder( Locale locale ) { super( - mappers.get(MapperType.valueOf(layerParameters.mapper())).build(transitService, locale), + new DebugClientAreaStopPropertyMapper(locale), layerParameters.name(), layerParameters.expansionFactor() ); @@ -49,12 +43,4 @@ protected List getGeometries(Envelope query) { .toList(); } - enum MapperType { - DebugClient, - } - - @FunctionalInterface - private interface MapperFactory { - PropertyMapper build(TransitService transitService, Locale locale); - } } diff --git a/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java b/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java index 09b64adcf75..6f2ca872f21 100644 --- a/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java +++ b/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java @@ -38,10 +38,7 @@ class AreaStopLayerBuilderTest { @Test void map() { - var subject = new DebugClientAreaStopPropertyMapper( - new DefaultTransitService(new TransitModel()), - Locale.ENGLISH - ); + var subject = new DebugClientAreaStopPropertyMapper(Locale.ENGLISH); var properties = subject.map(areaStop); From 7aaf79ff43d1421786ac5c0e4c8297d783b7b06b Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 19 Dec 2023 23:41:36 +0100 Subject: [PATCH 031/103] Move classes into their own packages --- .../GraphInspectorVectorTileResource.java | 9 ++--- .../vectortiles/model/LayerStyleBuilder.java | 5 +++ .../vectortiles/model/MapboxStyleJson.java | 6 +-- .../opentripplanner/astar/model/BinHeap.java | 12 ------ .../vector/edge/EdgeLayerBuilder.java | 40 +++++++++++++++++++ .../vector/edge/EdgePropertyMapper.java | 18 +++++++++ .../GeofencingZonesLayerBuilder.java | 17 +------- .../{ => stop}/AreaStopsLayerBuilder.java | 18 ++------- .../{ => stop}/RegularStopsLayerBuilder.java | 7 ++-- .../StopLocationPropertyMapper.java} | 9 +++-- .../{ => stop}/AreaStopLayerBuilderTest.java | 7 ++-- 11 files changed, 84 insertions(+), 64 deletions(-) create mode 100644 src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java create mode 100644 src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java rename src/main/java/org/opentripplanner/inspector/vector/{ => stop}/AreaStopsLayerBuilder.java (77%) rename src/main/java/org/opentripplanner/inspector/vector/{ => stop}/RegularStopsLayerBuilder.java (84%) rename src/main/java/org/opentripplanner/inspector/vector/{DebugClientAreaStopPropertyMapper.java => stop/StopLocationPropertyMapper.java} (74%) rename src/test/java/org/opentripplanner/inspector/vector/{ => stop}/AreaStopLayerBuilderTest.java (86%) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 8df1fd9e388..9d083bd5e03 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -26,12 +26,12 @@ import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.framework.io.HttpUtils; -import org.opentripplanner.inspector.vector.AreaStopsLayerBuilder; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.inspector.vector.RegularStopsLayerBuilder; import org.opentripplanner.inspector.vector.VectorTileResponseFactory; import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; +import org.opentripplanner.inspector.vector.stop.AreaStopsLayerBuilder; +import org.opentripplanner.inspector.vector.stop.RegularStopsLayerBuilder; import org.opentripplanner.model.FeedInfo; import org.opentripplanner.standalone.api.OtpServerRequestContext; @@ -129,10 +129,7 @@ public MapboxStyleJson getTileJson(@Context UriInfo uri, @Context HttpHeaders he List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), 256 ); - List sources = List.of( - backgroundSource, - vectorSource - ); + List sources = List.of(backgroundSource, vectorSource); return new MapboxStyleJson( "OTP Debug Tiles", sources, diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java index 65a009ec53e..759ce7eeb30 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java @@ -51,6 +51,11 @@ public LayerStyleBuilder source(TileSource source) { return this; } + /** + * For vector tile sources, specify which source layer in the tile the styles should apply to. + * There is an unfortunate collision in the name "layer" as it can both refer to a styling layer + * and the layer inside the vector tile. + */ public LayerStyleBuilder sourceLayer(String source) { props.put(SOURCE_LAYER, source); return this; diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java index bf84b697b92..6461d697bfc 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java @@ -12,11 +12,7 @@ public final class MapboxStyleJson { private final List sources; private final List layers; - public MapboxStyleJson( - String name, - List sources, - List layers - ) { + public MapboxStyleJson(String name, List sources, List layers) { this.name = name; this.sources = sources; this.layers = layers; diff --git a/src/main/java/org/opentripplanner/astar/model/BinHeap.java b/src/main/java/org/opentripplanner/astar/model/BinHeap.java index 9bc2b0762a8..1e9b540a77a 100644 --- a/src/main/java/org/opentripplanner/astar/model/BinHeap.java +++ b/src/main/java/org/opentripplanner/astar/model/BinHeap.java @@ -79,14 +79,6 @@ public void rekey(T e, double p) { prio[i] = p; } - public void dump() { - for (int i = 0; i <= capacity; i++) { - String topMarker = (i > size) ? "(UNUSED)" : ""; - System.out.printf("%d\t%f\t%s\t%s\n", i, prio[i], elem[i], topMarker); - } - System.out.printf("-----------------------\n"); - } - public void reset() { // empties the queue in one operation size = 0; @@ -135,8 +127,4 @@ public void resize(int capacity) { prio = Arrays.copyOf(prio, capacity + 1); elem = Arrays.copyOf(elem, capacity + 1); } - - public int getCapacity() { - return capacity; - } } diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java new file mode 100644 index 00000000000..3c1bc3436d8 --- /dev/null +++ b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java @@ -0,0 +1,40 @@ +package org.opentripplanner.inspector.vector.edge; + +import java.util.List; +import org.locationtech.jts.geom.Envelope; +import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.framework.geometry.GeometryUtils; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.routing.graph.Graph; +import org.opentripplanner.routing.graph.index.StreetIndex; +import org.opentripplanner.street.model.edge.Edge; +import org.opentripplanner.street.model.vertex.Vertex; +import org.opentripplanner.transit.model.site.AreaStop; + +/** + * A vector tile layer containing all {@link AreaStop}s inside the vector tile bounds. + */ +public class EdgeLayerBuilder extends LayerBuilder { + + private final StreetIndex streetIndex; + + public EdgeLayerBuilder(Graph graph, LayerParameters layerParameters) { + super(new EdgePropertyMapper(), layerParameters.name(), layerParameters.expansionFactor()); + this.streetIndex = graph.getStreetIndex(); + } + + @Override + protected List getGeometries(Envelope query) { + return streetIndex + .getEdgesForEnvelope(query) + .stream() + .filter(edge -> edge.getGeometry() != null) + .map(edge -> { + Geometry geometry = edge.getGeometry().copy(); + geometry.setUserData(edge); + return geometry; + }) + .toList(); + } +} diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java new file mode 100644 index 00000000000..936c965c9f5 --- /dev/null +++ b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java @@ -0,0 +1,18 @@ +package org.opentripplanner.inspector.vector.edge; + +import java.util.Collection; +import java.util.List; +import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.inspector.vector.KeyValue; +import org.opentripplanner.street.model.edge.Edge; + +/** + * A {@link PropertyMapper} for the {@link EdgeLayerBuilder} for the OTP debug client. + */ +public class EdgePropertyMapper extends PropertyMapper { + + @Override + protected Collection map(Edge edge) { + return List.of(new KeyValue("java-class", edge.getClass().getSimpleName())); + } +} diff --git a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java index 8a77b8502ea..24be8d202a8 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java @@ -1,10 +1,8 @@ package org.opentripplanner.inspector.vector.geofencing; import java.util.List; -import java.util.Map; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.PropertyMapper; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; @@ -19,15 +17,11 @@ */ public class GeofencingZonesLayerBuilder extends LayerBuilder { - private static final Map mappers = Map.of( - MapperType.DebugClient, - transitService -> new GeofencingZonesPropertyMapper() - ); private final StreetIndex streetIndex; public GeofencingZonesLayerBuilder(Graph graph, LayerParameters layerParameters) { super( - mappers.get(MapperType.valueOf(layerParameters.mapper())).build(graph), + new GeofencingZonesPropertyMapper(), layerParameters.name(), layerParameters.expansionFactor() ); @@ -47,13 +41,4 @@ protected List getGeometries(Envelope query) { }) .toList(); } - - enum MapperType { - DebugClient, - } - - @FunctionalInterface - private interface MapperFactory { - PropertyMapper build(Graph transitService); - } } diff --git a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java similarity index 77% rename from src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java rename to src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java index 6ce7b0962ba..d1a2552e4e2 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.inspector.vector; +package org.opentripplanner.inspector.vector.stop; import java.util.Collection; import java.util.List; @@ -6,7 +6,8 @@ import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; @@ -24,7 +25,7 @@ public AreaStopsLayerBuilder( Locale locale ) { super( - new DebugClientAreaStopPropertyMapper(locale), + new StopLocationPropertyMapper(locale), layerParameters.name(), layerParameters.expansionFactor() ); @@ -38,20 +39,9 @@ protected List getGeometries(Envelope query) { .stream() .map(areaStop -> { Geometry geometry = areaStop.getGeometry().copy(); - geometry.setUserData(areaStop); - return geometry; }) .toList(); } - - enum MapperType { - DebugClient, - } - - @FunctionalInterface - private interface MapperFactory { - PropertyMapper build(TransitService transitService, Locale locale); - } } diff --git a/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java similarity index 84% rename from src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java rename to src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java index 26e3f8726ae..f943e23eb88 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/RegularStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java @@ -1,4 +1,4 @@ -package org.opentripplanner.inspector.vector; +package org.opentripplanner.inspector.vector.stop; import java.util.Collection; import java.util.List; @@ -6,6 +6,8 @@ import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; +import org.opentripplanner.inspector.vector.LayerBuilder; +import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; @@ -23,7 +25,7 @@ public RegularStopsLayerBuilder( Locale locale ) { super( - new DebugClientAreaStopPropertyMapper(locale), + new StopLocationPropertyMapper(locale), layerParameters.name(), layerParameters.expansionFactor() ); @@ -42,5 +44,4 @@ protected List getGeometries(Envelope query) { }) .toList(); } - } diff --git a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java similarity index 74% rename from src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java rename to src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java index 1d507140378..d2e1accf483 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java @@ -1,26 +1,27 @@ -package org.opentripplanner.inspector.vector; +package org.opentripplanner.inspector.vector.stop; import java.util.Collection; import java.util.List; import java.util.Locale; import org.opentripplanner.api.mapping.I18NStringMapper; import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.site.StopLocation; import org.opentripplanner.transit.service.TransitService; /** * A {@link PropertyMapper} for the {@link AreaStopsLayerBuilder} for the OTP debug client. */ -public class DebugClientAreaStopPropertyMapper extends PropertyMapper { +public class StopLocationPropertyMapper extends PropertyMapper { private final I18NStringMapper i18NStringMapper; - public DebugClientAreaStopPropertyMapper(Locale locale) { + public StopLocationPropertyMapper(Locale locale) { this.i18NStringMapper = new I18NStringMapper(locale); } public static PropertyMapper create(TransitService ignored, Locale locale) { - return new DebugClientAreaStopPropertyMapper(locale); + return new StopLocationPropertyMapper(locale); } @Override diff --git a/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java b/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java similarity index 86% rename from src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java rename to src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java index 6f2ca872f21..3fea49ab236 100644 --- a/src/test/java/org/opentripplanner/inspector/vector/AreaStopLayerBuilderTest.java +++ b/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.inspector.vector; +package org.opentripplanner.inspector.vector.stop; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -9,12 +9,11 @@ import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.framework.FeedScopedId; import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.service.DefaultTransitService; import org.opentripplanner.transit.service.StopModel; import org.opentripplanner.transit.service.StopModelBuilder; -import org.opentripplanner.transit.service.TransitModel; class AreaStopLayerBuilderTest { @@ -38,7 +37,7 @@ class AreaStopLayerBuilderTest { @Test void map() { - var subject = new DebugClientAreaStopPropertyMapper(Locale.ENGLISH); + var subject = new StopLocationPropertyMapper(Locale.ENGLISH); var properties = subject.map(areaStop); From 033000a2afa7921730bf41a64fb5517b7eaf6a2f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 20 Dec 2023 11:20:08 +0100 Subject: [PATCH 032/103] Move styles into separate class --- .../apis/vectortiles/DebugStyleJson.java | 43 +++++++++++++++++++ .../GraphInspectorVectorTileResource.java | 35 +-------------- .../vectortiles/model/LayerStyleBuilder.java | 2 +- .../vectortiles/model/MapboxStyleJson.java | 4 +- 4 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java new file mode 100644 index 00000000000..75592cbc0cd --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java @@ -0,0 +1,43 @@ +package org.opentripplanner.apis.vectortiles; + +import java.util.List; +import org.opentripplanner.apis.vectortiles.model.LayerStyleBuilder; +import org.opentripplanner.apis.vectortiles.model.MapboxStyleJson; +import org.opentripplanner.apis.vectortiles.model.TileSource; +import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; +import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; + +public class DebugStyleJson { + + private static final RasterSource BACKGROUND_SOURCE = new RasterSource( + "background", + List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), + 256 + ); + + static MapboxStyleJson build(String url) { + var vectorSource = new VectorSource("debug", url); + List sources = List.of(BACKGROUND_SOURCE, vectorSource); + return new MapboxStyleJson( + "OTP Debug Tiles", + sources, + List.of( + LayerStyleBuilder + .ofId("background") + .typeRaster() + .source(BACKGROUND_SOURCE) + .minZoom(0) + .maxZoom(22), + LayerStyleBuilder + .ofId("regular-stop") + .typeCircle() + .source(vectorSource) + .sourceLayer("regularStops") + .circleStroke("#140d0e", 1) + .circleColor("#fcf9fa") + .minZoom(13) + .maxZoom(22) + ) + ); + } +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 9d083bd5e03..6d23e533aad 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -20,11 +20,7 @@ import javax.annotation.Nonnull; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.model.TileJson; -import org.opentripplanner.apis.vectortiles.model.LayerStyleBuilder; import org.opentripplanner.apis.vectortiles.model.MapboxStyleJson; -import org.opentripplanner.apis.vectortiles.model.TileSource; -import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; -import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; @@ -123,36 +119,7 @@ public MapboxStyleJson getTileJson(@Context UriInfo uri, @Context HttpHeaders he "/inspector/vectortile/" + allLayers + "/tilejson.json"; - var vectorSource = new VectorSource("debug", url); - var backgroundSource = new RasterSource( - "background", - List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), - 256 - ); - List sources = List.of(backgroundSource, vectorSource); - return new MapboxStyleJson( - "OTP Debug Tiles", - sources, - List.of( - LayerStyleBuilder - .ofId("background") - .typeRaster() - .source(backgroundSource) - .minZoom(0) - .maxZoom(22) - .build(), - LayerStyleBuilder - .ofId("regular-stop") - .source(vectorSource) - .sourceLayer("regularStops") - .typeCircle() - .circleStroke("#140d0e", 1) - .circleColor("#fcf9fa") - .minZoom(13) - .maxZoom(22) - .build() - ) - ); + return DebugStyleJson.build(url); } @Nonnull diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java index 759ce7eeb30..d549f2938e0 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java @@ -85,7 +85,7 @@ public LayerStyleBuilder circleStroke(String color, int width) { return this; } - public JsonNode build() { + public JsonNode toJson() { validate(); var copy = new HashMap<>(props); diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java index 6461d697bfc..6214a5aac65 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java @@ -12,10 +12,10 @@ public final class MapboxStyleJson { private final List sources; private final List layers; - public MapboxStyleJson(String name, List sources, List layers) { + public MapboxStyleJson(String name, List sources, List layers) { this.name = name; this.sources = sources; - this.layers = layers; + this.layers = layers.stream().map(LayerStyleBuilder::toJson).toList(); } @JsonSerialize From 57f07ddac6a2c34973b4f591b49ad20bec83e02f Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 21 Dec 2023 08:30:45 +0100 Subject: [PATCH 033/103] Use style.json from server --- client-next/src/components/MapView/MapView.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 011d9408148..258a925a142 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -4,7 +4,6 @@ import { TripPattern, TripQuery, TripQueryVariables } from '../../gql/graphql.ts import { NavigationMarkers } from './NavigationMarkers.tsx'; import { LegLines } from './LegLines.tsx'; import { useMapDoubleClick } from './useMapDoubleClick.ts'; -import { mapStyle } from './mapStyle.ts'; import { useState } from 'react'; import { ContextMenuPopup } from './ContextMenuPopup.tsx'; @@ -37,12 +36,21 @@ export function MapView({ // @ts-ignore mapLib={import('maplibre-gl')} // @ts-ignore - mapStyle={mapStyle} + mapStyle="http://localhost:8080/otp/routers/default/inspector/vectortile/style.json" initialViewState={initialViewState} onDblClick={onMapDoubleClick} onContextMenu={(e) => { setShowPopup(e.lngLat); }} + interactiveLayerIds={["regular-stop"]} + onClick={e => { + console.log(e.features); + }} + // put lat/long in URL and pan to it on page reload + hash={true} + // disable pitching and rotating the map + touchPitch={false} + dragRotate={false} > Date: Thu, 21 Dec 2023 22:03:33 +0100 Subject: [PATCH 034/103] Refactor dependencies of map style classes --- ...ebugStyleJson.java => DebugStyleSpec.java} | 16 +++--- .../GraphInspectorVectorTileResource.java | 50 +++++++++---------- .../apis/vectortiles/model/LayerParams.java | 15 ++++++ .../vectortiles/model/LayerStyleBuilder.java | 7 +++ .../apis/vectortiles/model/LayerType.java | 7 +++ .../{MapboxStyleJson.java => StyleSpec.java} | 8 ++- .../apis/vectortiles/model/TileSource.java | 6 +++ .../framework/io/HttpUtils.java | 6 +-- 8 files changed, 77 insertions(+), 38 deletions(-) rename src/main/java/org/opentripplanner/apis/vectortiles/{DebugStyleJson.java => DebugStyleSpec.java} (70%) create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java create mode 100644 src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java rename src/main/java/org/opentripplanner/apis/vectortiles/model/{MapboxStyleJson.java => StyleSpec.java} (77%) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java similarity index 70% rename from src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java rename to src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 75592cbc0cd..9121d671c06 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleJson.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -2,12 +2,12 @@ import java.util.List; import org.opentripplanner.apis.vectortiles.model.LayerStyleBuilder; -import org.opentripplanner.apis.vectortiles.model.MapboxStyleJson; +import org.opentripplanner.apis.vectortiles.model.StyleSpec; import org.opentripplanner.apis.vectortiles.model.TileSource; import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; -public class DebugStyleJson { +public class DebugStyleSpec { private static final RasterSource BACKGROUND_SOURCE = new RasterSource( "background", @@ -15,10 +15,11 @@ public class DebugStyleJson { 256 ); - static MapboxStyleJson build(String url) { - var vectorSource = new VectorSource("debug", url); - List sources = List.of(BACKGROUND_SOURCE, vectorSource); - return new MapboxStyleJson( + public record VectorSourceLayer(VectorSource vectorSource, String vectorLayer) {} + + static StyleSpec build(VectorSource debugSource, VectorSourceLayer regularStops) { + List sources = List.of(BACKGROUND_SOURCE, debugSource); + return new StyleSpec( "OTP Debug Tiles", sources, List.of( @@ -31,8 +32,7 @@ static MapboxStyleJson build(String url) { LayerStyleBuilder .ofId("regular-stop") .typeCircle() - .source(vectorSource) - .sourceLayer("regularStops") + .vectorSourceLayer(regularStops) .circleStroke("#140d0e", 1) .circleColor("#fcf9fa") .minZoom(13) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 6d23e533aad..7e800b5639b 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -20,7 +20,10 @@ import javax.annotation.Nonnull; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.model.TileJson; -import org.opentripplanner.apis.vectortiles.model.MapboxStyleJson; +import org.opentripplanner.apis.vectortiles.model.LayerParams; +import org.opentripplanner.apis.vectortiles.model.LayerType; +import org.opentripplanner.apis.vectortiles.model.StyleSpec; +import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.framework.io.HttpUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; @@ -38,10 +41,19 @@ @Path("/routers/{ignoreRouterId}/inspector/vectortile") public class GraphInspectorVectorTileResource { + private static final LayerParams REGULAR_STOPS = new LayerParams( + "regularStops", + LayerType.RegularStop + ); + private static final LayerParams AREA_STOPS = new LayerParams("areaStops", LayerType.AreaStop); + private static final LayerParams GEOFENCING_ZONES = new LayerParams( + "geofencingZones", + LayerType.GeofencingZones + ); private static final List> DEBUG_LAYERS = List.of( - new LayerParams("regularStops", LayerType.RegularStop), - new LayerParams("areaStops", LayerType.AreaStop), - new LayerParams("geofencingZones", LayerType.GeofencingZones) + REGULAR_STOPS, + AREA_STOPS, + GEOFENCING_ZONES ); private final OtpServerRequestContext serverContext; @@ -106,20 +118,21 @@ public TileJson getTileJson( @GET @Path("/style.json") @Produces(MediaType.APPLICATION_JSON) - public MapboxStyleJson getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) { + public StyleSpec getTileJson(@Context UriInfo uri, @Context HttpHeaders headers) { var base = HttpUtils.getBaseAddress(uri, headers); final String allLayers = DEBUG_LAYERS .stream() .map(LayerParameters::name) .collect(Collectors.joining(",")); var url = - base + - "/otp/routers/" + - ignoreRouterId + - "/inspector/vectortile/" + - allLayers + - "/tilejson.json"; - return DebugStyleJson.build(url); + "%s/otp/routers/%s/inspector/vectortile/%s/tilejson.json".formatted( + base, + ignoreRouterId, + allLayers + ); + + var vectorSource = new VectorSource("debug", url); + return DebugStyleSpec.build(vectorSource, REGULAR_STOPS.toVectorSourceLayer(vectorSource)); } @Nonnull @@ -148,17 +161,4 @@ private static LayerBuilder createLayerBuilder( case GeofencingZones -> new GeofencingZonesLayerBuilder(context.graph(), layerParameters); }; } - - private enum LayerType { - RegularStop, - AreaStop, - GeofencingZones, - } - - private record LayerParams(String name, LayerType type) implements LayerParameters { - @Override - public String mapper() { - return "DebugClient"; - } - } } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java new file mode 100644 index 00000000000..2f1e6eb7109 --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java @@ -0,0 +1,15 @@ +package org.opentripplanner.apis.vectortiles.model; + +import org.opentripplanner.apis.vectortiles.DebugStyleSpec; +import org.opentripplanner.inspector.vector.LayerParameters; + +public record LayerParams(String name, LayerType type) implements LayerParameters { + @Override + public String mapper() { + return "DebugClient"; + } + + public DebugStyleSpec.VectorSourceLayer toVectorSourceLayer(TileSource.VectorSource source) { + return new DebugStyleSpec.VectorSourceLayer(source, name); + } +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java index d549f2938e0..0e1006027f2 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java @@ -6,6 +6,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Stream; +import org.opentripplanner.apis.vectortiles.DebugStyleSpec.VectorSourceLayer; import org.opentripplanner.framework.json.ObjectMappers; /** @@ -24,6 +25,12 @@ public static LayerStyleBuilder ofId(String id) { return new LayerStyleBuilder(id); } + public LayerStyleBuilder vectorSourceLayer(VectorSourceLayer source) { + source(source.vectorSource()); + sourceLayer(source.vectorLayer()); + return this; + } + public enum LayerType { Circle, Raster, diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java new file mode 100644 index 00000000000..f4cb7a636fa --- /dev/null +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerType.java @@ -0,0 +1,7 @@ +package org.opentripplanner.apis.vectortiles.model; + +public enum LayerType { + RegularStop, + AreaStop, + GeofencingZones, +} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java similarity index 77% rename from src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java rename to src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java index 6214a5aac65..090573d467d 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/MapboxStyleJson.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java @@ -6,13 +6,17 @@ import java.util.List; import java.util.Map; -public final class MapboxStyleJson { +/** + * Represents a style specification for Maplibre/Mapbox vector tile layers. + * https://maplibre.org/maplibre-style-spec/root/ + */ +public final class StyleSpec { private final String name; private final List sources; private final List layers; - public MapboxStyleJson(String name, List sources, List layers) { + public StyleSpec(String name, List sources, List layers) { this.name = name; this.sources = sources; this.layers = layers.stream().map(LayerStyleBuilder::toJson).toList(); diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java index 2e404d9a1eb..debf3070782 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java @@ -9,6 +9,9 @@ public sealed interface TileSource { String id(); + /** + * Represents a vector tile source. + */ record VectorSource(String id, String url) implements TileSource { @Override public String type() { @@ -16,6 +19,9 @@ public String type() { } } + /** + * Represents a raster-based source for map tiles. + */ record RasterSource(String id, List tiles, int tileSize) implements TileSource { @Override public String type() { diff --git a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java index 3450cf0786c..4981a8ab91b 100644 --- a/src/main/java/org/opentripplanner/framework/io/HttpUtils.java +++ b/src/main/java/org/opentripplanner/framework/io/HttpUtils.java @@ -24,16 +24,16 @@ private HttpUtils() {} public static String getBaseAddress(UriInfo uri, HttpHeaders headers) { String protocol; if (headers.getRequestHeader(HEADER_X_FORWARDED_PROTO) != null) { - protocol = headers.getRequestHeader(HEADER_X_FORWARDED_PROTO).get(0); + protocol = headers.getRequestHeader(HEADER_X_FORWARDED_PROTO).getFirst(); } else { protocol = uri.getRequestUri().getScheme(); } String host; if (headers.getRequestHeader(HEADER_X_FORWARDED_HOST) != null) { - host = headers.getRequestHeader(HEADER_X_FORWARDED_HOST).get(0); + host = headers.getRequestHeader(HEADER_X_FORWARDED_HOST).getFirst(); } else if (headers.getRequestHeader(HEADER_HOST) != null) { - host = headers.getRequestHeader(HEADER_HOST).get(0); + host = headers.getRequestHeader(HEADER_HOST).getFirst(); } else { host = uri.getBaseUri().getHost() + ":" + uri.getBaseUri().getPort(); } From ffd8ae6c80720888f8cff37ff0a772a0a28c2a9c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 22 Dec 2023 11:33:55 +0100 Subject: [PATCH 035/103] Add popup data --- .../src/components/MapView/MapView.tsx | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 258a925a142..9409a0cc68a 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -1,4 +1,4 @@ -import { LngLat, Map, NavigationControl } from 'react-map-gl'; +import { LngLat, Map, MapboxGeoJSONFeature, NavigationControl, Popup } from 'react-map-gl'; import 'maplibre-gl/dist/maplibre-gl.css'; import { TripPattern, TripQuery, TripQueryVariables } from '../../gql/graphql.ts'; import { NavigationMarkers } from './NavigationMarkers.tsx'; @@ -6,6 +6,7 @@ import { LegLines } from './LegLines.tsx'; import { useMapDoubleClick } from './useMapDoubleClick.ts'; import { useState } from 'react'; import { ContextMenuPopup } from './ContextMenuPopup.tsx'; +import { Table } from 'react-bootstrap'; // TODO: this should be configurable const initialViewState = { @@ -14,6 +15,13 @@ const initialViewState = { zoom: 4, }; +class PopupData { + constructor( + public coordinates: LngLat, + public feature: MapboxGeoJSONFeature, + ) {} +} + export function MapView({ tripQueryVariables, setTripQueryVariables, @@ -28,7 +36,8 @@ export function MapView({ loading: boolean; }) { const onMapDoubleClick = useMapDoubleClick({ tripQueryVariables, setTripQueryVariables }); - const [showPopup, setShowPopup] = useState(null); + const [showContextPopup, setShowContextPopup] = useState(null); + const [showPropsPopup, setShowPropsPopup] = useState(null); return (
    @@ -40,11 +49,12 @@ export function MapView({ initialViewState={initialViewState} onDblClick={onMapDoubleClick} onContextMenu={(e) => { - setShowPopup(e.lngLat); + setShowContextPopup(e.lngLat); }} - interactiveLayerIds={["regular-stop"]} - onClick={e => { - console.log(e.features); + interactiveLayerIds={['regular-stop']} + onClick={(e) => { + const props = e.features[0]; + setShowPropsPopup(new PopupData(e.lngLat, props)); }} // put lat/long in URL and pan to it on page reload hash={true} @@ -61,14 +71,31 @@ export function MapView({ {tripQueryResult?.trip.tripPatterns.length && ( )} - {showPopup && ( + {showContextPopup && ( setShowPopup(null)} + coordinates={showContextPopup} + onClose={() => setShowContextPopup(null)} /> )} + {showPropsPopup && ( + setShowPropsPopup(null)} + > + + {Object.entries(showPropsPopup.feature.properties).map(([key, value]) => ( + + + + + ))} +
    {key}{value}
    +
    + )}
    ); From da28cf241fc0cd67d634be6a0fe05e05b73a72e5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 30 Dec 2023 20:11:32 +0100 Subject: [PATCH 036/103] Remove edge layer builder --- .../vector/edge/EdgeLayerBuilder.java | 40 ------------------- .../vector/edge/EdgePropertyMapper.java | 18 --------- 2 files changed, 58 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java delete mode 100644 src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java deleted file mode 100644 index 3c1bc3436d8..00000000000 --- a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgeLayerBuilder.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.opentripplanner.inspector.vector.edge; - -import java.util.List; -import org.locationtech.jts.geom.Envelope; -import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.framework.geometry.GeometryUtils; -import org.opentripplanner.inspector.vector.LayerBuilder; -import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.routing.graph.Graph; -import org.opentripplanner.routing.graph.index.StreetIndex; -import org.opentripplanner.street.model.edge.Edge; -import org.opentripplanner.street.model.vertex.Vertex; -import org.opentripplanner.transit.model.site.AreaStop; - -/** - * A vector tile layer containing all {@link AreaStop}s inside the vector tile bounds. - */ -public class EdgeLayerBuilder extends LayerBuilder { - - private final StreetIndex streetIndex; - - public EdgeLayerBuilder(Graph graph, LayerParameters layerParameters) { - super(new EdgePropertyMapper(), layerParameters.name(), layerParameters.expansionFactor()); - this.streetIndex = graph.getStreetIndex(); - } - - @Override - protected List getGeometries(Envelope query) { - return streetIndex - .getEdgesForEnvelope(query) - .stream() - .filter(edge -> edge.getGeometry() != null) - .map(edge -> { - Geometry geometry = edge.getGeometry().copy(); - geometry.setUserData(edge); - return geometry; - }) - .toList(); - } -} diff --git a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java deleted file mode 100644 index 936c965c9f5..00000000000 --- a/src/main/java/org/opentripplanner/inspector/vector/edge/EdgePropertyMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.opentripplanner.inspector.vector.edge; - -import java.util.Collection; -import java.util.List; -import org.opentripplanner.api.mapping.PropertyMapper; -import org.opentripplanner.inspector.vector.KeyValue; -import org.opentripplanner.street.model.edge.Edge; - -/** - * A {@link PropertyMapper} for the {@link EdgeLayerBuilder} for the OTP debug client. - */ -public class EdgePropertyMapper extends PropertyMapper { - - @Override - protected Collection map(Edge edge) { - return List.of(new KeyValue("java-class", edge.getClass().getSimpleName())); - } -} From 18eb243f84aab078770d66fd2f8cceff74dd47ec Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sat, 30 Dec 2023 23:31:49 +0100 Subject: [PATCH 037/103] Make styles a but prettier --- .../src/components/MapView/MapView.tsx | 12 +++-- .../apis/vectortiles/DebugStyleSpec.java | 6 ++- .../GraphInspectorVectorTileResource.java | 15 +++--- .../inspector/vector/KeyValue.java | 6 ++- .../vector/stop/AreaStopsLayerBuilder.java | 47 ------------------- ...ayerBuilder.java => StopLayerBuilder.java} | 15 +++--- .../stop/StopLocationPropertyMapper.java | 14 +++--- 7 files changed, 39 insertions(+), 76 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java rename src/main/java/org/opentripplanner/inspector/vector/stop/{RegularStopsLayerBuilder.java => StopLayerBuilder.java} (73%) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 9409a0cc68a..a565ae22db9 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -86,12 +86,14 @@ export function MapView({ closeButton={true} onClose={() => setShowPropsPopup(null)} > - +
    {Object.entries(showPropsPopup.feature.properties).map(([key, value]) => ( - - - - + + + + + + ))}
    {key}{value}
    {key}{value}
    diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 9121d671c06..c3dfc3d06f1 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -7,6 +7,10 @@ import org.opentripplanner.apis.vectortiles.model.TileSource.RasterSource; import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; +/** + * A Mapbox/Mapblibre style specification for rendering debug information about transit and + * street data. + */ public class DebugStyleSpec { private static final RasterSource BACKGROUND_SOURCE = new RasterSource( @@ -33,7 +37,7 @@ static StyleSpec build(VectorSource debugSource, VectorSourceLayer regularStops) .ofId("regular-stop") .typeCircle() .vectorSourceLayer(regularStops) - .circleStroke("#140d0e", 1) + .circleStroke("#140d0e", 2) .circleColor("#fcf9fa") .minZoom(13) .maxZoom(22) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java index 7e800b5639b..c27d38b260c 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/GraphInspectorVectorTileResource.java @@ -29,8 +29,7 @@ import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.inspector.vector.VectorTileResponseFactory; import org.opentripplanner.inspector.vector.geofencing.GeofencingZonesLayerBuilder; -import org.opentripplanner.inspector.vector.stop.AreaStopsLayerBuilder; -import org.opentripplanner.inspector.vector.stop.RegularStopsLayerBuilder; +import org.opentripplanner.inspector.vector.stop.StopLayerBuilder; import org.opentripplanner.model.FeedInfo; import org.opentripplanner.standalone.api.OtpServerRequestContext; @@ -152,12 +151,16 @@ private static LayerBuilder createLayerBuilder( OtpServerRequestContext context ) { return switch (layerParameters.type()) { - case RegularStop -> new RegularStopsLayerBuilder( - context.transitService(), + case RegularStop -> new StopLayerBuilder<>( layerParameters, - locale + locale, + e -> context.transitService().findRegularStop(e) + ); + case AreaStop -> new StopLayerBuilder<>( + layerParameters, + locale, + e -> context.transitService().findAreaStops(e) ); - case AreaStop -> new AreaStopsLayerBuilder(context.transitService(), layerParameters, locale); case GeofencingZones -> new GeofencingZonesLayerBuilder(context.graph(), layerParameters); }; } diff --git a/src/main/java/org/opentripplanner/inspector/vector/KeyValue.java b/src/main/java/org/opentripplanner/inspector/vector/KeyValue.java index d57afd3429e..6c8b0f3aa4e 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/KeyValue.java +++ b/src/main/java/org/opentripplanner/inspector/vector/KeyValue.java @@ -1,3 +1,7 @@ package org.opentripplanner.inspector.vector; -public record KeyValue(String key, Object value) {} +public record KeyValue(String key, Object value) { + public static KeyValue kv(String key, Object value) { + return new KeyValue(key, value); + } +} diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java deleted file mode 100644 index d1a2552e4e2..00000000000 --- a/src/main/java/org/opentripplanner/inspector/vector/stop/AreaStopsLayerBuilder.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.opentripplanner.inspector.vector.stop; - -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import java.util.function.Function; -import org.locationtech.jts.geom.Envelope; -import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.inspector.vector.LayerBuilder; -import org.opentripplanner.inspector.vector.LayerParameters; -import org.opentripplanner.transit.model.site.AreaStop; -import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitService; - -/** - * A vector tile layer containing all {@link AreaStop}s inside the vector tile bounds. - */ -public class AreaStopsLayerBuilder extends LayerBuilder { - - private final Function> findAreaStops; - - public AreaStopsLayerBuilder( - TransitService transitService, - LayerParameters layerParameters, - Locale locale - ) { - super( - new StopLocationPropertyMapper(locale), - layerParameters.name(), - layerParameters.expansionFactor() - ); - this.findAreaStops = transitService::findAreaStops; - } - - @Override - protected List getGeometries(Envelope query) { - return findAreaStops - .apply(query) - .stream() - .map(areaStop -> { - Geometry geometry = areaStop.getGeometry().copy(); - geometry.setUserData(areaStop); - return geometry; - }) - .toList(); - } -} diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java similarity index 73% rename from src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java rename to src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java index f943e23eb88..40784ab5b3b 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/stop/RegularStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java @@ -10,31 +10,30 @@ import org.opentripplanner.inspector.vector.LayerParameters; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitService; /** * A vector tile layer containing all {@link RegularStop}s inside the vector tile bounds. */ -public class RegularStopsLayerBuilder extends LayerBuilder { +public class StopLayerBuilder extends LayerBuilder { - private final Function> findAreaStops; + private final Function> findStops; - public RegularStopsLayerBuilder( - TransitService transitService, + public StopLayerBuilder( LayerParameters layerParameters, - Locale locale + Locale locale, + Function> findStops ) { super( new StopLocationPropertyMapper(locale), layerParameters.name(), layerParameters.expansionFactor() ); - this.findAreaStops = transitService::findRegularStop; + this.findStops = findStops; } @Override protected List getGeometries(Envelope query) { - return findAreaStops + return findStops .apply(query) .stream() .map(stop -> { diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java index d2e1accf483..44729bcb407 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java @@ -1,5 +1,7 @@ package org.opentripplanner.inspector.vector.stop; +import static org.opentripplanner.inspector.vector.KeyValue.kv; + import java.util.Collection; import java.util.List; import java.util.Locale; @@ -7,7 +9,6 @@ import org.opentripplanner.api.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.site.StopLocation; -import org.opentripplanner.transit.service.TransitService; /** * A {@link PropertyMapper} for the {@link AreaStopsLayerBuilder} for the OTP debug client. @@ -20,15 +21,12 @@ public StopLocationPropertyMapper(Locale locale) { this.i18NStringMapper = new I18NStringMapper(locale); } - public static PropertyMapper create(TransitService ignored, Locale locale) { - return new StopLocationPropertyMapper(locale); - } - @Override - protected Collection map(StopLocation input) { + protected Collection map(StopLocation stop) { return List.of( - new KeyValue("id", input.getId().toString()), - new KeyValue("name", i18NStringMapper.mapToApi(input.getName())) + kv("name", i18NStringMapper.mapToApi(stop.getName())), + kv("id", stop.getId().toString()), + kv("parentId", stop.isPartOfStation() ? stop.getParentStation().getId().toString() : null) ); } } From 7cfbae80109ecd00c9240ca9c2e803206eae8fd8 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 31 Dec 2023 00:04:49 +0100 Subject: [PATCH 038/103] Add test for debug style spec --- .../vectortiles/model/LayerStyleBuilder.java | 3 +- .../apis/vectortiles/DebugStyleSpecTest.java | 25 +++++++++++ .../vector/stop/AreaStopLayerBuilderTest.java | 16 ++------ .../test/support/ResourceLoader.java | 11 +++++ .../apis/vectortiles/style.json | 41 +++++++++++++++++++ 5 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java create mode 100644 src/test/resources/org/opentripplanner/apis/vectortiles/style.json diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java index 0e1006027f2..41144611f92 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerStyleBuilder.java @@ -27,8 +27,7 @@ public static LayerStyleBuilder ofId(String id) { public LayerStyleBuilder vectorSourceLayer(VectorSourceLayer source) { source(source.vectorSource()); - sourceLayer(source.vectorLayer()); - return this; + return sourceLayer(source.vectorLayer()); } public enum LayerType { diff --git a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java new file mode 100644 index 00000000000..4fd9204c2a9 --- /dev/null +++ b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java @@ -0,0 +1,25 @@ +package org.opentripplanner.apis.vectortiles; + +import static org.opentripplanner.test.support.JsonAssertions.assertEqualJson; + +import org.junit.jupiter.api.Test; +import org.opentripplanner.apis.vectortiles.DebugStyleSpec.VectorSourceLayer; +import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; +import org.opentripplanner.framework.json.ObjectMappers; +import org.opentripplanner.test.support.ResourceLoader; + +class DebugStyleSpecTest { + + private final ResourceLoader RES = ResourceLoader.of(this); + + @Test + void spec() { + var vectorSource = new VectorSource("vectorSource", "https://example.com"); + var regularStops = new VectorSourceLayer(vectorSource, "regularStops"); + var spec = DebugStyleSpec.build(vectorSource, regularStops); + + var json = ObjectMappers.ignoringExtraFields().valueToTree(spec).toPrettyString(); + var expectation = RES.fileToString("style.json"); + assertEqualJson(expectation, json); + } +} diff --git a/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java b/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java index 3fea49ab236..231f3ddce59 100644 --- a/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java +++ b/src/test/java/org/opentripplanner/inspector/vector/stop/AreaStopLayerBuilderTest.java @@ -1,12 +1,10 @@ package org.opentripplanner.inspector.vector.stop; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Locale; import org.junit.jupiter.api.Test; -import org.locationtech.jts.geom.Coordinate; -import org.opentripplanner.framework.geometry.GeometryUtils; +import org.opentripplanner._support.geometry.Polygons; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.inspector.vector.KeyValue; @@ -17,22 +15,15 @@ class AreaStopLayerBuilderTest { - private static final Coordinate[] COORDINATES = { - new Coordinate(0, 0), - new Coordinate(0, 1), - new Coordinate(1, 1), - new Coordinate(1, 0), - new Coordinate(0, 0), - }; private static final FeedScopedId ID = new FeedScopedId("FEED", "ID"); - private static final I18NString NAME = new NonLocalizedString("Test stop"); + private static final I18NString NAME = I18NString.of("Test stop"); private final StopModelBuilder stopModelBuilder = StopModel.of(); private final AreaStop areaStop = stopModelBuilder .areaStop(ID) .withName(NAME) - .withGeometry(GeometryUtils.getGeometryFactory().createPolygon(COORDINATES)) + .withGeometry(Polygons.BERLIN) .build(); @Test @@ -41,7 +32,6 @@ void map() { var properties = subject.map(areaStop); - assertEquals(2, properties.size()); assertTrue(properties.contains(new KeyValue("id", ID.toString()))); assertTrue(properties.contains(new KeyValue("name", NAME.toString()))); } diff --git a/src/test/java/org/opentripplanner/test/support/ResourceLoader.java b/src/test/java/org/opentripplanner/test/support/ResourceLoader.java index 38fe02a8c74..5eb51cac55a 100644 --- a/src/test/java/org/opentripplanner/test/support/ResourceLoader.java +++ b/src/test/java/org/opentripplanner/test/support/ResourceLoader.java @@ -55,6 +55,17 @@ public File file(String path) { return file; } + /** + * Returns the string content of a file. + */ + public String fileToString(String p) { + try { + return Files.readString(file(p).toPath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + /** * Return a URL for the given resource. */ diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json new file mode 100644 index 00000000000..f0ed87090c3 --- /dev/null +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -0,0 +1,41 @@ +{ + "name": "OTP Debug Tiles", + "sources": { + "background": { + "id": "background", + "tiles": [ + "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png" + ], + "tileSize": 256, + "type": "raster" + }, + "vectorSource": { + "id": "vectorSource", + "url": "https://example.com", + "type": "vector" + } + }, + "layers": [ + { + "id": "background", + "source": "background", + "type": "raster", + "maxzoom": 22, + "minzoom": 0 + }, + { + "maxzoom": 22, + "paint": { + "circle-stroke-width": 2, + "circle-color": "#fcf9fa", + "circle-stroke-color": "#140d0e" + }, + "id": "regular-stop", + "source": "vectorSource", + "source-layer": "regularStops", + "type": "circle", + "minzoom": 13 + } + ], + "version": 8 +} From c7395d8282ea247e4d4a1d808efb740c0a6a6a79 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Sun, 31 Dec 2023 00:13:31 +0100 Subject: [PATCH 039/103] Save a JSON round trip --- .../apis/vectortiles/DebugStyleSpecTest.java | 2 +- .../test/support/JsonAssertions.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java index 4fd9204c2a9..d685e07a2f2 100644 --- a/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java +++ b/src/test/java/org/opentripplanner/apis/vectortiles/DebugStyleSpecTest.java @@ -18,7 +18,7 @@ void spec() { var regularStops = new VectorSourceLayer(vectorSource, "regularStops"); var spec = DebugStyleSpec.build(vectorSource, regularStops); - var json = ObjectMappers.ignoringExtraFields().valueToTree(spec).toPrettyString(); + var json = ObjectMappers.ignoringExtraFields().valueToTree(spec); var expectation = RES.fileToString("style.json"); assertEqualJson(expectation, json); } diff --git a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java index f3942c16f3b..2dab1e96190 100644 --- a/src/test/java/org/opentripplanner/test/support/JsonAssertions.java +++ b/src/test/java/org/opentripplanner/test/support/JsonAssertions.java @@ -3,6 +3,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.opentripplanner.standalone.config.framework.json.JsonSupport; @@ -15,9 +16,19 @@ public class JsonAssertions { */ public static void assertEqualJson(String expected, String actual) { try { - var act = MAPPER.readTree(actual); + assertEqualJson(expected, MAPPER.readTree(actual)); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + /** + * @see JsonAssertions#assertEqualJson(String, String) + */ + public static void assertEqualJson(String expected, JsonNode actual) { + try { var exp = MAPPER.readTree(expected); - assertEquals(JsonSupport.prettyPrint(exp), JsonSupport.prettyPrint(act)); + assertEquals(JsonSupport.prettyPrint(exp), JsonSupport.prettyPrint(actual)); } catch (JsonProcessingException e) { throw new RuntimeException(e); } From 934b809480f9f4976f95d7f5d93125a1d7d4e1e9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jan 2024 16:59:58 +0100 Subject: [PATCH 040/103] Add attribution, remove client side style --- .../src/components/MapView/mapStyle.ts | 19 ------------------- .../apis/vectortiles/DebugStyleSpec.java | 3 ++- .../apis/vectortiles/model/TileSource.java | 2 +- .../apis/vectortiles/style.json | 1 + 4 files changed, 4 insertions(+), 21 deletions(-) delete mode 100644 client-next/src/components/MapView/mapStyle.ts diff --git a/client-next/src/components/MapView/mapStyle.ts b/client-next/src/components/MapView/mapStyle.ts deleted file mode 100644 index ecaa88c0354..00000000000 --- a/client-next/src/components/MapView/mapStyle.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const mapStyle = { - version: 8, - sources: { - osm: { - type: 'raster', - tiles: ['https://a.tile.openstreetmap.org/{z}/{x}/{y}.png'], - tileSize: 256, - attribution: '© OpenStreetMap Contributors', - maxzoom: 19, - }, - }, - layers: [ - { - id: 'osm', - type: 'raster', - source: 'osm', // This must match the source key above - }, - ], -}; diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index c3dfc3d06f1..9a4fe9be123 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -16,7 +16,8 @@ public class DebugStyleSpec { private static final RasterSource BACKGROUND_SOURCE = new RasterSource( "background", List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), - 256 + 256, + "© OpenStreetMap Contributors" ); public record VectorSourceLayer(VectorSource vectorSource, String vectorLayer) {} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java index debf3070782..d9dbe50f68e 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java @@ -22,7 +22,7 @@ public String type() { /** * Represents a raster-based source for map tiles. */ - record RasterSource(String id, List tiles, int tileSize) implements TileSource { + record RasterSource(String id, List tiles, int tileSize, String attribution) implements TileSource { @Override public String type() { return "raster"; diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index f0ed87090c3..6f95471a667 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -7,6 +7,7 @@ "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png" ], "tileSize": 256, + "attribution" : "© OpenStreetMap Contributors", "type": "raster" }, "vectorSource": { From 826a8429e14afe04ea48dbe8f4e5061d4cb303fd Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jan 2024 17:09:44 +0100 Subject: [PATCH 041/103] Add documentation, fix frontend code --- client-next/src/components/MapView/MapView.tsx | 10 +++++----- .../apis/vectortiles/model/LayerParams.java | 11 ++++++++--- .../apis/vectortiles/model/StyleSpec.java | 2 ++ .../apis/vectortiles/model/TileSource.java | 8 ++++++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index a565ae22db9..c3879dd2a6b 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -87,14 +87,14 @@ export function MapView({ onClose={() => setShowPropsPopup(null)} > - {Object.entries(showPropsPopup.feature.properties).map(([key, value]) => ( - - + + {Object.entries(showPropsPopup.feature.properties).map(([key, value]) => ( + - - ))} + ))} +
    {key} {value}
    )} diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java index 2f1e6eb7109..7365e8972da 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/LayerParams.java @@ -1,6 +1,7 @@ package org.opentripplanner.apis.vectortiles.model; -import org.opentripplanner.apis.vectortiles.DebugStyleSpec; +import org.opentripplanner.apis.vectortiles.DebugStyleSpec.VectorSourceLayer; +import org.opentripplanner.apis.vectortiles.model.TileSource.VectorSource; import org.opentripplanner.inspector.vector.LayerParameters; public record LayerParams(String name, LayerType type) implements LayerParameters { @@ -9,7 +10,11 @@ public String mapper() { return "DebugClient"; } - public DebugStyleSpec.VectorSourceLayer toVectorSourceLayer(TileSource.VectorSource source) { - return new DebugStyleSpec.VectorSourceLayer(source, name); + /** + * Convert these params to a vector source layer so that it can be used in the style for rendering + * in the frontend. + */ + public VectorSourceLayer toVectorSourceLayer(VectorSource source) { + return new VectorSourceLayer(source, name); } } diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java index 090573d467d..84e19f25364 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/StyleSpec.java @@ -9,6 +9,8 @@ /** * Represents a style specification for Maplibre/Mapbox vector tile layers. * https://maplibre.org/maplibre-style-spec/root/ + *

    + * Maplibre uses these to render vector maps in the browser. */ public final class StyleSpec { diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java index d9dbe50f68e..e3186cc1d99 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java @@ -3,6 +3,9 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.util.List; +/** + * Represent a data source where Maplibre can fetch data for rendering directly in the browser. + */ public sealed interface TileSource { @JsonSerialize String type(); @@ -10,7 +13,7 @@ public sealed interface TileSource { String id(); /** - * Represents a vector tile source. + * Represents a vector tile source which is rendered into a map in the browser. */ record VectorSource(String id, String url) implements TileSource { @Override @@ -20,7 +23,8 @@ public String type() { } /** - * Represents a raster-based source for map tiles. + * Represents a raster-based source for map tiles. These are used mainly for background + * map layers with vector data being rendered on top of it. */ record RasterSource(String id, List tiles, int tileSize, String attribution) implements TileSource { @Override From c8642006f32c59f94007bcb532bc2eb51f8f1804 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jan 2024 21:57:30 +0100 Subject: [PATCH 042/103] Make TS compiler happy --- client-next/src/components/MapView/MapView.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index c3879dd2a6b..d03c4869067 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -53,8 +53,10 @@ export function MapView({ }} interactiveLayerIds={['regular-stop']} onClick={(e) => { - const props = e.features[0]; - setShowPropsPopup(new PopupData(e.lngLat, props)); + if (e.features) { + const props = e.features[0]; + setShowPropsPopup(new PopupData(e.lngLat, props)); + } }} // put lat/long in URL and pan to it on page reload hash={true} @@ -79,7 +81,7 @@ export function MapView({ onClose={() => setShowContextPopup(null)} /> )} - {showPropsPopup && ( + {showPropsPopup && showPropsPopup.feature && showPropsPopup.feature.properties && ( Date: Tue, 2 Jan 2024 22:00:55 +0100 Subject: [PATCH 043/103] Convert from class to type --- client-next/src/components/MapView/MapView.tsx | 9 ++------- .../apis/vectortiles/model/TileSource.java | 3 ++- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index d03c4869067..9ecc35c27aa 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -15,12 +15,7 @@ const initialViewState = { zoom: 4, }; -class PopupData { - constructor( - public coordinates: LngLat, - public feature: MapboxGeoJSONFeature, - ) {} -} +type PopupData = { coordinates: LngLat; feature: MapboxGeoJSONFeature }; export function MapView({ tripQueryVariables, @@ -55,7 +50,7 @@ export function MapView({ onClick={(e) => { if (e.features) { const props = e.features[0]; - setShowPropsPopup(new PopupData(e.lngLat, props)); + setShowPropsPopup({ coordinates: e.lngLat, feature: props }); } }} // put lat/long in URL and pan to it on page reload diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java index e3186cc1d99..06af294a4f0 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/model/TileSource.java @@ -26,7 +26,8 @@ public String type() { * Represents a raster-based source for map tiles. These are used mainly for background * map layers with vector data being rendered on top of it. */ - record RasterSource(String id, List tiles, int tileSize, String attribution) implements TileSource { + record RasterSource(String id, List tiles, int tileSize, String attribution) + implements TileSource { @Override public String type() { return "raster"; From 1cbce1fcd83b0af48f8f9d5cc62c522ce621fbea Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 2 Jan 2024 22:15:40 +0100 Subject: [PATCH 044/103] Use optional chaining --- client-next/src/components/MapView/MapView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 9ecc35c27aa..95c898c4a28 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -76,7 +76,7 @@ export function MapView({ onClose={() => setShowContextPopup(null)} /> )} - {showPropsPopup && showPropsPopup.feature && showPropsPopup.feature.properties && ( + {showPropsPopup?.feature?.properties && ( Date: Tue, 2 Jan 2024 22:09:22 +0100 Subject: [PATCH 045/103] Update codec format --- .../org/opentripplanner/ext/geocoder/LuceneIndex.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java index 7037fd19361..71b0cf67b34 100644 --- a/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java +++ b/src/ext/java/org/opentripplanner/ext/geocoder/LuceneIndex.java @@ -17,7 +17,7 @@ import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.codecs.Codec; import org.apache.lucene.codecs.PostingsFormat; -import org.apache.lucene.codecs.lucene95.Lucene95Codec; +import org.apache.lucene.codecs.lucene99.Lucene99Codec; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field.Store; import org.apache.lucene.document.StoredField; @@ -33,7 +33,7 @@ import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.PrefixQuery; import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.suggest.document.Completion90PostingsFormat; +import org.apache.lucene.search.suggest.document.Completion99PostingsFormat; import org.apache.lucene.search.suggest.document.CompletionAnalyzer; import org.apache.lucene.search.suggest.document.ContextQuery; import org.apache.lucene.search.suggest.document.ContextSuggestField; @@ -191,8 +191,8 @@ private static StopCluster toStopCluster(Document document) { static IndexWriterConfig iwcWithSuggestField(Analyzer analyzer, final Set suggestFields) { IndexWriterConfig iwc = new IndexWriterConfig(analyzer); - Codec filterCodec = new Lucene95Codec() { - final PostingsFormat postingsFormat = new Completion90PostingsFormat(); + Codec filterCodec = new Lucene99Codec() { + final PostingsFormat postingsFormat = new Completion99PostingsFormat(); @Override public PostingsFormat getPostingsFormatForField(String field) { From e132e888a2d46f16a0d0096a25879fdd95ffc295 Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Thu, 4 Jan 2024 13:24:59 +0200 Subject: [PATCH 046/103] Generalize graph building method --- .../islandpruning/AdaptivePruningTest.java | 56 ++++--------------- .../islandpruning/EscalatorPruningTest.java | 11 +++- .../islandpruning/IslandPruningUtils.java | 16 ++++-- .../islandpruning/PruneNoThruIslandsTest.java | 6 +- 4 files changed, 34 insertions(+), 55 deletions(-) diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java index 832045b6469..9f7e4e8cf4a 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java @@ -1,18 +1,13 @@ package org.opentripplanner.graph_builder.module.islandpruning; -import java.io.File; +import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; + import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.opentripplanner.graph_builder.issue.api.DataImportIssueStore; -import org.opentripplanner.graph_builder.module.osm.OsmModule; -import org.opentripplanner.openstreetmap.OsmProvider; import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.ResourceLoader; -import org.opentripplanner.transit.model.framework.Deduplicator; -import org.opentripplanner.transit.service.StopModel; -import org.opentripplanner.transit.service.TransitModel; /* Test data consists of one bigger graph and two small sub graphs. These are totally disconnected. One small graphs is only at 5 meter distance from the big graph and another one 30 m away. @@ -26,7 +21,14 @@ public class AdaptivePruningTest { @BeforeAll static void setup() { - graph = buildOsmGraph(ResourceLoader.of(AdaptivePruningTest.class).file("isoiiluoto.pbf")); + graph = + buildOsmGraph( + ResourceLoader.of(AdaptivePruningTest.class).file("isoiiluoto.pbf"), + 5, + 0, + 20, + 30 + ); } @Test @@ -64,42 +66,4 @@ public void mainGraphIsNotRemoved() { .contains("73347312") ); } - - private static Graph buildOsmGraph(File file) { - try { - var deduplicator = new Deduplicator(); - var graph = new Graph(deduplicator); - var transitModel = new TransitModel(new StopModel(), deduplicator); - // Add street data from OSM - OsmProvider osmProvider = new OsmProvider(file, true); - OsmModule osmModule = OsmModule.of(osmProvider, graph).withEdgeNamer(new TestNamer()).build(); - - osmModule.buildGraph(); - - transitModel.index(); - graph.index(transitModel.getStopModel()); - - // Prune floating islands and set noThru where necessary - PruneIslands pruneIslands = new PruneIslands( - graph, - transitModel, - DataImportIssueStore.NOOP, - null - ); - // all 3 sub graphs are larger than 5 edges - pruneIslands.setPruningThresholdIslandWithoutStops(5); - - // up to 5*20 = 100 edge graphs get pruned if they are too close - pruneIslands.setAdaptivePruningFactor(20); - - // Distant island is 30 m away from main graph, let's keep it - pruneIslands.setAdaptivePruningDistance(30); - - pruneIslands.buildGraph(); - - return graph; - } catch (Exception e) { - throw new RuntimeException(e); - } - } } diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java index b063fcbd184..ce1b5f78489 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java @@ -2,7 +2,6 @@ import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; -import java.util.Set; import java.util.stream.Collectors; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -16,14 +15,20 @@ public class EscalatorPruningTest { @Test public void streetEdgesBetweenEscalatorEdgesRetained() { graph = - buildOsmGraph(ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf")); + buildOsmGraph( + ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf"), + 10, + 2, + 50, + 250 + ); Assertions.assertTrue( graph .getStreetEdges() .stream() .map(streetEdge -> streetEdge.getName().toString()) .collect(Collectors.toSet()) - .containsAll(Set.of("490072445")) + .contains("490072445") ); } } diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java index dbe86247cac..6e8ff0ec2c2 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java @@ -11,7 +11,13 @@ class IslandPruningUtils { - static Graph buildOsmGraph(File osmFile) { + static Graph buildOsmGraph( + File osmFile, + int thresholdIslandWithoutStops, + int thresholdIslandWithStops, + double adaptivePruningFactor, + int adaptivePruningDistance + ) { try { var deduplicator = new Deduplicator(); var graph = new Graph(deduplicator); @@ -32,10 +38,10 @@ static Graph buildOsmGraph(File osmFile) { DataImportIssueStore.NOOP, null ); - pruneIslands.setPruningThresholdIslandWithoutStops(10); - pruneIslands.setPruningThresholdIslandWithStops(2); - pruneIslands.setAdaptivePruningFactor(50); - pruneIslands.setAdaptivePruningDistance(250); + pruneIslands.setPruningThresholdIslandWithoutStops(thresholdIslandWithoutStops); + pruneIslands.setPruningThresholdIslandWithStops(thresholdIslandWithStops); + pruneIslands.setAdaptivePruningFactor(adaptivePruningFactor/*50*/); + pruneIslands.setAdaptivePruningDistance(adaptivePruningDistance/*250*/); pruneIslands.buildGraph(); return graph; diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java index f9453b0941c..856b81bc385 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java @@ -21,7 +21,11 @@ static void setup() { buildOsmGraph( ResourceLoader .of(PruneNoThruIslandsTest.class) - .file("herrenberg-island-prune-nothru.osm.pbf") + .file("herrenberg-island-prune-nothru.osm.pbf"), + 10, + 2, + 50, + 250 ); } From 62865b09a7bf8c44f23271dd6d602fb4f2891bbe Mon Sep 17 00:00:00 2001 From: Viljami Nurminen Date: Thu, 4 Jan 2024 15:38:56 +0200 Subject: [PATCH 047/103] Clean up debugging comments --- .../module/islandpruning/IslandPruningUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java index 6e8ff0ec2c2..59362472771 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/IslandPruningUtils.java @@ -40,8 +40,8 @@ static Graph buildOsmGraph( ); pruneIslands.setPruningThresholdIslandWithoutStops(thresholdIslandWithoutStops); pruneIslands.setPruningThresholdIslandWithStops(thresholdIslandWithStops); - pruneIslands.setAdaptivePruningFactor(adaptivePruningFactor/*50*/); - pruneIslands.setAdaptivePruningDistance(adaptivePruningDistance/*250*/); + pruneIslands.setAdaptivePruningFactor(adaptivePruningFactor); + pruneIslands.setAdaptivePruningDistance(adaptivePruningDistance); pruneIslands.buildGraph(); return graph; From 9a03857d3d971e9cb5a2582f3fffc62dc5f32224 Mon Sep 17 00:00:00 2001 From: Joel Lappalainen Date: Thu, 4 Jan 2024 17:27:37 +0200 Subject: [PATCH 048/103] Add tests for rental and parking --- .../preference/BikePreferencesTest.java | 18 ++++++++++++++++++ .../request/preference/CarPreferencesTest.java | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java index e8e3ff576a9..9da7852cc2c 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/BikePreferencesTest.java @@ -21,6 +21,8 @@ class BikePreferencesTest { .withSlope(1) .build(); public static final BicycleOptimizeType OPTIMIZE_TYPE = BicycleOptimizeType.TRIANGLE; + public static final int RENTAL_PICKUP_TIME = 30; + public static final int PARK_COST = 30; private final BikePreferences subject = BikePreferences .of() @@ -32,6 +34,8 @@ class BikePreferencesTest { .withSwitchTime(SWITCH_TIME) .withSwitchCost(SWITCH_COST) .withOptimizeType(OPTIMIZE_TYPE) + .withRental(rental -> rental.withPickupTime(RENTAL_PICKUP_TIME).build()) + .withParking(parking -> parking.withParkCost(PARK_COST).build()) .withOptimizeTriangle(it -> it.withSlope(1).build()) .build(); @@ -80,6 +84,18 @@ void optimizeTriangle() { assertEquals(TRIANGLE, subject.optimizeTriangle()); } + @Test + void rental() { + var vehicleRental = VehicleRentalPreferences.of().withPickupTime(RENTAL_PICKUP_TIME).build(); + assertEquals(vehicleRental, subject.rental()); + } + + @Test + void parking() { + var vehicleParking = VehicleParkingPreferences.of().withParkCost(PARK_COST).build(); + assertEquals(vehicleParking, subject.parking()); + } + @Test void testOfAndCopyOf() { // Return same object if no value is set @@ -107,6 +123,8 @@ void testToString() { "walkingReluctance: 1.45, " + "switchTime: 3m20s, " + "switchCost: $450, " + + "parking: VehicleParkingPreferences{parkCost: $30}, " + + "rental: VehicleRentalPreferences{pickupTime: 30s}, " + "optimizeType: TRIANGLE, " + "optimizeTriangle: TimeSlopeSafetyTriangle[time=0.0, slope=1.0, safety=0.0]" + "}", diff --git a/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java b/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java index 7bc0a1620ab..c81cb41d883 100644 --- a/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java +++ b/src/test/java/org/opentripplanner/routing/api/request/preference/CarPreferencesTest.java @@ -17,6 +17,8 @@ class CarPreferencesTest { private static final double ACCELERATION_SPEED = 3.1; private static final double DECELERATION_SPEED = 3.5; public static final int DROPOFF_TIME = 450; + public static final int RENTAL_PICKUP_TIME = 30; + public static final int PARK_COST = 30; private final CarPreferences subject = CarPreferences .of() @@ -27,6 +29,8 @@ class CarPreferencesTest { .withDropoffTime(DROPOFF_TIME) .withAccelerationSpeed(ACCELERATION_SPEED) .withDecelerationSpeed(DECELERATION_SPEED) + .withRental(rental -> rental.withPickupTime(RENTAL_PICKUP_TIME).build()) + .withParking(parking -> parking.withParkCost(PARK_COST).build()) .build(); @Test @@ -64,6 +68,18 @@ void decelerationSpeed() { assertEquals(DECELERATION_SPEED, subject.decelerationSpeed()); } + @Test + void rental() { + var vehicleRental = VehicleRentalPreferences.of().withPickupTime(RENTAL_PICKUP_TIME).build(); + assertEquals(vehicleRental, subject.rental()); + } + + @Test + void parking() { + var vehicleParking = VehicleParkingPreferences.of().withParkCost(PARK_COST).build(); + assertEquals(vehicleParking, subject.parking()); + } + @Test void testCopyOfEqualsAndHashCode() { // Return same object if no value is set @@ -83,6 +99,8 @@ void testToString() { "CarPreferences{" + "speed: 20.0, " + "reluctance: 5.1, " + + "parking: VehicleParkingPreferences{parkCost: $30}, " + + "rental: VehicleRentalPreferences{pickupTime: 30s}, " + "pickupTime: 600, " + "pickupCost: $500, " + "dropoffTime: 450, " + From 914e5c1a6ee88b6b610efa3f1c991f9d7b1bd3cb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jan 2024 17:46:18 +0100 Subject: [PATCH 049/103] Remove GTFS-RT websocket updater --- pom.xml | 21 -- .../config/routerconfig/UpdatersConfig.java | 9 - .../WebsocketGtfsRealtimeUpdaterConfig.java | 24 -- .../updater/UpdatersParameters.java | 3 - .../configure/UpdaterConfigurator.java | 10 - .../trip/WebsocketGtfsRealtimeUpdater.java | 211 ------------------ ...ebsocketGtfsRealtimeUpdaterParameters.java | 45 ---- 7 files changed, 323 deletions(-) delete mode 100644 src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/WebsocketGtfsRealtimeUpdaterConfig.java delete mode 100644 src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdater.java delete mode 100644 src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdaterParameters.java diff --git a/pom.xml b/pom.xml index de8baecefd9..0e03a0ccc7d 100644 --- a/pom.xml +++ b/pom.xml @@ -551,20 +551,6 @@ import - - - io.netty - netty-bom - 4.1.100.Final - pom - import - - @@ -842,13 +828,6 @@ protobuf-java - - - - org.asynchttpclient - async-http-client - 2.12.3 - org.onebusaway diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/UpdatersConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/UpdatersConfig.java index 0f61fa4f7a2..08371660b8a 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/UpdatersConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/UpdatersConfig.java @@ -14,7 +14,6 @@ import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_PARKING; import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_POSITIONS; import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.VEHICLE_RENTAL; -import static org.opentripplanner.standalone.config.routerconfig.UpdatersConfig.Type.WEBSOCKET_GTFS_RT_UPDATER; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; @@ -39,7 +38,6 @@ import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleParkingUpdaterConfig; import org.opentripplanner.standalone.config.routerconfig.updaters.VehiclePositionsUpdaterConfig; import org.opentripplanner.standalone.config.routerconfig.updaters.VehicleRentalUpdaterConfig; -import org.opentripplanner.standalone.config.routerconfig.updaters.WebsocketGtfsRealtimeUpdaterConfig; import org.opentripplanner.standalone.config.routerconfig.updaters.azure.SiriAzureETUpdaterConfig; import org.opentripplanner.standalone.config.routerconfig.updaters.azure.SiriAzureSXUpdaterConfig; import org.opentripplanner.standalone.config.sandbox.VehicleRentalServiceDirectoryFetcherConfig; @@ -48,7 +46,6 @@ import org.opentripplanner.updater.alert.GtfsRealtimeAlertsUpdaterParameters; import org.opentripplanner.updater.trip.MqttGtfsRealtimeUpdaterParameters; import org.opentripplanner.updater.trip.PollingTripUpdaterParameters; -import org.opentripplanner.updater.trip.WebsocketGtfsRealtimeUpdaterParameters; import org.opentripplanner.updater.vehicle_parking.VehicleParkingUpdaterParameters; import org.opentripplanner.updater.vehicle_position.VehiclePositionsUpdaterParameters; import org.opentripplanner.updater.vehicle_rental.VehicleRentalUpdaterParameters; @@ -185,11 +182,6 @@ public List getSiriSXUpdaterParameters() { return getParameters(SIRI_SX_UPDATER); } - @Override - public List getWebsocketGtfsRealtimeUpdaterParameters() { - return getParameters(WEBSOCKET_GTFS_RT_UPDATER); - } - @Override public List getMqttGtfsRealtimeUpdaterParameters() { return getParameters(MQTT_GTFS_RT_UPDATER); @@ -222,7 +214,6 @@ public enum Type { BIKE_RENTAL(VehicleRentalUpdaterConfig::create), VEHICLE_RENTAL(VehicleRentalUpdaterConfig::create), STOP_TIME_UPDATER(PollingTripUpdaterConfig::create), - WEBSOCKET_GTFS_RT_UPDATER(WebsocketGtfsRealtimeUpdaterConfig::create), MQTT_GTFS_RT_UPDATER(MqttGtfsRealtimeUpdaterConfig::create), REAL_TIME_ALERTS(GtfsRealtimeAlertsUpdaterConfig::create), VEHICLE_POSITIONS(VehiclePositionsUpdaterConfig::create), diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/WebsocketGtfsRealtimeUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/WebsocketGtfsRealtimeUpdaterConfig.java deleted file mode 100644 index 5f1c203ca43..00000000000 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/WebsocketGtfsRealtimeUpdaterConfig.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.opentripplanner.standalone.config.routerconfig.updaters; - -import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V1_5; - -import org.opentripplanner.standalone.config.framework.json.NodeAdapter; -import org.opentripplanner.updater.trip.BackwardsDelayPropagationType; -import org.opentripplanner.updater.trip.WebsocketGtfsRealtimeUpdaterParameters; - -public class WebsocketGtfsRealtimeUpdaterConfig { - - public static WebsocketGtfsRealtimeUpdaterParameters create(String configRef, NodeAdapter c) { - return new WebsocketGtfsRealtimeUpdaterParameters( - configRef, - c.of("feedId").since(V1_5).summary("TODO").asString(), - c.of("url").since(V1_5).summary("TODO").asString(null), - c.of("reconnectPeriodSec").since(V1_5).summary("TODO").asInt(60), - c - .of("backwardsDelayPropagationType") - .since(V1_5) - .summary("TODO") - .asEnum(BackwardsDelayPropagationType.REQUIRED_NO_DATA) - ); - } -} diff --git a/src/main/java/org/opentripplanner/updater/UpdatersParameters.java b/src/main/java/org/opentripplanner/updater/UpdatersParameters.java index 8a7c422eb03..a955e757100 100644 --- a/src/main/java/org/opentripplanner/updater/UpdatersParameters.java +++ b/src/main/java/org/opentripplanner/updater/UpdatersParameters.java @@ -10,7 +10,6 @@ import org.opentripplanner.updater.alert.GtfsRealtimeAlertsUpdaterParameters; import org.opentripplanner.updater.trip.MqttGtfsRealtimeUpdaterParameters; import org.opentripplanner.updater.trip.PollingTripUpdaterParameters; -import org.opentripplanner.updater.trip.WebsocketGtfsRealtimeUpdaterParameters; import org.opentripplanner.updater.vehicle_parking.VehicleParkingUpdaterParameters; import org.opentripplanner.updater.vehicle_position.VehiclePositionsUpdaterParameters; import org.opentripplanner.updater.vehicle_rental.VehicleRentalUpdaterParameters; @@ -34,8 +33,6 @@ public interface UpdatersParameters { List getSiriSXUpdaterParameters(); - List getWebsocketGtfsRealtimeUpdaterParameters(); - List getMqttGtfsRealtimeUpdaterParameters(); List getVehicleParkingUpdaterParameters(); diff --git a/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java b/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java index 037bd080f47..c755578da41 100644 --- a/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java +++ b/src/main/java/org/opentripplanner/updater/configure/UpdaterConfigurator.java @@ -23,14 +23,11 @@ import org.opentripplanner.updater.trip.MqttGtfsRealtimeUpdater; import org.opentripplanner.updater.trip.PollingTripUpdater; import org.opentripplanner.updater.trip.TimetableSnapshotSource; -import org.opentripplanner.updater.trip.WebsocketGtfsRealtimeUpdater; import org.opentripplanner.updater.vehicle_parking.VehicleParkingDataSourceFactory; import org.opentripplanner.updater.vehicle_parking.VehicleParkingUpdater; import org.opentripplanner.updater.vehicle_position.PollingVehiclePositionUpdater; import org.opentripplanner.updater.vehicle_rental.VehicleRentalUpdater; import org.opentripplanner.updater.vehicle_rental.datasources.VehicleRentalDataSourceFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Sets up and starts all the graph updaters. @@ -41,8 +38,6 @@ */ public class UpdaterConfigurator { - private static final Logger LOG = LoggerFactory.getLogger(UpdaterConfigurator.class); - private final Graph graph; private final TransitModel transitModel; private final UpdatersParameters updatersParameters; @@ -177,11 +172,6 @@ private List createUpdatersFromConfig() { for (var configItem : updatersParameters.getSiriSXUpdaterParameters()) { updaters.add(new SiriSXUpdater(configItem, transitModel)); } - for (var configItem : updatersParameters.getWebsocketGtfsRealtimeUpdaterParameters()) { - updaters.add( - new WebsocketGtfsRealtimeUpdater(configItem, provideGtfsTimetableSnapshot(), transitModel) - ); - } for (var configItem : updatersParameters.getMqttGtfsRealtimeUpdaterParameters()) { updaters.add( new MqttGtfsRealtimeUpdater(configItem, transitModel, provideGtfsTimetableSnapshot()) diff --git a/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdater.java b/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdater.java deleted file mode 100644 index 007c73d9b9b..00000000000 --- a/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdater.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.opentripplanner.updater.trip; - -import static org.asynchttpclient.Dsl.asyncHttpClient; - -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.transit.realtime.GtfsRealtime; -import com.google.transit.realtime.GtfsRealtime.FeedEntity; -import com.google.transit.realtime.GtfsRealtime.FeedMessage; -import com.google.transit.realtime.GtfsRealtime.TripUpdate; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.function.Consumer; -import org.asynchttpclient.AsyncHttpClient; -import org.asynchttpclient.ws.WebSocket; -import org.asynchttpclient.ws.WebSocketListener; -import org.asynchttpclient.ws.WebSocketUpgradeHandler; -import org.opentripplanner.transit.service.DefaultTransitService; -import org.opentripplanner.transit.service.TransitModel; -import org.opentripplanner.updater.GtfsRealtimeFuzzyTripMatcher; -import org.opentripplanner.updater.spi.GraphUpdater; -import org.opentripplanner.updater.spi.UpdateResult; -import org.opentripplanner.updater.spi.WriteToGraphCallback; -import org.opentripplanner.updater.trip.metrics.TripUpdateMetrics; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * This class starts an HTTP client which opens a websocket connection to a GTFS-RT data source. A - * callback is registered which handles incoming GTFS-RT messages as they stream in by placing a - * GTFS-RT decoder Runnable task in the single-threaded executor for handling. - * - *

    - * websocket.type = websocket-gtfs-rt-updater
    - * websocket.defaultAgencyId = agency
    - * websocket.url = ws://localhost:8088/tripUpdates
    - * 
    - */ -public class WebsocketGtfsRealtimeUpdater implements GraphUpdater { - - private static final Logger LOG = LoggerFactory.getLogger(WebsocketGtfsRealtimeUpdater.class); - - /** - * Number of seconds to wait before checking again whether we are still connected - */ - private static final int CHECK_CONNECTION_PERIOD_SEC = 1; - - /** - * Url of the websocket server - */ - private final String url; - - /** - * The ID for the static feed to which these TripUpdates are applied - */ - private final String feedId; - - /** - * The number of seconds to wait before reconnecting after a failed connection. - */ - private final int reconnectPeriodSec; - - private final String configRef; - - private final BackwardsDelayPropagationType backwardsDelayPropagationType; - - private final TimetableSnapshotSource snapshotSource; - - /** - * Parent update manager. Is used to execute graph writer runnables. - */ - private WriteToGraphCallback saveResultOnGraph; - - private GtfsRealtimeFuzzyTripMatcher fuzzyTripMatcher; - - private final Consumer recordMetrics; - - public WebsocketGtfsRealtimeUpdater( - WebsocketGtfsRealtimeUpdaterParameters parameters, - TimetableSnapshotSource snapshotSource, - TransitModel transitModel - ) { - this.configRef = parameters.configRef(); - this.url = parameters.url(); - this.feedId = parameters.feedId(); - this.reconnectPeriodSec = parameters.getReconnectPeriodSec(); - this.backwardsDelayPropagationType = parameters.getBackwardsDelayPropagationType(); - this.snapshotSource = snapshotSource; - this.fuzzyTripMatcher = - new GtfsRealtimeFuzzyTripMatcher(new DefaultTransitService(transitModel)); - this.recordMetrics = TripUpdateMetrics.streaming(parameters); - } - - @Override - public void setGraphUpdaterManager(WriteToGraphCallback saveResultOnGraph) { - this.saveResultOnGraph = saveResultOnGraph; - } - - @Override - public void run() throws InterruptedException, IOException { - while (true) { - AsyncHttpClient client = asyncHttpClient(); - WebSocketListener listener = new Listener(); - WebSocketUpgradeHandler handler = new WebSocketUpgradeHandler.Builder() - .addWebSocketListener(listener) - .build(); - WebSocket socket = null; - boolean connectionSuccessful = true; - // Try to create a websocket connection - try { - socket = client.prepareGet(url).execute(handler).get(); - LOG.info("Successfully connected to {}.", url); - } catch (ExecutionException e) { - LOG.error("Could not connect to {}: {}", url, e.getCause().getMessage()); - connectionSuccessful = false; - } catch (Exception e) { - LOG.error("Unknown exception when trying to connect to {}.", url, e); - connectionSuccessful = false; - } - - // If connection was unsuccessful, wait some time before trying again - if (!connectionSuccessful) { - Thread.sleep(reconnectPeriodSec * 1000); - } - - // Keep checking whether connection is still open - while (true) { - if (socket == null || !socket.isOpen()) { - // The connection is closed somehow, try to reconnect - if (connectionSuccessful) { - LOG.warn("Connection to {} was lost. Trying to reconnect...", url); - } - break; - } - Thread.sleep(CHECK_CONNECTION_PERIOD_SEC * 1000); - } - - client.close(); - } - } - - @Override - public String getConfigRef() { - return configRef; - } - - /** - * Auxiliary class to handle incoming messages via the websocket connection - */ - private class Listener implements WebSocketListener { - - @Override - public void onOpen(WebSocket websocket) {} - - @Override - public void onClose(WebSocket websocket, int code, String reason) {} - - @Override - public void onError(Throwable t) {} - - @Override - public void onBinaryFrame(byte[] message, boolean finalFragment, int rsv) { - FeedMessage feedMessage; - List feedEntityList; - List updates = null; - boolean fullDataset = true; - try { - // Decode message - feedMessage = FeedMessage.PARSER.parseFrom(message); - feedEntityList = feedMessage.getEntityList(); - - // Change fullDataset value if this is an incremental update - if ( - feedMessage.hasHeader() && - feedMessage.getHeader().hasIncrementality() && - feedMessage - .getHeader() - .getIncrementality() - .equals(GtfsRealtime.FeedHeader.Incrementality.DIFFERENTIAL) - ) { - fullDataset = false; - } - - // Create List of TripUpdates - updates = new ArrayList<>(feedEntityList.size()); - for (FeedEntity feedEntity : feedEntityList) { - if (feedEntity.hasTripUpdate()) { - updates.add(feedEntity.getTripUpdate()); - } - } - } catch (InvalidProtocolBufferException e) { - LOG.error("Could not decode gtfs-rt message:", e); - } - - if (updates != null) { - // Handle trip updates via graph writer runnable - TripUpdateGraphWriterRunnable runnable = new TripUpdateGraphWriterRunnable( - snapshotSource, - fuzzyTripMatcher, - backwardsDelayPropagationType, - fullDataset, - updates, - feedId, - recordMetrics - ); - saveResultOnGraph.execute(runnable); - } - } - } -} diff --git a/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdaterParameters.java b/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdaterParameters.java deleted file mode 100644 index d5eebd748af..00000000000 --- a/src/main/java/org/opentripplanner/updater/trip/WebsocketGtfsRealtimeUpdaterParameters.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.opentripplanner.updater.trip; - -public class WebsocketGtfsRealtimeUpdaterParameters implements UrlUpdaterParameters { - - private final String configRef; - private final String feedId; - private final String url; - private final int reconnectPeriodSec; - private final BackwardsDelayPropagationType backwardsDelayPropagationType; - - public WebsocketGtfsRealtimeUpdaterParameters( - String configRef, - String feedId, - String url, - int reconnectPeriodSec, - BackwardsDelayPropagationType backwardsDelayPropagationType - ) { - this.configRef = configRef; - this.feedId = feedId; - this.url = url; - this.reconnectPeriodSec = reconnectPeriodSec; - this.backwardsDelayPropagationType = backwardsDelayPropagationType; - } - - public String url() { - return url; - } - - public String feedId() { - return feedId; - } - - int getReconnectPeriodSec() { - return reconnectPeriodSec; - } - - /** The config name/type for the updater. Used to reference the configuration element. */ - public String configRef() { - return configRef; - } - - public BackwardsDelayPropagationType getBackwardsDelayPropagationType() { - return backwardsDelayPropagationType; - } -} From 4a29056bac782b0ee70868f6d5d136a8473ccdc5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jan 2024 17:47:52 +0100 Subject: [PATCH 050/103] Remove websocket documentation --- doc-templates/UpdaterConfig.md | 12 ----- docs/RouterConfiguration.md | 4 -- docs/UpdaterConfig.md | 50 ------------------- docs/sandbox/SiriUpdater.md | 30 +++++------ .../standalone/config/router-config.json | 5 -- 5 files changed, 15 insertions(+), 86 deletions(-) diff --git a/doc-templates/UpdaterConfig.md b/doc-templates/UpdaterConfig.md index 90c699fcf28..a239317f244 100644 --- a/doc-templates/UpdaterConfig.md +++ b/doc-templates/UpdaterConfig.md @@ -45,18 +45,6 @@ The information is downloaded in a single HTTP request and polled regularly. -### TripUpdates via WebSocket - -This updater doesn't poll a data source but opens a persistent connection to the GTFS-RT provider, -which then sends incremental updates immediately as they become available. - -The [OneBusAway GTFS-realtime exporter project](https://github.com/OneBusAway/onebusaway-gtfs-realtime-exporter) -provides this kind of streaming, incremental updates over a websocket rather than a single large -file. - - - - ### Vehicle Positions VehiclePositions give the location of some or all vehicles currently in service, in terms of diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 65f50260ee5..30e423f29b1 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -740,10 +740,6 @@ Used to group requests when monitoring OTP. "position" ] }, - { - "type" : "websocket-gtfs-rt-updater", - "feedId" : "ov" - }, { "type" : "siri-et-updater", "url" : "https://example.com/some/path", diff --git a/docs/UpdaterConfig.md b/docs/UpdaterConfig.md index 6b744794642..6c219d07ddf 100644 --- a/docs/UpdaterConfig.md +++ b/docs/UpdaterConfig.md @@ -165,56 +165,6 @@ HTTP headers to add to the request. Any header key, value can be inserted. -### TripUpdates via WebSocket - -This updater doesn't poll a data source but opens a persistent connection to the GTFS-RT provider, -which then sends incremental updates immediately as they become available. - -The [OneBusAway GTFS-realtime exporter project](https://github.com/OneBusAway/onebusaway-gtfs-realtime-exporter) -provides this kind of streaming, incremental updates over a websocket rather than a single large -file. - - - - -| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | -|-----------------------------------------------------------------------|:---------:|--------------------------|:----------:|----------------------|:-----:| -| type = "websocket-gtfs-rt-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | -| [backwardsDelayPropagationType](#u__7__backwardsDelayPropagationType) | `enum` | TODO | *Optional* | `"required-no-data"` | 1.5 | -| feedId | `string` | TODO | *Required* | | 1.5 | -| reconnectPeriodSec | `integer` | TODO | *Optional* | `60` | 1.5 | -| url | `string` | TODO | *Optional* | | 1.5 | - - -##### Parameter details - -

    backwardsDelayPropagationType

    - -**Since version:** `1.5` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"required-no-data"` -**Path:** /updaters/[7] -**Enum values:** `required-no-data` | `required` | `always` - -TODO - - - -##### Example configuration - -```JSON -// router-config.json -{ - "updaters" : [ - { - "type" : "websocket-gtfs-rt-updater", - "feedId" : "ov" - } - ] -} -``` - - - - ### Vehicle Positions VehiclePositions give the location of some or all vehicles currently in service, in terms of diff --git a/docs/sandbox/SiriUpdater.md b/docs/sandbox/SiriUpdater.md index f6c4c3f999f..7730df67d12 100644 --- a/docs/sandbox/SiriUpdater.md +++ b/docs/sandbox/SiriUpdater.md @@ -37,16 +37,16 @@ To enable the SIRI updater you need to add it to the updaters section of the `ro | previewInterval | `duration` | TODO | *Optional* | | 2.0 | | requestorRef | `string` | The requester reference. | *Optional* | | 2.0 | | timeout | `duration` | The HTTP timeout to download the updates. | *Optional* | `"PT15S"` | 2.0 | -| [url](#u__8__url) | `string` | The URL to send the HTTP requests to. | *Required* | | 2.0 | -| [headers](#u__8__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | +| [url](#u__7__url) | `string` | The URL to send the HTTP requests to. | *Required* | | 2.0 | +| [headers](#u__7__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | ##### Parameter details -

    url

    +

    url

    **Since version:** `2.0` ∙ **Type:** `string` ∙ **Cardinality:** `Required` -**Path:** /updaters/[8] +**Path:** /updaters/[7] The URL to send the HTTP requests to. @@ -58,10 +58,10 @@ renamed by the loader when processed: -

    headers

    +

    headers

    **Since version:** `2.3` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[8] +**Path:** /updaters/[7] HTTP headers to add to the request. Any header key, value can be inserted. @@ -97,21 +97,21 @@ HTTP headers to add to the request. Any header key, value can be inserted. |---------------------------------|:---------------:|--------------------------------------------------------------------------------------------------------|:----------:|---------------|:-----:| | type = "siri-sx-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | | blockReadinessUntilInitialized | `boolean` | Whether catching up with the updates should block the readiness check from returning a 'ready' result. | *Optional* | `false` | 2.0 | -| [earlyStart](#u__9__earlyStart) | `duration` | This value is subtracted from the actual validity defined in the message. | *Optional* | `"PT0S"` | 2.0 | +| [earlyStart](#u__8__earlyStart) | `duration` | This value is subtracted from the actual validity defined in the message. | *Optional* | `"PT0S"` | 2.0 | | feedId | `string` | The ID of the feed to apply the updates to. | *Required* | | 2.0 | | frequency | `duration` | How often the updates should be retrieved. | *Optional* | `"PT1M"` | 2.0 | | requestorRef | `string` | The requester reference. | *Optional* | | 2.0 | | timeout | `duration` | The HTTP timeout to download the updates. | *Optional* | `"PT15S"` | 2.0 | -| [url](#u__9__url) | `string` | The URL to send the HTTP requests to. Supports http/https and file protocol. | *Required* | | 2.0 | -| [headers](#u__9__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | +| [url](#u__8__url) | `string` | The URL to send the HTTP requests to. Supports http/https and file protocol. | *Required* | | 2.0 | +| [headers](#u__8__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | ##### Parameter details -

    earlyStart

    +

    earlyStart

    **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` -**Path:** /updaters/[9] +**Path:** /updaters/[8] This value is subtracted from the actual validity defined in the message. @@ -119,10 +119,10 @@ Normally the planned departure time is used, so setting this to 10s will cause t SX-message to be included in trip-results 10 seconds before the the planned departure time. -

    url

    +

    url

    **Since version:** `2.0` ∙ **Type:** `string` ∙ **Cardinality:** `Required` -**Path:** /updaters/[9] +**Path:** /updaters/[8] The URL to send the HTTP requests to. Supports http/https and file protocol. @@ -135,10 +135,10 @@ renamed by the loader when processed: -

    headers

    +

    headers

    **Since version:** `2.3` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[9] +**Path:** /updaters/[8] HTTP headers to add to the request. Any header key, value can be inserted. diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index 69f859d784d..1a5eec22a28 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -295,11 +295,6 @@ "fuzzyTripMatching": false, "features": ["position"] }, - // Streaming differential GTFS-RT TripUpdates over websockets - { - "type": "websocket-gtfs-rt-updater", - "feedId": "ov" - }, // Siri-ET over HTTP { "type": "siri-et-updater", From 10da47f62ba8cb1e78dfea65a7979c119dc76c5d Mon Sep 17 00:00:00 2001 From: Thomas Gran Date: Thu, 4 Jan 2024 18:18:13 +0100 Subject: [PATCH 051/103] Apply suggestions from code review Co-authored-by: Johan Torin --- .../apis/transmodel/model/plan/RelaxCostType.java | 8 ++++---- .../org/opentripplanner/apis/transmodel/schema.graphql | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java index d3455083695..41435c83a2f 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RelaxCostType.java @@ -46,8 +46,8 @@ public class RelaxCostType { .newInputObjectField() .name(CONSTANT) .description( - "The constant value to add to the limit. Must be a positive number. The value is" + - "equivalent to transit-cost-seconds. Integers is treated as seconds, but you may use " + + "The constant value to add to the limit. Must be a positive number. The value is " + + "equivalent to transit-cost-seconds. Integers are treated as seconds, but you may use " + "the duration format. Example: '3665 = 'DT1h1m5s' = '1h1m5s'." ) .defaultValueProgrammatic("0s") @@ -66,8 +66,8 @@ public static ObjectValue valueOf(CostLinearFunction value) { ObjectField .newObjectField() .name(CONSTANT) - // We only use this to display default value (this is an input type), so using the - // lenient OTP version of duration is ok - it is slightly more readable. + // We only use this to display the default value (this is an input type), so using + // the lenient OTP version of duration is ok - it is slightly more readable. .value(StringValue.of(DurationUtils.durationToStr(value.constant().asDuration()))) .build() ) diff --git a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql index b5d1dc00a39..e73b074df3f 100644 --- a/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql +++ b/src/main/resources/org/opentripplanner/apis/transmodel/schema.graphql @@ -2035,7 +2035,7 @@ the default. We can express the RelaxCost as a function `f(t) = constant + ratio `f(t)=t` is the NORMAL function. """ input RelaxCostInput { - "The constant value to add to the limit. Must be a positive number. The value isequivalent to transit-cost-seconds. Integers is treated as seconds, but you may use the duration format. Example: '3665 = 'DT1h1m5s' = '1h1m5s'." + "The constant value to add to the limit. Must be a positive number. The value is equivalent to transit-cost-seconds. Integers are treated as seconds, but you may use the duration format. Example: '3665 = 'DT1h1m5s' = '1h1m5s'." constant: Cost = "0s" "The factor to multiply with the 'other cost'. Minimum value is 1.0." ratio: Float = 1.0 From cae4145d3b708426c40e96af8c56841c398cbba6 Mon Sep 17 00:00:00 2001 From: Vesa Meskanen Date: Thu, 4 Jan 2024 20:14:49 +0200 Subject: [PATCH 052/103] Remove unnecessary edge selection --- .../module/islandpruning/PruneIslands.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java index 2ffecd3442f..9240a638496 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java @@ -339,17 +339,6 @@ private void collectNeighbourVertices( } State s0 = new State(gv, request); for (Edge e : gv.getOutgoing()) { - if ( - !( - e instanceof StreetEdge || - e instanceof ElevatorEdge || - e instanceof FreeEdge || - e instanceof StreetTransitEntityLink || - e instanceof EscalatorEdge - ) - ) { - continue; - } if ( e instanceof StreetEdge && shouldMatchNoThruType != ((StreetEdge) e).isNoThruTraffic(traverseMode) From a8086b14aad5a2dad7f10b37319a1b6d4f424890 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 4 Jan 2024 19:52:21 +0100 Subject: [PATCH 053/103] Cosmetic changes to island pruning tests --- .../module/islandpruning/PruneIslands.java | 4 ---- .../module/islandpruning/AdaptivePruningTest.java | 15 ++++++++------- .../islandpruning/EscalatorPruningTest.java | 8 +++----- .../islandpruning/PruneNoThruIslandsTest.java | 5 +++-- 4 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java index 9240a638496..00404845349 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/islandpruning/PruneIslands.java @@ -25,11 +25,7 @@ import org.opentripplanner.street.model.edge.AreaEdge; import org.opentripplanner.street.model.edge.AreaEdgeList; import org.opentripplanner.street.model.edge.Edge; -import org.opentripplanner.street.model.edge.ElevatorEdge; -import org.opentripplanner.street.model.edge.EscalatorEdge; -import org.opentripplanner.street.model.edge.FreeEdge; import org.opentripplanner.street.model.edge.StreetEdge; -import org.opentripplanner.street.model.edge.StreetTransitEntityLink; import org.opentripplanner.street.model.vertex.StreetVertex; import org.opentripplanner.street.model.vertex.TransitStopVertex; import org.opentripplanner.street.model.vertex.Vertex; diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java index 9f7e4e8cf4a..90ffc33d848 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/AdaptivePruningTest.java @@ -1,5 +1,6 @@ package org.opentripplanner.graph_builder.module.islandpruning; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; import java.util.stream.Collectors; @@ -9,12 +10,12 @@ import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.ResourceLoader; -/* Test data consists of one bigger graph and two small sub graphs. These are totally disconnected. - One small graphs is only at 5 meter distance from the big graph and another one 30 m away. - Adaptive pruning retains the distant island but removes the closer one which appears to be - disconnected part of the main graph. +/** + * Test data consists of one bigger graph and two small sub graphs. These are totally disconnected. + * One small graphs is only at 5 meter distance from the big graph and another one 30 m away. + * Adaptive pruning retains the distant island but removes the closer one which appears to be + * disconnected part of the main graph. */ - public class AdaptivePruningTest { private static Graph graph; @@ -33,7 +34,7 @@ static void setup() { @Test public void distantIslandIsRetained() { - Assertions.assertTrue( + assertTrue( graph .getStreetEdges() .stream() @@ -57,7 +58,7 @@ public void nearIslandIsRemoved() { @Test public void mainGraphIsNotRemoved() { - Assertions.assertTrue( + assertTrue( graph .getStreetEdges() .stream() diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java index ce1b5f78489..9d6a9b73c3c 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java @@ -1,20 +1,18 @@ package org.opentripplanner.graph_builder.module.islandpruning; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; import java.util.stream.Collectors; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.opentripplanner.routing.graph.Graph; import org.opentripplanner.test.support.ResourceLoader; public class EscalatorPruningTest { - private static Graph graph; @Test public void streetEdgesBetweenEscalatorEdgesRetained() { - graph = + var graph = buildOsmGraph( ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf"), 10, @@ -22,7 +20,7 @@ public void streetEdgesBetweenEscalatorEdgesRetained() { 50, 250 ); - Assertions.assertTrue( + assertTrue( graph .getStreetEdges() .stream() diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java index 856b81bc385..9070fb00f8f 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/PruneNoThruIslandsTest.java @@ -1,5 +1,6 @@ package org.opentripplanner.graph_builder.module.islandpruning; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.opentripplanner.graph_builder.module.islandpruning.IslandPruningUtils.buildOsmGraph; import java.util.Set; @@ -31,7 +32,7 @@ static void setup() { @Test public void bicycleIslandsBecomeNoThru() { - Assertions.assertTrue( + assertTrue( graph .getStreetEdges() .stream() @@ -44,7 +45,7 @@ public void bicycleIslandsBecomeNoThru() { @Test public void carIslandsBecomeNoThru() { - Assertions.assertTrue( + assertTrue( graph .getStreetEdges() .stream() From bb19842a0509b3539b33c58ccd9ef091334b734a Mon Sep 17 00:00:00 2001 From: Vesa Meskanen Date: Fri, 5 Jan 2024 08:46:23 +0200 Subject: [PATCH 054/103] Fix formatting --- .../islandpruning/EscalatorPruningTest.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java index 9d6a9b73c3c..540befb07e0 100644 --- a/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java +++ b/src/test/java/org/opentripplanner/graph_builder/module/islandpruning/EscalatorPruningTest.java @@ -9,17 +9,15 @@ public class EscalatorPruningTest { - @Test public void streetEdgesBetweenEscalatorEdgesRetained() { - var graph = - buildOsmGraph( - ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf"), - 10, - 2, - 50, - 250 - ); + var graph = buildOsmGraph( + ResourceLoader.of(EscalatorPruningTest.class).file("matinkyla-escalator.pbf"), + 10, + 2, + 50, + 250 + ); assertTrue( graph .getStreetEdges() From 7342f017a9d3f7e991697f115706cd96511e93af Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Fri, 5 Jan 2024 07:02:51 +0000 Subject: [PATCH 055/103] Add changelog entry for #5591 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 9f5c13de0e4..1d4e54da8d7 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -67,6 +67,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Transit priority - part 3 [#5583](https://github.com/opentripplanner/OpenTripPlanner/pull/5583) - Fix preference cost comparisons [#5586](https://github.com/opentripplanner/OpenTripPlanner/pull/5586) - Report and throw away trip-times which fail sanity check [#5587](https://github.com/opentripplanner/OpenTripPlanner/pull/5587) +- Consider escalator edges in island pruning [#5591](https://github.com/opentripplanner/OpenTripPlanner/pull/5591) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 97cf60c6ca5133bfc2fa49b8692509aca9e6f684 Mon Sep 17 00:00:00 2001 From: Lasse Tyrihjell Date: Fri, 5 Jan 2024 11:18:45 +0100 Subject: [PATCH 056/103] Adding javadoc --- .../opentripplanner/routing/alertpatch/TransitAlert.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java b/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java index 8f375be0490..d5d260a8218 100644 --- a/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java +++ b/src/main/java/org/opentripplanner/routing/alertpatch/TransitAlert.java @@ -121,6 +121,12 @@ public ZonedDateTime creationTime() { return creationTime; } + /** + * Note: Only supported for TransitAlerts created from SIRI-SX messages + * + * @return Version as provided, or null + */ + @Nullable public Integer version() { return version; } From 79214a6ca1478d824a62b2396a53c92238d4cdb2 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 15:22:28 +0100 Subject: [PATCH 057/103] Take isFinal() into account when counting stops --- .../java/org/opentripplanner/astar/model/BinHeap.java | 6 ++++-- .../opentripplanner/astar/model/ShortestPathTree.java | 4 ---- .../astar/strategy/MaxCountSkipEdgeStrategy.java | 10 +++++----- .../graph_builder/module/NearbyStopFinder.java | 8 ++++---- .../street/search/StreetSearchBuilder.java | 3 +-- .../strategy/EuclideanRemainingWeightHeuristic.java | 1 - 6 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/opentripplanner/astar/model/BinHeap.java b/src/main/java/org/opentripplanner/astar/model/BinHeap.java index 9bc2b0762a8..f1c39f12b61 100644 --- a/src/main/java/org/opentripplanner/astar/model/BinHeap.java +++ b/src/main/java/org/opentripplanner/astar/model/BinHeap.java @@ -1,6 +1,7 @@ package org.opentripplanner.astar.model; import java.util.Arrays; +import org.opentripplanner.framework.tostring.ToStringBuilder; public class BinHeap { @@ -136,7 +137,8 @@ public void resize(int capacity) { elem = Arrays.copyOf(elem, capacity + 1); } - public int getCapacity() { - return capacity; + @Override + public String toString() { + return ToStringBuilder.of().addNum("size", size).toString(); } } diff --git a/src/main/java/org/opentripplanner/astar/model/ShortestPathTree.java b/src/main/java/org/opentripplanner/astar/model/ShortestPathTree.java index e373f9c785e..a6d7123cdfe 100644 --- a/src/main/java/org/opentripplanner/astar/model/ShortestPathTree.java +++ b/src/main/java/org/opentripplanner/astar/model/ShortestPathTree.java @@ -244,10 +244,6 @@ public void setAborted() { aborted = true; } - public boolean isAborted() { - return aborted; - } - public String toString() { return "ShortestPathTree(" + this.stateSets.size() + " vertices)"; } diff --git a/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java b/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java index bcae9dcdb86..f719ed371ac 100644 --- a/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java +++ b/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java @@ -1,12 +1,12 @@ package org.opentripplanner.astar.strategy; -import java.util.function.Function; +import java.util.function.Predicate; import org.opentripplanner.astar.spi.AStarEdge; import org.opentripplanner.astar.spi.AStarState; import org.opentripplanner.astar.spi.SkipEdgeStrategy; /** - * Skips edges when the specified number of desired vertices have been visited + * Skips edges when the specified number of desired vertices have been visited. */ public class MaxCountSkipEdgeStrategy< State extends AStarState, Edge extends AStarEdge @@ -14,11 +14,11 @@ public class MaxCountSkipEdgeStrategy< implements SkipEdgeStrategy { private final int maxCount; - private final Function shouldIncreaseCount; + private final Predicate shouldIncreaseCount; private int visited; - public MaxCountSkipEdgeStrategy(int count, Function shouldIncreaseCount) { + public MaxCountSkipEdgeStrategy(int count, Predicate shouldIncreaseCount) { this.maxCount = count; this.shouldIncreaseCount = shouldIncreaseCount; this.visited = 0; @@ -26,7 +26,7 @@ public MaxCountSkipEdgeStrategy(int count, Function shouldIncrea @Override public boolean shouldSkipEdge(State current, Edge edge) { - if (this.shouldIncreaseCount.apply(current)) { + if (current.isFinal() && shouldIncreaseCount.test(current)) { visited++; } return visited > maxCount; diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index ba776ac5243..4caa04d7892 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -227,15 +227,15 @@ public List findNearbyStopsViaStreets( for (State state : spt.getAllStates()) { Vertex targetVertex = state.getVertex(); if (originVertices.contains(targetVertex)) continue; - if (targetVertex instanceof TransitStopVertex && state.isFinal()) { + if (targetVertex instanceof TransitStopVertex tsv && state.isFinal()) { stopsFound.add( - NearbyStop.nearbyStopForState(state, ((TransitStopVertex) targetVertex).getStop()) + NearbyStop.nearbyStopForState(state, tsv.getStop()) ); } if ( OTPFeature.FlexRouting.isOn() && - targetVertex instanceof StreetVertex && - !((StreetVertex) targetVertex).areaStops().isEmpty() + targetVertex instanceof StreetVertex streetVertex && + !streetVertex.areaStops().isEmpty() ) { for (AreaStop areaStop : ((StreetVertex) targetVertex).areaStops()) { // This is for a simplification, so that we only return one vertex from each diff --git a/src/main/java/org/opentripplanner/street/search/StreetSearchBuilder.java b/src/main/java/org/opentripplanner/street/search/StreetSearchBuilder.java index b4ac98674d0..079cd29706f 100644 --- a/src/main/java/org/opentripplanner/street/search/StreetSearchBuilder.java +++ b/src/main/java/org/opentripplanner/street/search/StreetSearchBuilder.java @@ -102,7 +102,7 @@ protected void prepareInitialStates(Collection initialStates) { @Override protected void initializeHeuristic( RemainingWeightHeuristic heuristic, - Set origin, + Set ignored, Set destination, boolean arriveBy ) { @@ -111,7 +111,6 @@ protected void initializeHeuristic( } else if (heuristic instanceof EuclideanRemainingWeightHeuristic euclideanHeuristic) { euclideanHeuristic.initialize( streetRequest.mode(), - origin, destination, arriveBy, routeRequest.preferences() diff --git a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java index 36e4a57f8ec..e43278901d4 100644 --- a/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java +++ b/src/main/java/org/opentripplanner/street/search/strategy/EuclideanRemainingWeightHeuristic.java @@ -26,7 +26,6 @@ public class EuclideanRemainingWeightHeuristic implements RemainingWeightHeurist // not work correctly. public void initialize( StreetMode streetMode, - Set fromVertices, Set toVertices, boolean arriveBy, RoutingPreferences preferences From d4e28f746ae7f9f93e24554a4fe2326cccfb8500 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 20:46:19 +0100 Subject: [PATCH 058/103] Add tests --- pom.xml | 1 - .../opentripplanner/astar/model/BinHeap.java | 14 --------- .../strategy/MaxCountSkipEdgeStrategy.java | 2 +- .../module/NearbyStopFinder.java | 16 ++++------ .../MaxCountSkipEdgeStrategyTest.java | 12 ++++++-- .../model/_data/StreetModelForTest.java | 1 + .../street/search/state/TestStateBuilder.java | 29 +++++++++++++++++-- 7 files changed, 44 insertions(+), 31 deletions(-) diff --git a/pom.xml b/pom.xml index de8baecefd9..29b1f14dc09 100644 --- a/pom.xml +++ b/pom.xml @@ -282,7 +282,6 @@ --add-opens java.base/jdk.internal.loader=ALL-UNNAMED --add-opens java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/jdk.internal.util=ALL-UNNAMED - --add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED --add-opens java.base/jdk.internal.module=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED diff --git a/src/main/java/org/opentripplanner/astar/model/BinHeap.java b/src/main/java/org/opentripplanner/astar/model/BinHeap.java index f1c39f12b61..1e9b540a77a 100644 --- a/src/main/java/org/opentripplanner/astar/model/BinHeap.java +++ b/src/main/java/org/opentripplanner/astar/model/BinHeap.java @@ -1,7 +1,6 @@ package org.opentripplanner.astar.model; import java.util.Arrays; -import org.opentripplanner.framework.tostring.ToStringBuilder; public class BinHeap { @@ -80,14 +79,6 @@ public void rekey(T e, double p) { prio[i] = p; } - public void dump() { - for (int i = 0; i <= capacity; i++) { - String topMarker = (i > size) ? "(UNUSED)" : ""; - System.out.printf("%d\t%f\t%s\t%s\n", i, prio[i], elem[i], topMarker); - } - System.out.printf("-----------------------\n"); - } - public void reset() { // empties the queue in one operation size = 0; @@ -136,9 +127,4 @@ public void resize(int capacity) { prio = Arrays.copyOf(prio, capacity + 1); elem = Arrays.copyOf(elem, capacity + 1); } - - @Override - public String toString() { - return ToStringBuilder.of().addNum("size", size).toString(); - } } diff --git a/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java b/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java index f719ed371ac..0369e3e29db 100644 --- a/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java +++ b/src/main/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategy.java @@ -26,7 +26,7 @@ public MaxCountSkipEdgeStrategy(int count, Predicate shouldIncreaseCount) @Override public boolean shouldSkipEdge(State current, Edge edge) { - if (current.isFinal() && shouldIncreaseCount.test(current)) { + if (shouldIncreaseCount.test(current)) { visited++; } return visited > maxCount; diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 4caa04d7892..13fbfec2b17 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -228,14 +228,11 @@ public List findNearbyStopsViaStreets( Vertex targetVertex = state.getVertex(); if (originVertices.contains(targetVertex)) continue; if (targetVertex instanceof TransitStopVertex tsv && state.isFinal()) { - stopsFound.add( - NearbyStop.nearbyStopForState(state, tsv.getStop()) - ); + stopsFound.add(NearbyStop.nearbyStopForState(state, tsv.getStop())); } if ( OTPFeature.FlexRouting.isOn() && - targetVertex instanceof StreetVertex streetVertex && - !streetVertex.areaStops().isEmpty() + targetVertex instanceof StreetVertex streetVertex && !streetVertex.areaStops().isEmpty() ) { for (AreaStop areaStop : ((StreetVertex) targetVertex).areaStops()) { // This is for a simplification, so that we only return one vertex from each @@ -312,10 +309,7 @@ private SkipEdgeStrategy getSkipEdgeStrategy( return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } else { if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>( - maxStopCount, - NearbyStopFinder::isTransitVertex - ); + var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, NearbyStopFinder::hasFoundStop); return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } return durationSkipEdgeStrategy; @@ -368,7 +362,7 @@ private boolean canBoardFlex(State state, boolean reverse) { /** * Checks if the {@code state} as at a transit vertex. */ - public static boolean isTransitVertex(State state) { - return state.getVertex() instanceof TransitStopVertex; + public static boolean hasFoundStop(State state) { + return state.getVertex() instanceof TransitStopVertex && state.isFinal(); } } diff --git a/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java b/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java index 04844d65da2..85d9fe72ec3 100644 --- a/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java +++ b/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java @@ -12,7 +12,7 @@ class MaxCountSkipEdgeStrategyTest { @Test void countStops() { var state = TestStateBuilder.ofWalking().stop().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::isTransitVertex); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); assertFalse(strategy.shouldSkipEdge(state, null)); assertTrue(strategy.shouldSkipEdge(state, null)); } @@ -20,9 +20,17 @@ void countStops() { @Test void doNotCountStop() { var state = TestStateBuilder.ofWalking().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::isTransitVertex); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); assertFalse(strategy.shouldSkipEdge(state, null)); assertFalse(strategy.shouldSkipEdge(state, null)); assertFalse(strategy.shouldSkipEdge(state, null)); } + + @Test + void nonFinalState() { + var state = TestStateBuilder.ofScooterRentalArriveBy().stop().build(); + assertFalse(state.isFinal()); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); + assertFalse(strategy.shouldSkipEdge(state, null)); + } } diff --git a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index 1f3dbf8c4c9..0ac1762ae6f 100644 --- a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -93,4 +93,5 @@ public static StreetEdge streetEdge( ) { return streetEdge(from, to, 1, permissions); } + } diff --git a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java index 042ff5ba553..752985de51e 100644 --- a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java +++ b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java @@ -1,6 +1,7 @@ package org.opentripplanner.street.search.state; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressType.EGRESS; import static org.opentripplanner.transit.model.site.PathwayMode.WALKWAY; import java.time.Instant; @@ -10,6 +11,7 @@ import javax.annotation.Nonnull; import org.opentripplanner.framework.i18n.I18NString; import org.opentripplanner.framework.i18n.NonLocalizedString; +import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressType; import org.opentripplanner.routing.api.request.StreetMode; import org.opentripplanner.service.vehiclerental.model.TestFreeFloatingRentalVehicleBuilder; import org.opentripplanner.service.vehiclerental.model.TestVehicleRentalStationBuilder; @@ -20,6 +22,7 @@ import org.opentripplanner.street.model.RentalFormFactor; import org.opentripplanner.street.model.StreetTraversalPermission; import org.opentripplanner.street.model._data.StreetModelForTest; +import org.opentripplanner.street.model.edge.Edge; import org.opentripplanner.street.model.edge.ElevatorAlightEdge; import org.opentripplanner.street.model.edge.ElevatorBoardEdge; import org.opentripplanner.street.model.edge.ElevatorHopEdge; @@ -51,10 +54,19 @@ public class TestStateBuilder { private State currentState; private TestStateBuilder(StreetMode mode) { + this(mode, AccessEgressType.ACCESS); + } + + private TestStateBuilder(StreetMode mode, AccessEgressType type) { currentState = new State( StreetModelForTest.intersectionVertex(count, count), - StreetSearchRequest.of().withMode(mode).withStartTime(DEFAULT_START_TIME).build() + StreetSearchRequest + .of() + .withArriveBy(type.isEgress()) + .withMode(mode) + .withStartTime(DEFAULT_START_TIME) + .build() ); } @@ -80,6 +92,14 @@ public static TestStateBuilder ofScooterRental() { return new TestStateBuilder(StreetMode.SCOOTER_RENTAL); } + /** + * Creates a state starts the scooter rental but in arriveBy mode, so therefore starting with + * a rental scooter and going backwards until it finds a rental vertex where to drop it. + */ + public static TestStateBuilder ofScooterRentalArriveBy() { + return new TestStateBuilder(StreetMode.SCOOTER_RENTAL, EGRESS); + } + public static TestStateBuilder ofBikeRental() { return new TestStateBuilder(StreetMode.BIKE_RENTAL); } @@ -248,7 +268,12 @@ private TestStateBuilder arriveAtStop(RegularStop stop) { var from = (StreetVertex) currentState.vertex; var to = new TransitStopVertexBuilder().withStop(stop).build(); - var edge = StreetTransitStopLink.createStreetTransitStopLink(from, to); + Edge edge; + if (currentState.getRequest().arriveBy()) { + edge = StreetTransitStopLink.createStreetTransitStopLink(to, from); + } else { + edge = StreetTransitStopLink.createStreetTransitStopLink(from, to); + } var states = edge.traverse(currentState); if (states.length != 1) { throw new IllegalStateException("Only single state transitions are supported."); From 67d6443655c449dcbd99f973f1dfda2f12a6d3bf Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 22:32:28 +0100 Subject: [PATCH 059/103] Improve documentation --- .../module/NearbyStopFinder.java | 30 +++++++++++-------- .../MaxCountSkipEdgeStrategyTest.java | 6 ++-- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 13fbfec2b17..09d8024eca0 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -47,14 +47,8 @@ import org.opentripplanner.transit.service.TransitService; /** - * These library functions are used by the streetless and streetful stop linkers, and in profile - * transfer generation. - * TODO OTP2 Fold these into org.opentripplanner.routing.graphfinder.StreetGraphFinder - * These are not library functions, this is instantiated as an object. Define lifecycle of the object (reuse?). - * Because AStar instances should only be used once, NearbyStopFinder should only be used once. - * Ideally they could also be used in long distance mode and profile routing for the street segments. - * For each stop, it finds the closest stops on all other patterns. This reduces the number of transfer edges - * significantly compared to simple radius-constrained all-to-all stop linkage. + * This class contains code for finding nearby stops from a given vertex. It is being used by access + * and egress searches as well as transfer generation. */ public class NearbyStopFinder { @@ -100,6 +94,8 @@ public NearbyStopFinder( * that the result will include the origin vertex if it is an instance of StopVertex. This is * intentional: we don't want to return the next stop down the line for trip patterns that pass * through the origin vertex. + * Taking the patterns into account reduces the number of transfers significantly compared to + * simple traverse-duration-constrained all-to-all stop linkage. */ public Set findNearbyStopsConsideringPatterns( Vertex vertex, @@ -309,7 +305,7 @@ private SkipEdgeStrategy getSkipEdgeStrategy( return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } else { if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, NearbyStopFinder::hasFoundStop); + var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, NearbyStopFinder::hasReachedStop); return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } return durationSkipEdgeStrategy; @@ -355,14 +351,24 @@ private boolean canBoardFlex(State state, boolean reverse) { return edges .stream() .anyMatch(e -> - e instanceof StreetEdge && ((StreetEdge) e).getPermission().allows(TraverseMode.CAR) + e instanceof StreetEdge se && se.getPermission().allows(TraverseMode.CAR) ); } /** - * Checks if the {@code state} as at a transit vertex. + * Checks if the {@code state} is at a transit vertex and if it's final, which means that the state + * can actually board a vehicle. + *

    + * This is important because there can be cases where states that cannot actually board the vehicle + * can dominate those that can thereby leading to zero found stops when this predicate is used with + * the {@link MaxCountSkipEdgeStrategy}. + *

    + * An example of this would be an egress/reverse search with a very high walk reluctance where + * the states that speculatively rent a vehicle move the walk states down the A* priority queue + * until the required number of stops are reached to abort the search, leading to zero egress + * results. */ - public static boolean hasFoundStop(State state) { + public static boolean hasReachedStop(State state) { return state.getVertex() instanceof TransitStopVertex && state.isFinal(); } } diff --git a/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java b/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java index 85d9fe72ec3..17dc26a4c5e 100644 --- a/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java +++ b/src/test/java/org/opentripplanner/astar/strategy/MaxCountSkipEdgeStrategyTest.java @@ -12,7 +12,7 @@ class MaxCountSkipEdgeStrategyTest { @Test void countStops() { var state = TestStateBuilder.ofWalking().stop().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasReachedStop); assertFalse(strategy.shouldSkipEdge(state, null)); assertTrue(strategy.shouldSkipEdge(state, null)); } @@ -20,7 +20,7 @@ void countStops() { @Test void doNotCountStop() { var state = TestStateBuilder.ofWalking().build(); - var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasReachedStop); assertFalse(strategy.shouldSkipEdge(state, null)); assertFalse(strategy.shouldSkipEdge(state, null)); assertFalse(strategy.shouldSkipEdge(state, null)); @@ -30,7 +30,7 @@ void doNotCountStop() { void nonFinalState() { var state = TestStateBuilder.ofScooterRentalArriveBy().stop().build(); assertFalse(state.isFinal()); - var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasFoundStop); + var strategy = new MaxCountSkipEdgeStrategy<>(1, NearbyStopFinder::hasReachedStop); assertFalse(strategy.shouldSkipEdge(state, null)); } } From 623b626a5b22d75f7bf8079ae2eee369b75ce52a Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 22:51:16 +0100 Subject: [PATCH 060/103] Run speed test on branch --- .github/workflows/performance-test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index c2168a79a06..d764fdbeff0 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -4,6 +4,7 @@ on: push: branches: - dev-2.x + - max-count-rental jobs: perf-test: From f2bc21fcf5b8d5d6b69370c239def28adee8f0bb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 22:53:25 +0100 Subject: [PATCH 061/103] Fix formatting --- .../graph_builder/module/NearbyStopFinder.java | 9 +++++---- .../street/model/_data/StreetModelForTest.java | 1 - 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java index 09d8024eca0..360cdaee363 100644 --- a/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java +++ b/src/main/java/org/opentripplanner/graph_builder/module/NearbyStopFinder.java @@ -305,7 +305,10 @@ private SkipEdgeStrategy getSkipEdgeStrategy( return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } else { if (maxStopCount > 0) { - var strategy = new MaxCountSkipEdgeStrategy<>(maxStopCount, NearbyStopFinder::hasReachedStop); + var strategy = new MaxCountSkipEdgeStrategy<>( + maxStopCount, + NearbyStopFinder::hasReachedStop + ); return new ComposingSkipEdgeStrategy<>(strategy, durationSkipEdgeStrategy); } return durationSkipEdgeStrategy; @@ -350,9 +353,7 @@ private boolean canBoardFlex(State state, boolean reverse) { return edges .stream() - .anyMatch(e -> - e instanceof StreetEdge se && se.getPermission().allows(TraverseMode.CAR) - ); + .anyMatch(e -> e instanceof StreetEdge se && se.getPermission().allows(TraverseMode.CAR)); } /** diff --git a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java index 0ac1762ae6f..1f3dbf8c4c9 100644 --- a/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java +++ b/src/test/java/org/opentripplanner/street/model/_data/StreetModelForTest.java @@ -93,5 +93,4 @@ public static StreetEdge streetEdge( ) { return streetEdge(from, to, 1, permissions); } - } From 63327b72b243052806602a5fbd8d3b7c9ec4b70e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:04:43 +0100 Subject: [PATCH 062/103] Move classes according to review feedback --- .../ext/restapi}/mapping/EnumMapperTest.java | 5 +---- .../ext/restapi}/mapping/FareMapperTest.java | 3 +-- .../ext/restapi/model/ApiTravelOptionsMakerTest.java} | 6 ++---- .../opentripplanner/ext/restapi}/model/ApiWalkStepTest.java | 3 +-- .../ext/restapi}/parameter/ApiRequestModeTest.java | 4 +++- .../ext/restapi}/parameter/QualifiedModeSetTest.java | 4 +++- .../ext/restapi}/parameter/QualifiedModeTest.java | 5 ++++- .../org/opentripplanner/ext/restapi/resources/IndexAPI.java | 2 +- .../ext/restapi/resources/PlannerResource.java | 2 +- .../ext/vectortiles/VectorTilesResource.java | 2 +- .../layers/stations/DigitransitStationPropertyMapper.java | 2 +- .../vectortiles/layers/stations/StationsLayerBuilder.java | 2 +- .../layers/stops/DigitransitStopPropertyMapper.java | 2 +- .../ext/vectortiles/layers/stops/StopsLayerBuilder.java | 2 +- .../DigitransitVehicleParkingGroupPropertyMapper.java | 2 +- .../DigitransitVehicleParkingPropertyMapper.java | 2 +- .../StadtnaviVehicleParkingPropertyMapper.java | 2 +- .../vehicleparkings/VehicleParkingGroupsLayerBuilder.java | 2 +- .../layers/vehicleparkings/VehicleParkingsLayerBuilder.java | 2 +- .../layers/vehiclerental/VehicleRentalLayerBuilder.java | 2 +- ...gitransitRealtimeVehicleRentalStationPropertyMapper.java | 2 +- .../mapper/DigitransitRentalVehiclePropertyMapper.java | 2 +- .../mapper/DigitransitVehicleRentalPropertyMapper.java | 2 +- .../DigitransitVehicleRentalStationPropertyMapper.java | 2 +- .../api/resource/GraphInspectorVectorTileResource.java | 2 +- .../opentripplanner/apis/gtfs/datafetchers/PatternImpl.java | 2 +- .../opentripplanner/apis/gtfs/datafetchers/PlanImpl.java | 2 +- .../apis/gtfs/datafetchers/RoutingErrorImpl.java | 2 +- .../opentripplanner/apis/gtfs/datafetchers/TripImpl.java | 2 +- .../apis/{common => support}/SemanticHash.java | 2 +- .../opentripplanner/apis/{common => support}/TileJson.java | 2 +- .../{common => support}/mapping/PlannerErrorMapper.java | 2 +- .../apis/{common => support}/mapping/PropertyMapper.java | 2 +- .../apis/transmodel/model/plan/RoutingErrorType.java | 2 +- .../apis/transmodel/model/plan/TripType.java | 2 +- .../opentripplanner/framework/i18n/I18NStringMapper.java | 0 .../inspector/vector/AreaStopsLayerBuilder.java | 2 +- .../inspector/vector/DebugClientAreaStopPropertyMapper.java | 2 +- .../org/opentripplanner/inspector/vector/LayerBuilder.java | 2 +- .../opentripplanner/inspector/vector/LayerParameters.java | 2 +- .../vector/geofencing/GeofencingZonesLayerBuilder.java | 2 +- .../vector/geofencing/GeofencingZonesPropertyMapper.java | 2 +- 42 files changed, 49 insertions(+), 49 deletions(-) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/mapping/EnumMapperTest.java (91%) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/mapping/FareMapperTest.java (91%) rename src/{test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java => ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java} (96%) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/model/ApiWalkStepTest.java (91%) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/parameter/ApiRequestModeTest.java (69%) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/parameter/QualifiedModeSetTest.java (97%) rename src/{test/java/org/opentripplanner/api => ext-test/java/org/opentripplanner/ext/restapi}/parameter/QualifiedModeTest.java (82%) rename src/main/java/org/opentripplanner/apis/{common => support}/SemanticHash.java (99%) rename src/main/java/org/opentripplanner/apis/{common => support}/TileJson.java (97%) rename src/main/java/org/opentripplanner/apis/{common => support}/mapping/PlannerErrorMapper.java (97%) rename src/main/java/org/opentripplanner/apis/{common => support}/mapping/PropertyMapper.java (96%) rename src/{ext => main}/java/org/opentripplanner/framework/i18n/I18NStringMapper.java (100%) diff --git a/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java similarity index 91% rename from src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java index 956b2aa065e..35cc368fec4 100644 --- a/src/test/java/org/opentripplanner/api/mapping/EnumMapperTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/EnumMapperTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -8,9 +8,6 @@ import java.util.Map; import java.util.function.Function; import org.junit.jupiter.api.Test; -import org.opentripplanner.ext.restapi.mapping.AbsoluteDirectionMapper; -import org.opentripplanner.ext.restapi.mapping.RelativeDirectionMapper; -import org.opentripplanner.ext.restapi.mapping.VertexTypeMapper; import org.opentripplanner.ext.restapi.model.ApiAbsoluteDirection; import org.opentripplanner.ext.restapi.model.ApiRelativeDirection; import org.opentripplanner.ext.restapi.model.ApiVertexType; diff --git a/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/FareMapperTest.java similarity index 91% rename from src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/mapping/FareMapperTest.java index 0d13a77e7c9..bd1bd07aa43 100644 --- a/src/test/java/org/opentripplanner/api/mapping/FareMapperTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/mapping/FareMapperTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.mapping; +package org.opentripplanner.ext.restapi.mapping; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.opentripplanner.model.plan.TestItineraryBuilder.newItinerary; @@ -6,7 +6,6 @@ import java.util.List; import java.util.Locale; import org.junit.jupiter.api.Test; -import org.opentripplanner.ext.restapi.mapping.FareMapper; import org.opentripplanner.model.fare.ItineraryFares; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.PlanTestConstants; diff --git a/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java similarity index 96% rename from src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java index 16e0ae1547e..fdcd0a7fe20 100644 --- a/src/test/java/org/opentripplanner/api/model/ApiApiTravelOptionsMakerTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiTravelOptionsMakerTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model; +package org.opentripplanner.ext.restapi.model; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -6,14 +6,12 @@ import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; -import org.opentripplanner.ext.restapi.model.ApiTravelOption; -import org.opentripplanner.ext.restapi.model.ApiTravelOptionsMaker; import org.opentripplanner.transit.model.basic.TransitMode; /** * Created by mabu on 28.7.2015. */ -public class ApiApiTravelOptionsMakerTest { +public class ApiTravelOptionsMakerTest { @Test public void testMakeOptions() throws Exception { diff --git a/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java similarity index 91% rename from src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java index fe265b05081..7f6909bfc2c 100644 --- a/src/test/java/org/opentripplanner/api/model/ApiWalkStepTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/model/ApiWalkStepTest.java @@ -1,10 +1,9 @@ -package org.opentripplanner.api.model; +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.ext.restapi.model.ApiWalkStep; public class ApiWalkStepTest { diff --git a/src/test/java/org/opentripplanner/api/parameter/ApiRequestModeTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java similarity index 69% rename from src/test/java/org/opentripplanner/api/parameter/ApiRequestModeTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java index caf26510b2a..13cfc43c59c 100644 --- a/src/test/java/org/opentripplanner/api/parameter/ApiRequestModeTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/ApiRequestModeTest.java @@ -1,10 +1,12 @@ -package org.opentripplanner.api.parameter; +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.Assertions; import org.junit.jupiter.api.Test; +import org.opentripplanner.api.parameter.ApiRequestMode; class ApiRequestModeTest { diff --git a/src/test/java/org/opentripplanner/api/parameter/QualifiedModeSetTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java similarity index 97% rename from src/test/java/org/opentripplanner/api/parameter/QualifiedModeSetTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java index ba5a39abe89..ad344713a74 100644 --- a/src/test/java/org/opentripplanner/api/parameter/QualifiedModeSetTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeSetTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.parameter; +package org.opentripplanner.ext.restapi.parameter; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -26,6 +26,8 @@ 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; diff --git a/src/test/java/org/opentripplanner/api/parameter/QualifiedModeTest.java b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java similarity index 82% rename from src/test/java/org/opentripplanner/api/parameter/QualifiedModeTest.java rename to src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java index e4c4c9448fc..3a682ba40c9 100644 --- a/src/test/java/org/opentripplanner/api/parameter/QualifiedModeTest.java +++ b/src/ext-test/java/org/opentripplanner/ext/restapi/parameter/QualifiedModeTest.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.parameter; +package org.opentripplanner.ext.restapi.parameter; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -6,6 +6,9 @@ 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 { diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java index 90fd12a1c7c..5bdda8a57a2 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/IndexAPI.java @@ -25,7 +25,7 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Envelope; -import org.opentripplanner.apis.common.SemanticHash; +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; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java index ac1ee80df95..0b6a06f0b5d 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java @@ -11,7 +11,7 @@ import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.common.Message; import org.opentripplanner.api.model.error.PlannerError; -import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; import org.opentripplanner.ext.restapi.mapping.TripPlanMapper; import org.opentripplanner.ext.restapi.mapping.TripSearchMetadataMapper; import org.opentripplanner.ext.restapi.model.ElevationMetadata; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java index 96093884a25..af2715d6928 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/VectorTilesResource.java @@ -17,7 +17,7 @@ import java.util.Objects; import java.util.function.Predicate; import org.glassfish.grizzly.http.server.Request; -import org.opentripplanner.apis.common.TileJson; +import org.opentripplanner.apis.support.TileJson; import org.opentripplanner.ext.vectortiles.layers.stations.StationsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.stops.StopsLayerBuilder; import org.opentripplanner.ext.vectortiles.layers.vehicleparkings.VehicleParkingGroupsLayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java index b7b21e01c38..a828cd37a7c 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/DigitransitStationPropertyMapper.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.stream.Collectors; import org.json.simple.JSONArray; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.framework.FeedScopedId; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java index 1b09d2e8c5d..449a1489d89 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stations/StationsLayerBuilder.java @@ -9,7 +9,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java index d2b72e36cd3..2c5a4519e96 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/DigitransitStopPropertyMapper.java @@ -8,7 +8,7 @@ import java.util.stream.Collectors; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.network.TripPattern; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java index e57e3e48cb0..6d15816669e 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/stops/StopsLayerBuilder.java @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java index 66cb6060ca9..33f415c157a 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingGroupPropertyMapper.java @@ -5,7 +5,7 @@ import java.util.Locale; import org.json.simple.JSONArray; import org.json.simple.JSONObject; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java index 27d2b78776b..892d4907395 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/DigitransitVehicleParkingPropertyMapper.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Locale; import javax.annotation.Nonnull; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.routing.vehicle_parking.VehicleParking; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java index 7ff573864a2..c938f9736fd 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/StadtnaviVehicleParkingPropertyMapper.java @@ -4,7 +4,7 @@ import java.util.List; import java.util.Locale; import org.json.simple.JSONObject; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.model.calendar.openinghours.OsmOpeningHoursSupport; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java index 59440b78ab7..0cd1d84868b 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingGroupsLayerBuilder.java @@ -8,7 +8,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java index 7a43044d40c..95326172415 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehicleparkings/VehicleParkingsLayerBuilder.java @@ -11,7 +11,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java index 06fecf26e57..0869aeb2ba8 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/VehicleRentalLayerBuilder.java @@ -7,7 +7,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.Point; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.ext.vectortiles.VectorTilesResource; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java index 87b5cf9e126..4ceb7124d52 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRealtimeVehicleRentalStationPropertyMapper.java @@ -7,7 +7,7 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalStation; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java index 1450b7855bd..33e661866bc 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitRentalVehiclePropertyMapper.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Collection; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalVehicle; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java index 90e553e6320..3114b072934 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalPropertyMapper.java @@ -3,7 +3,7 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; diff --git a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java index 6d82f592b38..67fb00efa85 100644 --- a/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java +++ b/src/ext/java/org/opentripplanner/ext/vectortiles/layers/vehiclerental/mapper/DigitransitVehicleRentalStationPropertyMapper.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Locale; import java.util.stream.Collectors; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.service.vehiclerental.model.VehicleRentalPlace; diff --git a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java b/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java index 89905298e66..8c50b2e3bdc 100644 --- a/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java +++ b/src/main/java/org/opentripplanner/api/resource/GraphInspectorVectorTileResource.java @@ -17,7 +17,7 @@ import java.util.Objects; import java.util.function.Predicate; import org.glassfish.grizzly.http.server.Request; -import org.opentripplanner.apis.common.TileJson; +import org.opentripplanner.apis.support.TileJson; import org.opentripplanner.inspector.vector.AreaStopsLayerBuilder; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java index 5c121a6dd07..88db00c3c4e 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PatternImpl.java @@ -13,10 +13,10 @@ import org.locationtech.jts.geom.Coordinate; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.apis.common.SemanticHash; import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; +import org.opentripplanner.apis.support.SemanticHash; import org.opentripplanner.framework.graphql.GraphQLUtils; import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.routing.alertpatch.EntitySelector; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java index 36dc4a987d8..b9bdfde9cbc 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/PlanImpl.java @@ -4,8 +4,8 @@ import graphql.schema.DataFetchingEnvironment; import java.util.stream.Collectors; import org.opentripplanner.api.resource.DebugOutput; -import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; +import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; import org.opentripplanner.model.plan.Itinerary; import org.opentripplanner.model.plan.StopArrival; import org.opentripplanner.model.plan.paging.cursor.PageCursor; diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java index d80db923df6..5c4bd7099c6 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/RoutingErrorImpl.java @@ -4,9 +4,9 @@ import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; -import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; import org.opentripplanner.apis.gtfs.generated.GraphQLTypes; +import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; import org.opentripplanner.routing.api.response.RoutingError; public class RoutingErrorImpl implements GraphQLDataFetchers.GraphQLRoutingError { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java index c9b1abdaa64..21bff637976 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/datafetchers/TripImpl.java @@ -15,7 +15,6 @@ import java.util.stream.Collectors; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; -import org.opentripplanner.apis.common.SemanticHash; import org.opentripplanner.apis.gtfs.GraphQLRequestContext; import org.opentripplanner.apis.gtfs.GraphQLUtils; import org.opentripplanner.apis.gtfs.generated.GraphQLDataFetchers; @@ -23,6 +22,7 @@ import org.opentripplanner.apis.gtfs.generated.GraphQLTypes.GraphQLBikesAllowed; import org.opentripplanner.apis.gtfs.mapping.BikesAllowedMapper; import org.opentripplanner.apis.gtfs.model.TripOccupancy; +import org.opentripplanner.apis.support.SemanticHash; import org.opentripplanner.framework.time.ServiceDateUtils; import org.opentripplanner.model.Timetable; import org.opentripplanner.model.TripTimeOnDate; diff --git a/src/main/java/org/opentripplanner/apis/common/SemanticHash.java b/src/main/java/org/opentripplanner/apis/support/SemanticHash.java similarity index 99% rename from src/main/java/org/opentripplanner/apis/common/SemanticHash.java rename to src/main/java/org/opentripplanner/apis/support/SemanticHash.java index 73ef2da906c..2d1f35977fa 100644 --- a/src/main/java/org/opentripplanner/apis/common/SemanticHash.java +++ b/src/main/java/org/opentripplanner/apis/support/SemanticHash.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common; +package org.opentripplanner.apis.support; import com.google.common.hash.HashCode; import com.google.common.hash.HashFunction; diff --git a/src/main/java/org/opentripplanner/apis/common/TileJson.java b/src/main/java/org/opentripplanner/apis/support/TileJson.java similarity index 97% rename from src/main/java/org/opentripplanner/apis/common/TileJson.java rename to src/main/java/org/opentripplanner/apis/support/TileJson.java index c9b3856e932..2259d72d828 100644 --- a/src/main/java/org/opentripplanner/apis/common/TileJson.java +++ b/src/main/java/org/opentripplanner/apis/support/TileJson.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common; +package org.opentripplanner.apis.support; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.UriInfo; diff --git a/src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java b/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java similarity index 97% rename from src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java rename to src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java index b85986c930b..a606cb75a52 100644 --- a/src/main/java/org/opentripplanner/apis/common/mapping/PlannerErrorMapper.java +++ b/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.mapping; +package org.opentripplanner.apis.support.mapping; import java.util.List; import org.opentripplanner.api.common.Message; diff --git a/src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java b/src/main/java/org/opentripplanner/apis/support/mapping/PropertyMapper.java similarity index 96% rename from src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java rename to src/main/java/org/opentripplanner/apis/support/mapping/PropertyMapper.java index ad2868239a8..dfb7def85c7 100644 --- a/src/main/java/org/opentripplanner/apis/common/mapping/PropertyMapper.java +++ b/src/main/java/org/opentripplanner/apis/support/mapping/PropertyMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.apis.common.mapping; +package org.opentripplanner.apis.support.mapping; import edu.colorado.cires.cmg.mvt.VectorTile; import edu.colorado.cires.cmg.mvt.adapt.jts.IUserDataConverter; diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java index a8ae74dede2..215e1983ca0 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/RoutingErrorType.java @@ -7,7 +7,7 @@ import graphql.schema.GraphQLFieldDefinition; import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLObjectType; -import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; public class RoutingErrorType { diff --git a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java index fcf794a7ca8..053b261c08e 100644 --- a/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java +++ b/src/main/java/org/opentripplanner/apis/transmodel/model/plan/TripType.java @@ -8,7 +8,7 @@ import graphql.schema.GraphQLNonNull; import graphql.schema.GraphQLObjectType; import java.util.stream.Collectors; -import org.opentripplanner.apis.common.mapping.PlannerErrorMapper; +import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; import org.opentripplanner.apis.transmodel.model.PlanResponse; import org.opentripplanner.apis.transmodel.support.GqlUtil; import org.opentripplanner.framework.graphql.GraphQLUtils; diff --git a/src/ext/java/org/opentripplanner/framework/i18n/I18NStringMapper.java b/src/main/java/org/opentripplanner/framework/i18n/I18NStringMapper.java similarity index 100% rename from src/ext/java/org/opentripplanner/framework/i18n/I18NStringMapper.java rename to src/main/java/org/opentripplanner/framework/i18n/I18NStringMapper.java diff --git a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java index 5f268d9f9bf..5e4539e1f5c 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/AreaStopsLayerBuilder.java @@ -7,7 +7,7 @@ import java.util.function.Function; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TransitService; diff --git a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java index fb50a25fd33..63c58dd9b05 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/DebugClientAreaStopPropertyMapper.java @@ -3,7 +3,7 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.service.TransitService; diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java index cec59ef136f..949bbef0a94 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerBuilder.java @@ -10,7 +10,7 @@ import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.GeometryFactory; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.geometry.GeometryUtils; /** diff --git a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java index a36fdfad840..ca4a6a64c76 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java +++ b/src/main/java/org/opentripplanner/inspector/vector/LayerParameters.java @@ -1,6 +1,6 @@ package org.opentripplanner.inspector.vector; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; /** * Configuration options for a single vector tile layer. diff --git a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java index 3948f95e8ee..1764451cc89 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesLayerBuilder.java @@ -4,7 +4,7 @@ import java.util.Map; import org.locationtech.jts.geom.Envelope; import org.locationtech.jts.geom.Geometry; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.framework.geometry.GeometryUtils; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; diff --git a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java index 7321727076c..98c9cf23eca 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/geofencing/GeofencingZonesPropertyMapper.java @@ -6,7 +6,7 @@ import java.util.Collection; import java.util.List; -import org.opentripplanner.apis.common.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.street.model.vertex.Vertex; From 154cfe970b17c5b3bcb08bf47335e4592aec7819 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:06:15 +0100 Subject: [PATCH 063/103] Move PlannerError back --- .../opentripplanner/ext/restapi/model/TripPlannerResponse.java | 2 +- .../opentripplanner/ext/restapi/resources/PlannerResource.java | 2 +- .../java/org/opentripplanner/api}/error/PlannerError.java | 2 +- .../apis/support/mapping/PlannerErrorMapper.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/{ext/java/org/opentripplanner/ext/restapi/model => main/java/org/opentripplanner/api}/error/PlannerError.java (94%) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java b/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java index 337301cddfd..28cce2dd669 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/model/TripPlannerResponse.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; -import org.opentripplanner.api.model.error.PlannerError; +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 */ diff --git a/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java index 0b6a06f0b5d..38c70851b76 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/resources/PlannerResource.java @@ -10,7 +10,7 @@ import jakarta.ws.rs.core.UriInfo; import org.glassfish.grizzly.http.server.Request; import org.opentripplanner.api.common.Message; -import org.opentripplanner.api.model.error.PlannerError; +import org.opentripplanner.api.error.PlannerError; import org.opentripplanner.apis.support.mapping.PlannerErrorMapper; import org.opentripplanner.ext.restapi.mapping.TripPlanMapper; import org.opentripplanner.ext.restapi.mapping.TripSearchMetadataMapper; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/error/PlannerError.java b/src/main/java/org/opentripplanner/api/error/PlannerError.java similarity index 94% rename from src/ext/java/org/opentripplanner/ext/restapi/model/error/PlannerError.java rename to src/main/java/org/opentripplanner/api/error/PlannerError.java index a41a3f6148a..1a35275a7cd 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/model/error/PlannerError.java +++ b/src/main/java/org/opentripplanner/api/error/PlannerError.java @@ -1,4 +1,4 @@ -package org.opentripplanner.api.model.error; +package org.opentripplanner.api.error; import java.util.List; import org.opentripplanner.api.common.Message; diff --git a/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java b/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java index a606cb75a52..9ec662f51e0 100644 --- a/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java +++ b/src/main/java/org/opentripplanner/apis/support/mapping/PlannerErrorMapper.java @@ -2,7 +2,7 @@ import java.util.List; import org.opentripplanner.api.common.Message; -import org.opentripplanner.api.model.error.PlannerError; +import org.opentripplanner.api.error.PlannerError; import org.opentripplanner.routing.api.response.InputField; import org.opentripplanner.routing.api.response.RoutingError; From 8a8856b5b130e478b8d1ad89daa9ed24ed24c44c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:09:02 +0100 Subject: [PATCH 064/103] Update src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java Co-authored-by: Thomas Gran --- .../org/opentripplanner/routing/error/PathNotFoundException.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java index f0a2c854015..8776cb81c00 100644 --- a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java +++ b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java @@ -6,6 +6,5 @@ * Indicates that the call to org.opentripplanner.routing.services.PathService returned either null * or ZERO paths. * - * @see PlannerResource for where this is (locally) thrown. */ public class PathNotFoundException extends RuntimeException {} From 360b16594bc06ffce12adc7e61179a8a659a4bf5 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:09:12 +0100 Subject: [PATCH 065/103] Update src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java Co-authored-by: Thomas Gran --- .../opentripplanner/routing/error/PathNotFoundException.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java index 8776cb81c00..a4071f9911e 100644 --- a/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java +++ b/src/main/java/org/opentripplanner/routing/error/PathNotFoundException.java @@ -1,7 +1,5 @@ package org.opentripplanner.routing.error; -import org.opentripplanner.ext.restapi.resources.PlannerResource; - /** * Indicates that the call to org.opentripplanner.routing.services.PathService returned either null * or ZERO paths. From 7fdb6958bc8acdd95a91b59ea5bf6f9517d2ccdb Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:12:21 +0100 Subject: [PATCH 066/103] Move StreetNoteMapper into apis.support --- .../org/opentripplanner/ext/restapi/mapping/LegMapper.java | 5 +++-- .../opentripplanner/ext/restapi/mapping/WalkStepMapper.java | 5 +++-- .../opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java | 3 +-- .../apis/support/mapping/StreetNoteMapper.java} | 6 +++--- 4 files changed, 10 insertions(+), 9 deletions(-) rename src/{ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java => main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java} (89%) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java index f16a9e8fbf5..766262bca89 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/LegMapper.java @@ -7,6 +7,7 @@ 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; @@ -19,7 +20,7 @@ public class LegMapper { private final WalkStepMapper walkStepMapper; - private final StreetNoteMaperMapper streetNoteMaperMapper; + private final StreetNoteMapper streetNoteMaperMapper; private final AlertMapper alertMapper; private final PlaceMapper placeMapper; private final boolean addIntermediateStops; @@ -28,7 +29,7 @@ public class LegMapper { public LegMapper(Locale locale, boolean addIntermediateStops) { this.walkStepMapper = new WalkStepMapper(locale); - this.streetNoteMaperMapper = new StreetNoteMaperMapper(locale); + this.streetNoteMaperMapper = new StreetNoteMapper(locale); this.alertMapper = new AlertMapper(locale); this.placeMapper = new PlaceMapper(locale); this.addIntermediateStops = addIntermediateStops; diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java index fba316d32ba..c5c59e4dc37 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java +++ b/src/ext/java/org/opentripplanner/ext/restapi/mapping/WalkStepMapper.java @@ -7,17 +7,18 @@ 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 StreetNoteMaperMapper alertsMapper; + private final StreetNoteMapper alertsMapper; private final Locale locale; public WalkStepMapper(Locale locale) { this.locale = locale; - this.alertsMapper = new StreetNoteMaperMapper(locale); + this.alertsMapper = new StreetNoteMapper(locale); } public List mapWalkSteps(Collection domain) { diff --git a/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java b/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java index 572535a540d..563200dbba0 100644 --- a/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java +++ b/src/main/java/org/opentripplanner/apis/gtfs/mapping/StreetNoteMapper.java @@ -1,6 +1,5 @@ package org.opentripplanner.apis.gtfs.mapping; -import org.opentripplanner.ext.restapi.mapping.StreetNoteMaperMapper; import org.opentripplanner.framework.i18n.NonLocalizedString; import org.opentripplanner.routing.alertpatch.TimePeriod; import org.opentripplanner.routing.alertpatch.TransitAlert; @@ -11,7 +10,7 @@ public class StreetNoteMapper { /** - * Similar to {@link StreetNoteMaperMapper ::mapToApi}. + * 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 diff --git a/src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java b/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java similarity index 89% rename from src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java rename to src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java index 62926eb6e18..9cde403c2ed 100644 --- a/src/ext/java/org/opentripplanner/ext/restapi/mapping/StreetNoteMaperMapper.java +++ b/src/main/java/org/opentripplanner/apis/support/mapping/StreetNoteMapper.java @@ -1,4 +1,4 @@ -package org.opentripplanner.ext.restapi.mapping; +package org.opentripplanner.apis.support.mapping; import java.util.List; import java.util.Locale; @@ -7,11 +7,11 @@ import org.opentripplanner.ext.restapi.model.ApiAlert; import org.opentripplanner.street.model.note.StreetNote; -public class StreetNoteMaperMapper { +public class StreetNoteMapper { private final Locale locale; - public StreetNoteMaperMapper(Locale locale) { + public StreetNoteMapper(Locale locale) { this.locale = locale; } From 57fc58844a49a252ca85d10b0e662a014d0a5cd3 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Fri, 5 Jan 2024 23:14:25 +0100 Subject: [PATCH 067/103] Move resources into sandbox section --- .../java/org/opentripplanner/apis/APIEndpoints.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/APIEndpoints.java b/src/main/java/org/opentripplanner/apis/APIEndpoints.java index 04a0e3a145a..fc49c02431f 100644 --- a/src/main/java/org/opentripplanner/apis/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/apis/APIEndpoints.java @@ -46,11 +46,6 @@ public class APIEndpoints { private APIEndpoints() { // Add feature enabled APIs, these can be enabled by default, some is not. // See the OTPFeature enum for details. - addIfEnabled(LegacyRestApi, Routers.class); - addIfEnabled(LegacyRestApi, PlannerResource.class); - addIfEnabled(LegacyRestApi, IndexAPI.class); - - addIfEnabled(APIBikeRental, BikeRental.class); addIfEnabled(APIGraphInspectorTile, GraphInspectorTileResource.class); addIfEnabled(APIGraphInspectorTile, GraphInspectorVectorTileResource.class); addIfEnabled(APIServerInfo, ServerInfo.class); @@ -65,6 +60,12 @@ private APIEndpoints() { addIfEnabled(SandboxAPIParkAndRideApi, ParkAndRideResource.class); addIfEnabled(SandboxAPIGeocoder, GeocoderResource.class); addIfEnabled(SandboxAPITravelTime, TravelTimeResource.class); + + // scheduled to be removed + addIfEnabled(APIBikeRental, BikeRental.class); + addIfEnabled(LegacyRestApi, Routers.class); + addIfEnabled(LegacyRestApi, PlannerResource.class); + addIfEnabled(LegacyRestApi, IndexAPI.class); } /** From be3c3dfaac3c7ea813f244cb2335d22356f5684b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:23:29 +0000 Subject: [PATCH 068/103] fix(deps): update dependency ch.poole:openinghoursparser to v0.28.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a3cb501143..5db640f8230 100644 --- a/pom.xml +++ b/pom.xml @@ -944,7 +944,7 @@ ch.poole OpeningHoursParser - 0.28.0 + 0.28.1 From 424e35574a8f576eb04acbd222318df151f5de06 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:23:35 +0000 Subject: [PATCH 069/103] fix(deps): update jackson.version to v2.16.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a3cb501143..119e21dd415 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ 30.1 2.50 - 2.16.0 + 2.16.1 3.1.5 5.10.1 1.11.5 From 79e30bc4624623d9e203dd61bc7d774b98f1c5f3 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Mon, 8 Jan 2024 14:10:56 +0000 Subject: [PATCH 070/103] Add changelog entry for #5562 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 1d4e54da8d7..e46b15cbd0f 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -68,6 +68,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Fix preference cost comparisons [#5586](https://github.com/opentripplanner/OpenTripPlanner/pull/5586) - Report and throw away trip-times which fail sanity check [#5587](https://github.com/opentripplanner/OpenTripPlanner/pull/5587) - Consider escalator edges in island pruning [#5591](https://github.com/opentripplanner/OpenTripPlanner/pull/5591) +- Create own rental preferences for bike and car in the internal model [#5562](https://github.com/opentripplanner/OpenTripPlanner/pull/5562) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 5c7576d3f3959cccb6d9a4c428ac5a8b1df7a37b Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Mon, 8 Jan 2024 14:11:19 +0000 Subject: [PATCH 071/103] Bump serialization version id for #5562 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a3cb501143..204a6b2a599 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 134 + 135 30.1 2.50 From b9787149de1e629ea0e2a348b7a3383b9f3d0c24 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 15:12:11 +0000 Subject: [PATCH 072/103] chore(deps): update micrometer.version to v1.12.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e248f08e2e..02f3ea1722a 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ 2.16.1 3.1.5 5.10.1 - 1.11.5 + 1.12.1 5.5.3 1.4.14 9.8.0 From 725537724af1bd1329e00c89803ad19ebed0a2db Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 09:56:12 +0100 Subject: [PATCH 073/103] Make configuration page more compliant with mkdocs-material [ci skip] --- doc-templates/Configuration.md | 18 +++++++++--------- docs/Configuration.md | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/doc-templates/Configuration.md b/doc-templates/Configuration.md index 003fe28d794..eabd4895a1f 100644 --- a/doc-templates/Configuration.md +++ b/doc-templates/Configuration.md @@ -176,7 +176,7 @@ The result will look like this: } ``` -# System-wide Configuration +## System-wide Configuration Using the file `otp-config.json` you can enable or disable different APIs and experimental [Sandbox Extensions](SandboxExtension.md). By default, all supported APIs are enabled and all @@ -185,7 +185,7 @@ Features that can be toggled in this file are generally only affect the routing but for consistency all such "feature flags", even those that would affect graph building, are managed in this one file. -## OTP Features +### OTP Features Here is a list of all features which can be toggled on/off and their default values. @@ -205,7 +205,7 @@ Here is a list of all features which can be toggled on/off and their default val ``` -# JVM configuration +## JVM configuration This section contains general recommendations for tuning the JVM in a production environment. It focuses mainly on garbage collection configuration and memory settings. @@ -213,19 +213,19 @@ See [Garbage Collector Tuning](https://docs.oracle.com/en/java/javase/17/gctunin See [Large Pages in Java](https://kstefanj.github.io/2021/05/19/large-pages-and-java.html) and [Transparent Huge Pages](https://shipilev.net/jvm/anatomy-quarks/2-transparent-huge-pages) for general information on large memory pages. -## OTP server +### OTP server The OTP server processes concurrent routing requests in real time. The main optimization goal for the OTP server is minimizing response time. -### Garbage collector +#### Garbage collector - The G1 garbage collector (default since Java 9) offers a good compromise between low latency (i.e. low GC pause time) and GC overhead. - If latency spikes are an issue, the ZGC garbage collector is an alternative. It produces in general more overhead than G1. -### Memory settings +#### Memory settings - Using Large Memory Pages can reduce pressure on the TLB cache and increase performance. - It is in general not recommended to use large memory page in _Transparent Huge Page_ mode (`-XX:+UseTransparentHugePages`) for latency-sensitive applications, since memory is allocated on-demand and this can induce latency spikes if the memory is fragmented. @@ -235,20 +235,20 @@ The physical memory can be committed upfront, at JVM startup time. This can be d Example: `-Xms18g -Xmx18g -XX:+UseTransparentHugePages -XX:+AlwaysPreTouch` -## Graph Builder +### Graph Builder The Graph Builder is the non-interactive mode used to build street graphs and transit graphs. The main optimization goal for the Graph Builder is minimizing total build time. -### Garbage collector +#### Garbage collector - In theory, the Parallel garbage collector offers the best throughput. In practice, it can be challenging to optimize the Parallel GC to build both a street graph and a transit graph, the memory usage patterns being different. - The G1 garbage collector provides in general a good compromise. -### Memory settings +#### Memory settings - Using Large Memory Pages can reduce pressure on the TLB cache and increase performance. - Since latency is not an issue, Large Memory Pages can be used indifferently in _TLBFS_ mode (`-XX:+UseHugeTLBFS`) or _Transparent Huge Page_ mode (`-XX:+UseTransparentHugePages`) diff --git a/docs/Configuration.md b/docs/Configuration.md index f1c0af287ab..d4803da0a56 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -203,7 +203,7 @@ The result will look like this: } ``` -# System-wide Configuration +## System-wide Configuration Using the file `otp-config.json` you can enable or disable different APIs and experimental [Sandbox Extensions](SandboxExtension.md). By default, all supported APIs are enabled and all @@ -212,7 +212,7 @@ Features that can be toggled in this file are generally only affect the routing but for consistency all such "feature flags", even those that would affect graph building, are managed in this one file. -## OTP Features +### OTP Features Here is a list of all features which can be toggled on/off and their default values. @@ -268,7 +268,7 @@ Here is a list of all features which can be toggled on/off and their default val ``` -# JVM configuration +## JVM configuration This section contains general recommendations for tuning the JVM in a production environment. It focuses mainly on garbage collection configuration and memory settings. @@ -276,19 +276,19 @@ See [Garbage Collector Tuning](https://docs.oracle.com/en/java/javase/17/gctunin See [Large Pages in Java](https://kstefanj.github.io/2021/05/19/large-pages-and-java.html) and [Transparent Huge Pages](https://shipilev.net/jvm/anatomy-quarks/2-transparent-huge-pages) for general information on large memory pages. -## OTP server +### OTP server The OTP server processes concurrent routing requests in real time. The main optimization goal for the OTP server is minimizing response time. -### Garbage collector +#### Garbage collector - The G1 garbage collector (default since Java 9) offers a good compromise between low latency (i.e. low GC pause time) and GC overhead. - If latency spikes are an issue, the ZGC garbage collector is an alternative. It produces in general more overhead than G1. -### Memory settings +#### Memory settings - Using Large Memory Pages can reduce pressure on the TLB cache and increase performance. - It is in general not recommended to use large memory page in _Transparent Huge Page_ mode (`-XX:+UseTransparentHugePages`) for latency-sensitive applications, since memory is allocated on-demand and this can induce latency spikes if the memory is fragmented. @@ -298,20 +298,20 @@ The physical memory can be committed upfront, at JVM startup time. This can be d Example: `-Xms18g -Xmx18g -XX:+UseTransparentHugePages -XX:+AlwaysPreTouch` -## Graph Builder +### Graph Builder The Graph Builder is the non-interactive mode used to build street graphs and transit graphs. The main optimization goal for the Graph Builder is minimizing total build time. -### Garbage collector +#### Garbage collector - In theory, the Parallel garbage collector offers the best throughput. In practice, it can be challenging to optimize the Parallel GC to build both a street graph and a transit graph, the memory usage patterns being different. - The G1 garbage collector provides in general a good compromise. -### Memory settings +#### Memory settings - Using Large Memory Pages can reduce pressure on the TLB cache and increase performance. - Since latency is not an issue, Large Memory Pages can be used indifferently in _TLBFS_ mode (`-XX:+UseHugeTLBFS`) or _Transparent Huge Page_ mode (`-XX:+UseTransparentHugePages`) From bed4effd5ea740572583055ea1385c37381e7765 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 12:31:29 +0100 Subject: [PATCH 074/103] Rename the feature flag DebugClient to DebugUi, remove separate one for the debug tiles --- docs/Configuration.md | 63 +++++++++---------- .../api/configuration/APIEndpoints.java | 6 +- .../framework/application/OTPFeature.java | 23 ++++--- .../standalone/server/GrizzlyServer.java | 2 +- 4 files changed, 50 insertions(+), 44 deletions(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index f1c0af287ab..7a81e68fb4a 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -219,38 +219,37 @@ Here is a list of all features which can be toggled on/off and their default val -| Feature | Description | Enabled by default | Sandbox | -|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------:|:-------:| -| `APIBikeRental` | Enable the bike rental endpoint. | ✓️ | | -| `APIServerInfo` | Enable the server info endpoint. | ✓️ | | -| `APIGraphInspectorTile` | Enable the inspector endpoint for graph information for inspection/debugging purpose. | ✓️ | | -| `APIUpdaterStatus` | Enable endpoint for graph updaters status. | ✓️ | | -| `ConsiderPatternsForDirectTransfers` | Enable limiting transfers so that there is only a single transfer to each pattern. | ✓️ | | -| `DebugClient` | Enable the debug web client located at the root of the web server. | ✓️ | | -| `FloatingBike` | Enable floating bike routing. | ✓️ | | -| `GtfsGraphQlApi` | Enable GTFS GraphQL API. | ✓️ | | -| `GtfsGraphQlApiRentalStationFuzzyMatching` | Does vehicleRentalStation query also allow ids that are not feed scoped. | | | -| `MinimumTransferTimeIsDefinitive` | If the minimum transfer time is a lower bound (default) or the definitive time for the transfer. Set this to `true` if you want to set a transfer time lower than what OTP derives from OSM data. | | | -| `OptimizeTransfers` | OTP will inspect all itineraries found and optimize where (which stops) the transfer will happen. Waiting time, priority and guaranteed transfers are taken into account. | ✓️ | | -| `ParallelRouting` | Enable performing parts of the trip planning in parallel. | | | -| `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little. | ✓️ | | -| `TransmodelGraphQlApi` | Enable Transmodel (NeTEx) GraphQL API. | ✓️ | ✓️ | -| `ActuatorAPI` | Endpoint for actuators (service health status). | | ✓️ | -| `AsyncGraphQLFetchers` | Whether the @async annotation in the GraphQL schema should lead to the fetch being executed asynchronously. This allows batch or alias queries to run in parallel at the cost of consuming extra threads. | | | -| `Co2Emissions` | Enable the emissions sandbox module. | | ✓️ | -| `DataOverlay` | Enable usage of data overlay when calculating costs for the street network. | | ✓️ | -| `FaresV2` | Enable import of GTFS-Fares v2 data. | | ✓️ | -| `FlexRouting` | Enable FLEX routing. | | ✓️ | -| `GoogleCloudStorage` | Enable Google Cloud Storage integration. | | ✓️ | -| `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. | | ✓️ | -| `SandboxAPITravelTime` | Enable the isochrone/travel time surface API. | | ✓️ | -| `TransferAnalyzer` | Analyze transfers during graph build. | | ✓️ | -| `VehicleToStopHeuristics` | Enable improved heuristic for park-and-ride queries. | | ✓️ | +| Feature | Description | Enabled by default | Sandbox | +|--------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:------------------:|:-------:| +| `APIBikeRental` | Enable the bike rental endpoint. | ✓️ | | +| `APIServerInfo` | Enable the server info endpoint. | ✓️ | | +| `APIUpdaterStatus` | Enable endpoint for graph updaters status. | ✓️ | | +| `ConsiderPatternsForDirectTransfers` | Enable limiting transfers so that there is only a single transfer to each pattern. | ✓️ | | +| `DebugUi` | Enable the debug GraphQL client and web UI and located at the root of the web server as well as the debug map tiles it uses. Be aware that the map tiles are not a stable API and can change without notice. Use the [vector tiles feature if](sandbox/MapboxVectorTilesApi.md) you want a stable map tiles API. | ✓️ | | +| `FloatingBike` | Enable floating bike routing. | ✓️ | | +| `GtfsGraphQlApi` | Enable the [GTFS GraphQL API](apis/GTFS-GraphQL-API.md). | ✓️ | | +| `GtfsGraphQlApiRentalStationFuzzyMatching` | Does vehicleRentalStation query also allow ids that are not feed scoped. | | | +| `MinimumTransferTimeIsDefinitive` | If the minimum transfer time is a lower bound (default) or the definitive time for the transfer. Set this to `true` if you want to set a transfer time lower than what OTP derives from OSM data. | | | +| `OptimizeTransfers` | OTP will inspect all itineraries found and optimize where (which stops) the transfer will happen. Waiting time, priority and guaranteed transfers are taken into account. | ✓️ | | +| `ParallelRouting` | Enable performing parts of the trip planning in parallel. | | | +| `TransferConstraints` | Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little. | ✓️ | | +| `TransmodelGraphQlApi` | Enable the [Transmodel (NeTEx) GraphQL API](apis/TransmodelApi.md). | ✓️ | ✓️ | +| `ActuatorAPI` | Endpoint for actuators (service health status). | | ✓️ | +| `AsyncGraphQLFetchers` | Whether the @async annotation in the GraphQL schema should lead to the fetch being executed asynchronously. This allows batch or alias queries to run in parallel at the cost of consuming extra threads. | | | +| `Co2Emissions` | Enable the emissions sandbox module. | | ✓️ | +| `DataOverlay` | Enable usage of data overlay when calculating costs for the street network. | | ✓️ | +| `FaresV2` | Enable import of GTFS-Fares v2 data. | | ✓️ | +| `FlexRouting` | Enable FLEX routing. | | ✓️ | +| `GoogleCloudStorage` | Enable Google Cloud Storage integration. | | ✓️ | +| `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. | | ✓️ | +| `SandboxAPITravelTime` | Enable the isochrone/travel time surface API. | | ✓️ | +| `TransferAnalyzer` | Analyze transfers during graph build. | | ✓️ | +| `VehicleToStopHeuristics` | Enable improved heuristic for park-and-ride queries. | | ✓️ | diff --git a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java b/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java index 64bbb2896a2..79556302f04 100644 --- a/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java +++ b/src/main/java/org/opentripplanner/api/configuration/APIEndpoints.java @@ -1,10 +1,10 @@ package org.opentripplanner.api.configuration; import static org.opentripplanner.framework.application.OTPFeature.APIBikeRental; -import static org.opentripplanner.framework.application.OTPFeature.APIGraphInspectorTile; 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.DebugUi; import static org.opentripplanner.framework.application.OTPFeature.GtfsGraphQlApi; import static org.opentripplanner.framework.application.OTPFeature.ReportApi; import static org.opentripplanner.framework.application.OTPFeature.SandboxAPIGeocoder; @@ -51,10 +51,10 @@ private APIEndpoints() { // Add feature enabled APIs, these can be enabled by default, some is not. // See the OTPFeature enum for details. addIfEnabled(APIBikeRental, BikeRental.class); - addIfEnabled(APIGraphInspectorTile, GraphInspectorTileResource.class); - addIfEnabled(APIGraphInspectorTile, GraphInspectorVectorTileResource.class); addIfEnabled(APIServerInfo, ServerInfo.class); addIfEnabled(APIUpdaterStatus, UpdaterStatusResource.class); + addIfEnabled(DebugUi, GraphInspectorTileResource.class); + addIfEnabled(DebugUi, GraphInspectorVectorTileResource.class); addIfEnabled(GtfsGraphQlApi, GtfsGraphQLAPI.class); addIfEnabled(TransmodelGraphQlApi, TransmodelAPI.class); diff --git a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java index 05d1284a883..308710ef5a0 100644 --- a/src/main/java/org/opentripplanner/framework/application/OTPFeature.java +++ b/src/main/java/org/opentripplanner/framework/application/OTPFeature.java @@ -16,20 +16,23 @@ public enum OTPFeature { APIBikeRental(true, false, "Enable the bike rental endpoint."), APIServerInfo(true, false, "Enable the server info endpoint."), - APIGraphInspectorTile( - true, - false, - "Enable the inspector endpoint for graph information for inspection/debugging purpose." - ), APIUpdaterStatus(true, false, "Enable endpoint for graph updaters status."), ConsiderPatternsForDirectTransfers( true, false, "Enable limiting transfers so that there is only a single transfer to each pattern." ), - DebugClient(true, false, "Enable the debug web client located at the root of the web server."), + DebugUi( + true, + false, + """ + Enable the debug GraphQL client and web UI and located at the root of the web server as well as the debug map tiles it uses. + Be aware that the map tiles are not a stable API and can change without notice. + Use the [vector tiles feature if](sandbox/MapboxVectorTilesApi.md) you want a stable map tiles API. + """ + ), FloatingBike(true, false, "Enable floating bike routing."), - GtfsGraphQlApi(true, false, "Enable GTFS GraphQL API."), + GtfsGraphQlApi(true, false, "Enable the [GTFS GraphQL API](apis/GTFS-GraphQL-API.md)."), GtfsGraphQlApiRentalStationFuzzyMatching( false, false, @@ -63,7 +66,11 @@ public enum OTPFeature { false, "Enforce transfers to happen according to the _transfers.txt_ (GTFS) and Interchanges (NeTEx). Turning this _off_ will increase the routing performance a little." ), - TransmodelGraphQlApi(true, true, "Enable Transmodel (NeTEx) GraphQL API."), + TransmodelGraphQlApi( + true, + true, + "Enable the [Transmodel (NeTEx) GraphQL API](apis/TransmodelApi.md)." + ), /* Sandbox extension features - Must be turned OFF by default */ diff --git a/src/main/java/org/opentripplanner/standalone/server/GrizzlyServer.java b/src/main/java/org/opentripplanner/standalone/server/GrizzlyServer.java index c422e9c24f3..7dc7c87f735 100644 --- a/src/main/java/org/opentripplanner/standalone/server/GrizzlyServer.java +++ b/src/main/java/org/opentripplanner/standalone/server/GrizzlyServer.java @@ -102,7 +102,7 @@ public void run() { httpServer.getServerConfiguration().addHttpHandler(dynamicHandler, "/otp/"); /* 2. A static content handler to serve the client JS apps etc. from the classpath. */ - if (OTPFeature.DebugClient.isOn()) { + if (OTPFeature.DebugUi.isOn()) { CLStaticHttpHandler staticHandler = new CLStaticHttpHandler( GrizzlyServer.class.getClassLoader(), "/client/" From 4b9889101a59b4cfce3704a7e6e23db8315f7b25 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 12:49:06 +0100 Subject: [PATCH 075/103] Update comment --- .../inspector/vector/stop/StopLayerBuilder.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java index 40784ab5b3b..70ce6a58735 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLayerBuilder.java @@ -8,11 +8,14 @@ import org.locationtech.jts.geom.Geometry; import org.opentripplanner.inspector.vector.LayerBuilder; import org.opentripplanner.inspector.vector.LayerParameters; +import org.opentripplanner.transit.model.site.AreaStop; import org.opentripplanner.transit.model.site.RegularStop; import org.opentripplanner.transit.model.site.StopLocation; /** - * A vector tile layer containing all {@link RegularStop}s inside the vector tile bounds. + * A vector tile layer for {@link StopLocation}s inside the vector tile bounds. These can be further + * filtered to get only a subset of stop implementations like {@link RegularStop} + * or {@link AreaStop}. */ public class StopLayerBuilder extends LayerBuilder { From 2b65d5702838d92a71a84923fb81afd8eb765a5c Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 13:14:20 +0100 Subject: [PATCH 076/103] Make mapStyle configurable --- client-next/.env | 3 ++- client-next/.env.development | 3 ++- client-next/src/components/MapView/MapView.tsx | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/client-next/.env b/client-next/.env index 003970b4e1f..e8a9667bc23 100644 --- a/client-next/.env +++ b/client-next/.env @@ -1 +1,2 @@ -VITE_API_URL=/otp/routers/default/transmodel/index/graphql \ No newline at end of file +VITE_API_URL=/otp/routers/default/transmodel/index/graphql +VITE_DEBUG_STYLE_URL=/otp/routers/default/inspector/vectortile/style.json diff --git a/client-next/.env.development b/client-next/.env.development index e11b45c4411..b10ac31fdf9 100644 --- a/client-next/.env.development +++ b/client-next/.env.development @@ -1 +1,2 @@ -VITE_API_URL=http://localhost:8080/otp/routers/default/transmodel/index/graphql \ No newline at end of file +VITE_API_URL=http://localhost:8080/otp/routers/default/transmodel/index/graphql +VITE_DEBUG_STYLE_URL=http://localhost:8080/otp/routers/default/inspector/vectortile/style.json \ No newline at end of file diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 95c898c4a28..e401b1756e6 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -15,6 +15,8 @@ const initialViewState = { zoom: 4, }; +const styleUrl = import.meta.env.VITE_DEBUG_STYLE_URL; + type PopupData = { coordinates: LngLat; feature: MapboxGeoJSONFeature }; export function MapView({ @@ -40,7 +42,7 @@ export function MapView({ // @ts-ignore mapLib={import('maplibre-gl')} // @ts-ignore - mapStyle="http://localhost:8080/otp/routers/default/inspector/vectortile/style.json" + mapStyle={styleUrl} initialViewState={initialViewState} onDblClick={onMapDoubleClick} onContextMenu={(e) => { From 756a2890d67f805111250364d6822962fb0c7ae9 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 13:16:58 +0100 Subject: [PATCH 077/103] Use proper copyright symbol --- .../org/opentripplanner/apis/vectortiles/DebugStyleSpec.java | 2 +- .../resources/org/opentripplanner/apis/vectortiles/style.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java index 9a4fe9be123..ff933901cf8 100644 --- a/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java +++ b/src/main/java/org/opentripplanner/apis/vectortiles/DebugStyleSpec.java @@ -17,7 +17,7 @@ public class DebugStyleSpec { "background", List.of("https://a.tile.openstreetmap.org/{z}/{x}/{y}.png"), 256, - "© OpenStreetMap Contributors" + "© OpenStreetMap Contributors" ); public record VectorSourceLayer(VectorSource vectorSource, String vectorLayer) {} diff --git a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json index 6f95471a667..f5bb18f6f6a 100644 --- a/src/test/resources/org/opentripplanner/apis/vectortiles/style.json +++ b/src/test/resources/org/opentripplanner/apis/vectortiles/style.json @@ -7,7 +7,7 @@ "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png" ], "tileSize": 256, - "attribution" : "© OpenStreetMap Contributors", + "attribution" : "© OpenStreetMap Contributors", "type": "raster" }, "vectorSource": { From 57bc7a3d4ae38445c8277763770e5a279392c96d Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Tue, 9 Jan 2024 15:02:54 +0000 Subject: [PATCH 078/103] Add changelog entry for #5592 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index e46b15cbd0f..9f755bd8f8f 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -69,6 +69,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Report and throw away trip-times which fail sanity check [#5587](https://github.com/opentripplanner/OpenTripPlanner/pull/5587) - Consider escalator edges in island pruning [#5591](https://github.com/opentripplanner/OpenTripPlanner/pull/5591) - Create own rental preferences for bike and car in the internal model [#5562](https://github.com/opentripplanner/OpenTripPlanner/pull/5562) +- Adding situation-version to TransmodelGraphQL API [#5592](https://github.com/opentripplanner/OpenTripPlanner/pull/5592) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From cdc09ca6e59bce534e4c4759955bfd902dec87f0 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 9 Jan 2024 17:16:31 +0100 Subject: [PATCH 079/103] Move server info classes back into main code --- .../org/opentripplanner/api}/model/serverinfo/ApiConfigInfo.java | 0 .../opentripplanner/api}/model/serverinfo/ApiProjectVersion.java | 0 .../org/opentripplanner/api}/model/serverinfo/ApiServerInfo.java | 0 .../api}/model/serverinfo/ApiVersionControlInfo.java | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename src/{ext/java/org/opentripplanner/ext/restapi => main/java/org/opentripplanner/api}/model/serverinfo/ApiConfigInfo.java (100%) rename src/{ext/java/org/opentripplanner/ext/restapi => main/java/org/opentripplanner/api}/model/serverinfo/ApiProjectVersion.java (100%) rename src/{ext/java/org/opentripplanner/ext/restapi => main/java/org/opentripplanner/api}/model/serverinfo/ApiServerInfo.java (100%) rename src/{ext/java/org/opentripplanner/ext/restapi => main/java/org/opentripplanner/api}/model/serverinfo/ApiVersionControlInfo.java (100%) diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiConfigInfo.java b/src/main/java/org/opentripplanner/api/model/serverinfo/ApiConfigInfo.java similarity index 100% rename from src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiConfigInfo.java rename to src/main/java/org/opentripplanner/api/model/serverinfo/ApiConfigInfo.java diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiProjectVersion.java b/src/main/java/org/opentripplanner/api/model/serverinfo/ApiProjectVersion.java similarity index 100% rename from src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiProjectVersion.java rename to src/main/java/org/opentripplanner/api/model/serverinfo/ApiProjectVersion.java diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiServerInfo.java b/src/main/java/org/opentripplanner/api/model/serverinfo/ApiServerInfo.java similarity index 100% rename from src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiServerInfo.java rename to src/main/java/org/opentripplanner/api/model/serverinfo/ApiServerInfo.java diff --git a/src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiVersionControlInfo.java b/src/main/java/org/opentripplanner/api/model/serverinfo/ApiVersionControlInfo.java similarity index 100% rename from src/ext/java/org/opentripplanner/ext/restapi/model/serverinfo/ApiVersionControlInfo.java rename to src/main/java/org/opentripplanner/api/model/serverinfo/ApiVersionControlInfo.java From 8dab384d3238c79b244b42f06a5a8e29953af0d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 00:15:51 +0000 Subject: [PATCH 080/103] chore(deps): update dependency org.apache.maven.plugins:maven-surefire-plugin to v3.2.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8a75ffb6143..6e11c31a951 100644 --- a/pom.xml +++ b/pom.xml @@ -242,7 +242,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.3 + 3.2.5 me.fabriciorby From f2c18a3416bd7f57ba4fad2c544aa88cc7a9d0a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 00:15:57 +0000 Subject: [PATCH 081/103] fix(deps): update slf4j.version to v2.0.11 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6e11c31a951..d2fd4a0515c 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ 5.5.3 1.4.14 9.9.1 - 2.0.10 + 2.0.11 2.0.15 1.26 4.0.4 From 4acb6ed47867359c9d2da99b164634ebf10cd8b6 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Wed, 10 Jan 2024 14:51:45 +0000 Subject: [PATCH 082/103] Upgrade debug client to version 2024/01/2024-01-10T14:51 --- src/client/debug-client-preview/index.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/client/debug-client-preview/index.html diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html new file mode 100644 index 00000000000..8cbe7422def --- /dev/null +++ b/src/client/debug-client-preview/index.html @@ -0,0 +1,15 @@ + + + + + + + OTP Debug Client + + + + +

    + + + From b2fc0a1395d8d14c30bbd323ca56758b2de26dc1 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 10 Jan 2024 16:00:26 +0100 Subject: [PATCH 083/103] Don't run performance tests for client update PRs --- .github/workflows/performance-test.yml | 2 +- client-next/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index c2168a79a06..a5274d9839f 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -7,7 +7,7 @@ on: jobs: perf-test: - if: github.repository_owner == 'opentripplanner' && !startsWith(github.event.head_commit.message ,'Bump serialization version id for') + if: github.repository_owner == 'opentripplanner' && !startsWith(github.event.head_commit.message ,'Bump serialization version id for') && !startsWith(github.event.head_commit.message ,'Upgrade debug client to version') runs-on: performance-test strategy: fail-fast: false diff --git a/client-next/README.md b/client-next/README.md index a00a5d094ad..a6c8e76cfad 100644 --- a/client-next/README.md +++ b/client-next/README.md @@ -62,4 +62,4 @@ or add it to a new `.env.development.local` file (this file will be ignored by g In production mode, the default is to access OTP via the same origin as the client (see `.env`). This behavior can also be modified by changing the previously mentioned environment variable at -build-time.. +build-time. From d7e9ecd98c720dfd9056dc33c280fd882e5d23a3 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Wed, 10 Jan 2024 15:01:24 +0000 Subject: [PATCH 084/103] Upgrade debug client to version 2024/01/2024-01-10T15:00 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index 8cbe7422def..dfb4915efcc 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 4b7cffa65b032e57925eb16b4807e45e0b385d7e Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Wed, 10 Jan 2024 16:41:32 +0100 Subject: [PATCH 085/103] Update dev meeting calendar instructions --- docs/Developers-Guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Developers-Guide.md b/docs/Developers-Guide.md index e12d9cf6c1b..8a68f83f301 100644 --- a/docs/Developers-Guide.md +++ b/docs/Developers-Guide.md @@ -63,8 +63,8 @@ There are several ways to get involved: * Create pull requests citing the relevant issue. -* Join developer meetings hosted twice a week. Check the specific times - on [this calendar](https://calendar.google.com/calendar/u/0/embed?src=ormbltvsqb6adl80ejgudt0glc@group.calendar.google.com) +* Join developer meetings hosted twice a week. Check the specific times and URLs + on [this page](https://github.com/opentripplanner/OpenTripPlanner/blob/dev-2.x/CONTRIBUTING.md#developer-meetings) ### Branches and Branch Protection From 41b5cf0fce39a93b59f4dbbca22134cf748217f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Erik=20St=C3=B8wer?= Date: Wed, 10 Jan 2024 22:20:11 +0100 Subject: [PATCH 086/103] Improve: Pin all dependencies, past and future --- client-next/.npmrc | 1 + client-next/package-lock.json | 50 +++++++++++++++++------------------ client-next/package.json | 50 +++++++++++++++++------------------ 3 files changed, 51 insertions(+), 50 deletions(-) create mode 100644 client-next/.npmrc diff --git a/client-next/.npmrc b/client-next/.npmrc new file mode 100644 index 00000000000..449691b70fd --- /dev/null +++ b/client-next/.npmrc @@ -0,0 +1 @@ +save-exact=true \ No newline at end of file diff --git a/client-next/package-lock.json b/client-next/package-lock.json index 85a29784489..19909ba109d 100644 --- a/client-next/package-lock.json +++ b/client-next/package-lock.json @@ -8,36 +8,36 @@ "name": "otp-debug-client-next", "version": "0.0.0", "dependencies": { - "@googlemaps/polyline-codec": "^1.0.28", - "bootstrap": "^5.3.1", - "graphql": "^16.8.0", - "graphql-request": "^6.1.0", - "maplibre-gl": "^3.3.0", - "react": "^18.2.0", - "react-bootstrap": "^2.8.0", - "react-dom": "^18.2.0", - "react-map-gl": "^7.1.5" + "@googlemaps/polyline-codec": "1.0.28", + "bootstrap": "5.3.1", + "graphql": "16.8.0", + "graphql-request": "6.1.0", + "maplibre-gl": "3.3.0", + "react": "18.2.0", + "react-bootstrap": "2.8.0", + "react-dom": "18.2.0", + "react-map-gl": "7.1.5" }, "devDependencies": { "@graphql-codegen/cli": "5.0.0", "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", - "@parcel/watcher": "^2.3.0", - "@types/react": "^18.2.15", - "@types/react-dom": "^18.2.7", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "@vitejs/plugin-react": "^4.0.3", - "eslint": "^8.45.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.3", - "prettier": "^3.0.3", - "typescript": "^5.2.2", - "vite": "^4.4.5" + "@parcel/watcher": "2.3.0", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "@typescript-eslint/eslint-plugin": "6.5.0", + "@typescript-eslint/parser": "6.5.0", + "@vitejs/plugin-react": "4.0.4", + "eslint": "8.48.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.28.1", + "eslint-plugin-jsx-a11y": "6.7.1", + "eslint-plugin-react": "7.33.2", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-refresh": "0.4.3", + "prettier": "3.0.3", + "typescript": "5.2.2", + "vite": "4.4.9" } }, "node_modules/@aashutoshrathi/word-wrap": { diff --git a/client-next/package.json b/client-next/package.json index 4d453ed37ca..79d2c7942f1 100644 --- a/client-next/package.json +++ b/client-next/package.json @@ -15,35 +15,35 @@ "codegen": "graphql-codegen --config codegen.ts" }, "dependencies": { - "@googlemaps/polyline-codec": "^1.0.28", - "bootstrap": "^5.3.1", - "graphql": "^16.8.0", - "graphql-request": "^6.1.0", - "maplibre-gl": "^3.3.0", - "react": "^18.2.0", - "react-bootstrap": "^2.8.0", - "react-dom": "^18.2.0", - "react-map-gl": "^7.1.5" + "@googlemaps/polyline-codec": "1.0.28", + "bootstrap": "5.3.1", + "graphql": "16.8.0", + "graphql-request": "6.1.0", + "maplibre-gl": "3.3.0", + "react": "18.2.0", + "react-bootstrap": "2.8.0", + "react-dom": "18.2.0", + "react-map-gl": "7.1.5" }, "devDependencies": { "@graphql-codegen/cli": "5.0.0", "@graphql-codegen/client-preset": "4.1.0", "@graphql-codegen/introspection": "4.0.0", - "@parcel/watcher": "^2.3.0", - "@types/react": "^18.2.15", - "@types/react-dom": "^18.2.7", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "@vitejs/plugin-react": "^4.0.3", - "eslint": "^8.45.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.3", - "prettier": "^3.0.3", - "typescript": "^5.2.2", - "vite": "^4.4.5" + "@parcel/watcher": "2.3.0", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "@typescript-eslint/eslint-plugin": "6.5.0", + "@typescript-eslint/parser": "6.5.0", + "@vitejs/plugin-react": "4.0.4", + "eslint": "8.48.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.28.1", + "eslint-plugin-jsx-a11y": "6.7.1", + "eslint-plugin-react": "7.33.2", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-refresh": "0.4.3", + "prettier": "3.0.3", + "typescript": "5.2.2", + "vite": "4.4.9" } } From bdb5355ca8e08111c45a6a06089879097059a674 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jan 2024 07:03:32 +0000 Subject: [PATCH 087/103] Add changelog entry for #5580 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 9f755bd8f8f..23bf7b11ad7 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -70,6 +70,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Consider escalator edges in island pruning [#5591](https://github.com/opentripplanner/OpenTripPlanner/pull/5591) - Create own rental preferences for bike and car in the internal model [#5562](https://github.com/opentripplanner/OpenTripPlanner/pull/5562) - Adding situation-version to TransmodelGraphQL API [#5592](https://github.com/opentripplanner/OpenTripPlanner/pull/5592) +- Move REST API into sandbox [#5580](https://github.com/opentripplanner/OpenTripPlanner/pull/5580) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 8a67be4e70b33b6a63a34b6080d79a1e22778785 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 09:59:47 +0100 Subject: [PATCH 088/103] Apply review feedback --- .github/workflows/performance-test.yml | 1 - .../opentripplanner/street/search/state/TestStateBuilder.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/performance-test.yml b/.github/workflows/performance-test.yml index d764fdbeff0..c2168a79a06 100644 --- a/.github/workflows/performance-test.yml +++ b/.github/workflows/performance-test.yml @@ -4,7 +4,6 @@ on: push: branches: - dev-2.x - - max-count-rental jobs: perf-test: diff --git a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java index 752985de51e..a4dbf76e55e 100644 --- a/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java +++ b/src/test/java/org/opentripplanner/street/search/state/TestStateBuilder.java @@ -93,7 +93,7 @@ public static TestStateBuilder ofScooterRental() { } /** - * Creates a state starts the scooter rental but in arriveBy mode, so therefore starting with + * Creates a state that starts the scooter rental in arriveBy mode, so starting with * a rental scooter and going backwards until it finds a rental vertex where to drop it. */ public static TestStateBuilder ofScooterRentalArriveBy() { From 43438baf59cd6a734859b509bd932aaa711d9c6f Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jan 2024 09:11:03 +0000 Subject: [PATCH 089/103] Add changelog entry for #5605 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 23bf7b11ad7..7458295b9ba 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -71,6 +71,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Create own rental preferences for bike and car in the internal model [#5562](https://github.com/opentripplanner/OpenTripPlanner/pull/5562) - Adding situation-version to TransmodelGraphQL API [#5592](https://github.com/opentripplanner/OpenTripPlanner/pull/5592) - Move REST API into sandbox [#5580](https://github.com/opentripplanner/OpenTripPlanner/pull/5580) +- Fix high walk reluctance leading to zero egress results for rental searches [#5605](https://github.com/opentripplanner/OpenTripPlanner/pull/5605) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From 5972e5d4260192621c62be4019c63f71f327c005 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 10:26:37 +0100 Subject: [PATCH 090/103] Resolve merge artifacts --- .../inspector/vector/stop/StopLocationPropertyMapper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java index 44729bcb407..ab9685dd0f6 100644 --- a/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java +++ b/src/main/java/org/opentripplanner/inspector/vector/stop/StopLocationPropertyMapper.java @@ -5,13 +5,13 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import org.opentripplanner.api.mapping.I18NStringMapper; -import org.opentripplanner.api.mapping.PropertyMapper; +import org.opentripplanner.apis.support.mapping.PropertyMapper; +import org.opentripplanner.framework.i18n.I18NStringMapper; import org.opentripplanner.inspector.vector.KeyValue; import org.opentripplanner.transit.model.site.StopLocation; /** - * A {@link PropertyMapper} for the {@link AreaStopsLayerBuilder} for the OTP debug client. + * A {@link PropertyMapper} for the {@link StopLocationPropertyMapper} for the OTP debug client. */ public class StopLocationPropertyMapper extends PropertyMapper { From 4fd4325127655df8f0fb7c0ea26a672b961e7e2d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 10:27:32 +0100 Subject: [PATCH 091/103] Update docs --- docs/Configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Configuration.md b/docs/Configuration.md index b376b6b91dc..d43ff150926 100644 --- a/docs/Configuration.md +++ b/docs/Configuration.md @@ -241,7 +241,7 @@ 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. | ✓️ | ✓️ | +| `LegacyRestApi` | Enable legacy REST API. This API will be removed in the future. | ✓️ | ✓️ | | `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! | | | From c5dc28984a83a968660c2478c2a6b3301fa7a6d4 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 12:14:00 +0100 Subject: [PATCH 092/103] Apply review feedback --- .../MapView/GeometryPropertyPopup.tsx | 27 ++++++++++++ .../src/components/MapView/MapView.tsx | 43 +++++++++---------- 2 files changed, 48 insertions(+), 22 deletions(-) create mode 100644 client-next/src/components/MapView/GeometryPropertyPopup.tsx diff --git a/client-next/src/components/MapView/GeometryPropertyPopup.tsx b/client-next/src/components/MapView/GeometryPropertyPopup.tsx new file mode 100644 index 00000000000..d2b55689270 --- /dev/null +++ b/client-next/src/components/MapView/GeometryPropertyPopup.tsx @@ -0,0 +1,27 @@ +import { LngLat, Popup } from 'react-map-gl'; +import { Table } from 'react-bootstrap'; + +export function GeometryPropertyPopup({ + coordinates, + properties, + onClose, +}: { + coordinates: LngLat; + properties: { [s: string]: string }; + onClose: () => void; +}) { + return ( + onClose()}> + + + {Object.entries(properties).map(([key, value]) => ( + + + + + ))} + +
    {key}{value}
    +
    + ); +} diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index e401b1756e6..1b17e31cb88 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -1,4 +1,4 @@ -import { LngLat, Map, MapboxGeoJSONFeature, NavigationControl, Popup } from 'react-map-gl'; +import { LngLat, Map, MapboxGeoJSONFeature, NavigationControl } from 'react-map-gl'; import 'maplibre-gl/dist/maplibre-gl.css'; import { TripPattern, TripQuery, TripQueryVariables } from '../../gql/graphql.ts'; import { NavigationMarkers } from './NavigationMarkers.tsx'; @@ -6,7 +6,7 @@ import { LegLines } from './LegLines.tsx'; import { useMapDoubleClick } from './useMapDoubleClick.ts'; import { useState } from 'react'; import { ContextMenuPopup } from './ContextMenuPopup.tsx'; -import { Table } from 'react-bootstrap'; +import { GeometryPropertyPopup } from './GeometryPropertyPopup.tsx'; // TODO: this should be configurable const initialViewState = { @@ -35,6 +35,20 @@ export function MapView({ const onMapDoubleClick = useMapDoubleClick({ tripQueryVariables, setTripQueryVariables }); const [showContextPopup, setShowContextPopup] = useState(null); const [showPropsPopup, setShowPropsPopup] = useState(null); + const showFeaturePropPopup = ( + e: mapboxgl.MapMouseEvent & { + features?: mapboxgl.MapboxGeoJSONFeature[] | undefined; + }, + setShowPropsPopup: (value: ((prevState: PopupData | null) => PopupData | null) | PopupData | null) => void, + ) => { + if (e.features) { + // if you click on a cluster of map features it's possible that there are multiple + // to select from. we are using the first one instead of presenting a selection UI. + // you can always zoom in closer if you want to make a more specific click. + const feature = e.features[0]; + setShowPropsPopup({ coordinates: e.lngLat, feature: feature }); + } + }; return (
    @@ -50,10 +64,7 @@ export function MapView({ }} interactiveLayerIds={['regular-stop']} onClick={(e) => { - if (e.features) { - const props = e.features[0]; - setShowPropsPopup({ coordinates: e.lngLat, feature: props }); - } + showFeaturePropPopup(e, setShowPropsPopup); }} // put lat/long in URL and pan to it on page reload hash={true} @@ -79,23 +90,11 @@ export function MapView({ /> )} {showPropsPopup?.feature?.properties && ( - setShowPropsPopup(null)} - > - - - {Object.entries(showPropsPopup.feature.properties).map(([key, value]) => ( - - - - - ))} - -
    {key}{value}
    -
    + /> )}
    From c4eb78c44f87c5668e9d26cbe91e0ce95a7851c2 Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 11 Jan 2024 13:07:49 +0000 Subject: [PATCH 093/103] Upgrade debug client to version 2024/01/2024-01-11T13:07 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index dfb4915efcc..d9bf3a2af16 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From 24d5929747795ab39bb820683ceb3d51a6fabeea Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 14:33:38 +0100 Subject: [PATCH 094/103] Remove extra function definition --- client-next/src/components/MapView/MapView.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 1b17e31cb88..57e718ff187 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -39,7 +39,6 @@ export function MapView({ e: mapboxgl.MapMouseEvent & { features?: mapboxgl.MapboxGeoJSONFeature[] | undefined; }, - setShowPropsPopup: (value: ((prevState: PopupData | null) => PopupData | null) | PopupData | null) => void, ) => { if (e.features) { // if you click on a cluster of map features it's possible that there are multiple @@ -64,7 +63,7 @@ export function MapView({ }} interactiveLayerIds={['regular-stop']} onClick={(e) => { - showFeaturePropPopup(e, setShowPropsPopup); + showFeaturePropPopup(e); }} // put lat/long in URL and pan to it on page reload hash={true} From bdffc557f115126147506c8f793d2797abe2891c Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jan 2024 14:43:21 +0000 Subject: [PATCH 095/103] Add changelog entry for #5604 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index 7458295b9ba..fa3615b90b3 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -72,6 +72,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Adding situation-version to TransmodelGraphQL API [#5592](https://github.com/opentripplanner/OpenTripPlanner/pull/5592) - Move REST API into sandbox [#5580](https://github.com/opentripplanner/OpenTripPlanner/pull/5580) - Fix high walk reluctance leading to zero egress results for rental searches [#5605](https://github.com/opentripplanner/OpenTripPlanner/pull/5605) +- Remove GTFS-RT websocket updater [#5604](https://github.com/opentripplanner/OpenTripPlanner/pull/5604) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From b554800ebf90b66628590e79b7ce2702a6325a5f Mon Sep 17 00:00:00 2001 From: OTP Serialization Version Bot Date: Thu, 11 Jan 2024 14:43:37 +0000 Subject: [PATCH 096/103] Bump serialization version id for #5604 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6567356b392..abd70a60749 100644 --- a/pom.xml +++ b/pom.xml @@ -56,7 +56,7 @@ - 135 + 136 30.1 2.50 From cf5d875fbf4dd003023e4a506ac8a84d0175d8a7 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 15:50:30 +0100 Subject: [PATCH 097/103] Remove extra method call indirection --- client-next/src/components/MapView/MapView.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/client-next/src/components/MapView/MapView.tsx b/client-next/src/components/MapView/MapView.tsx index 57e718ff187..5b6223a5dee 100644 --- a/client-next/src/components/MapView/MapView.tsx +++ b/client-next/src/components/MapView/MapView.tsx @@ -62,9 +62,7 @@ export function MapView({ setShowContextPopup(e.lngLat); }} interactiveLayerIds={['regular-stop']} - onClick={(e) => { - showFeaturePropPopup(e); - }} + onClick={showFeaturePropPopup} // put lat/long in URL and pan to it on page reload hash={true} // disable pitching and rotating the map From 6ab81142e4a17029e3a86a5b41e7cbab96af69f2 Mon Sep 17 00:00:00 2001 From: OTP Changelog Bot Date: Thu, 11 Jan 2024 16:03:16 +0000 Subject: [PATCH 098/103] Add changelog entry for #5602 [ci skip] --- docs/Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changelog.md b/docs/Changelog.md index fa3615b90b3..50846c3fce7 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -73,6 +73,7 @@ based on merged pull requests. Search GitHub issues and pull requests for smalle - Move REST API into sandbox [#5580](https://github.com/opentripplanner/OpenTripPlanner/pull/5580) - Fix high walk reluctance leading to zero egress results for rental searches [#5605](https://github.com/opentripplanner/OpenTripPlanner/pull/5605) - Remove GTFS-RT websocket updater [#5604](https://github.com/opentripplanner/OpenTripPlanner/pull/5604) +- Add stop layer to new Debug UI [#5602](https://github.com/opentripplanner/OpenTripPlanner/pull/5602) [](AUTOMATIC_CHANGELOG_PLACEHOLDER_DO_NOT_REMOVE) ## 2.4.0 (2023-09-13) From ab694b8efb80bf856a1fb468ef03a9d97c514cfe Mon Sep 17 00:00:00 2001 From: OTP Bot Date: Thu, 11 Jan 2024 16:04:27 +0000 Subject: [PATCH 099/103] Upgrade debug client to version 2024/01/2024-01-11T16:03 --- src/client/debug-client-preview/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/debug-client-preview/index.html b/src/client/debug-client-preview/index.html index d9bf3a2af16..5f77418dbe6 100644 --- a/src/client/debug-client-preview/index.html +++ b/src/client/debug-client-preview/index.html @@ -5,8 +5,8 @@ OTP Debug Client - - + +
    From c39c366b27d50602e5507c9206cd18696e3f6d48 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Thu, 11 Jan 2024 16:19:11 +0100 Subject: [PATCH 100/103] Add documentation about MQTT updater --- doc-templates/UpdaterConfig.md | 13 ++- docs/RouterConfiguration.md | 7 ++ docs/UpdaterConfig.md | 82 +++++++++++++++++-- docs/sandbox/SiriUpdater.md | 30 +++---- .../standalone/config/router-config.json | 8 ++ 5 files changed, 115 insertions(+), 25 deletions(-) diff --git a/doc-templates/UpdaterConfig.md b/doc-templates/UpdaterConfig.md index a239317f244..57152671ec7 100644 --- a/doc-templates/UpdaterConfig.md +++ b/doc-templates/UpdaterConfig.md @@ -8,8 +8,8 @@ # Updater configuration -This section covers all options that can be set in the *router-config.json* in the -[updaters](RouterConfiguration.md) section. +This section covers options that can be set in the updaters section of `router-config.json`. +See the parameter summary and examples in the router configuration documentation Real-time data are those that are not added to OTP during the graph build phase but during runtime. @@ -44,6 +44,15 @@ The information is downloaded in a single HTTP request and polled regularly. +### Streaming TripUpdates via MQTT + +This updater connects to an MQTT broker and processes TripUpdates in a streaming fashion. This means +that they will be applied individually in near-realtime rather than in batches at a certain interval. + +This system powers the realtime updates in Helsinki and more information can be found +[on Github](https://github.com/HSLdevcom/transitdata). + + ### Vehicle Positions diff --git a/docs/RouterConfiguration.md b/docs/RouterConfiguration.md index 30e423f29b1..5ca87a2aefa 100644 --- a/docs/RouterConfiguration.md +++ b/docs/RouterConfiguration.md @@ -727,6 +727,13 @@ Used to group requests when monitoring OTP. "Authorization" : "A-Token" } }, + { + "type" : "mqtt-gtfs-rt-updater", + "url" : "tcp://pred.rt.hsl.fi", + "topic" : "gtfsrt/v2/fi/hsl/tu", + "feedId" : "HSL", + "fuzzyTripMatching" : true + }, { "type" : "vehicle-positions", "url" : "https://s3.amazonaws.com/kcm-alerts-realtime-prod/vehiclepositions.pb", diff --git a/docs/UpdaterConfig.md b/docs/UpdaterConfig.md index 6c219d07ddf..212a2d55370 100644 --- a/docs/UpdaterConfig.md +++ b/docs/UpdaterConfig.md @@ -8,8 +8,8 @@ # Updater configuration -This section covers all options that can be set in the *router-config.json* in the -[updaters](RouterConfiguration.md) section. +This section covers options that can be set in the updaters section of `router-config.json`. +See the parameter summary and examples in the router configuration documentation Real-time data are those that are not added to OTP during the graph build phase but during runtime. @@ -164,6 +164,72 @@ HTTP headers to add to the request. Any header key, value can be inserted. +### Streaming TripUpdates via MQTT + +This updater connects to an MQTT broker and processes TripUpdates in a streaming fashion. This means +that they will be applied individually in near-realtime rather than in batches at a certain interval. + +This system powers the realtime updates in Helsinki and more information can be found +[on Github](https://github.com/HSLdevcom/transitdata). + + + + +| Config Parameter | Type | Summary | Req./Opt. | Default Value | Since | +|-----------------------------------------------------------------------|:---------:|----------------------------------------------|:----------:|----------------------|:-----:| +| type = "mqtt-gtfs-rt-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | +| [backwardsDelayPropagationType](#u__6__backwardsDelayPropagationType) | `enum` | How backwards propagation should be handled. | *Optional* | `"required-no-data"` | 2.2 | +| feedId | `string` | The feed id to apply the updates to. | *Required* | | na | +| fuzzyTripMatching | `boolean` | Whether to match trips fuzzily. | *Optional* | `false` | na | +| qos | `integer` | QOS level. | *Optional* | `0` | na | +| topic | `string` | The topic to subscribe to. | *Required* | | na | +| url | `string` | URL of the MQTT broker. | *Required* | | na | + + +##### Parameter details + +

    backwardsDelayPropagationType

    + +**Since version:** `2.2` ∙ **Type:** `enum` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"required-no-data"` +**Path:** /updaters/[6] +**Enum values:** `required-no-data` | `required` | `always` + +How backwards propagation should be handled. + + REQUIRED_NO_DATA: + Default value. Only propagates delays backwards when it is required to ensure that the times + are increasing, and it sets the NO_DATA flag on the stops so these automatically updated times + are not exposed through APIs. + + REQUIRED: + Only propagates delays backwards when it is required to ensure that the times are increasing. + The updated times are exposed through APIs. + + ALWAYS: + Propagates delays backwards on stops with no estimates regardless if it's required or not. + The updated times are exposed through APIs. + + + + +##### Example configuration + +```JSON +// router-config.json +{ + "updaters" : [ + { + "type" : "mqtt-gtfs-rt-updater", + "url" : "tcp://pred.rt.hsl.fi", + "topic" : "gtfsrt/v2/fi/hsl/tu", + "feedId" : "HSL", + "fuzzyTripMatching" : true + } + ] +} +``` + + ### Vehicle Positions @@ -181,24 +247,24 @@ The information is downloaded in a single HTTP request and polled regularly. | frequency | `duration` | How often the positions should be updated. | *Optional* | `"PT1M"` | 2.2 | | fuzzyTripMatching | `boolean` | Whether to match trips fuzzily. | *Optional* | `false` | 2.5 | | url | `uri` | The URL of GTFS-RT protobuf HTTP resource to download the positions from. | *Required* | | 2.2 | -| [features](#u__6__features) | `enum set` | Which features of GTFS RT vehicle positions should be loaded into OTP. | *Optional* | | 2.5 | -| [headers](#u__6__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | +| [features](#u__7__features) | `enum set` | Which features of GTFS RT vehicle positions should be loaded into OTP. | *Optional* | | 2.5 | +| [headers](#u__7__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | ##### Parameter details -

    features

    +

    features

    **Since version:** `2.5` ∙ **Type:** `enum set` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[6] +**Path:** /updaters/[7] **Enum values:** `position` | `stop-position` | `occupancy` Which features of GTFS RT vehicle positions should be loaded into OTP. -

    headers

    +

    headers

    **Since version:** `2.3` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[6] +**Path:** /updaters/[7] HTTP headers to add to the request. Any header key, value can be inserted. diff --git a/docs/sandbox/SiriUpdater.md b/docs/sandbox/SiriUpdater.md index 7730df67d12..f6c4c3f999f 100644 --- a/docs/sandbox/SiriUpdater.md +++ b/docs/sandbox/SiriUpdater.md @@ -37,16 +37,16 @@ To enable the SIRI updater you need to add it to the updaters section of the `ro | previewInterval | `duration` | TODO | *Optional* | | 2.0 | | requestorRef | `string` | The requester reference. | *Optional* | | 2.0 | | timeout | `duration` | The HTTP timeout to download the updates. | *Optional* | `"PT15S"` | 2.0 | -| [url](#u__7__url) | `string` | The URL to send the HTTP requests to. | *Required* | | 2.0 | -| [headers](#u__7__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | +| [url](#u__8__url) | `string` | The URL to send the HTTP requests to. | *Required* | | 2.0 | +| [headers](#u__8__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | ##### Parameter details -

    url

    +

    url

    **Since version:** `2.0` ∙ **Type:** `string` ∙ **Cardinality:** `Required` -**Path:** /updaters/[7] +**Path:** /updaters/[8] The URL to send the HTTP requests to. @@ -58,10 +58,10 @@ renamed by the loader when processed: -

    headers

    +

    headers

    **Since version:** `2.3` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[7] +**Path:** /updaters/[8] HTTP headers to add to the request. Any header key, value can be inserted. @@ -97,21 +97,21 @@ HTTP headers to add to the request. Any header key, value can be inserted. |---------------------------------|:---------------:|--------------------------------------------------------------------------------------------------------|:----------:|---------------|:-----:| | type = "siri-sx-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | | blockReadinessUntilInitialized | `boolean` | Whether catching up with the updates should block the readiness check from returning a 'ready' result. | *Optional* | `false` | 2.0 | -| [earlyStart](#u__8__earlyStart) | `duration` | This value is subtracted from the actual validity defined in the message. | *Optional* | `"PT0S"` | 2.0 | +| [earlyStart](#u__9__earlyStart) | `duration` | This value is subtracted from the actual validity defined in the message. | *Optional* | `"PT0S"` | 2.0 | | feedId | `string` | The ID of the feed to apply the updates to. | *Required* | | 2.0 | | frequency | `duration` | How often the updates should be retrieved. | *Optional* | `"PT1M"` | 2.0 | | requestorRef | `string` | The requester reference. | *Optional* | | 2.0 | | timeout | `duration` | The HTTP timeout to download the updates. | *Optional* | `"PT15S"` | 2.0 | -| [url](#u__8__url) | `string` | The URL to send the HTTP requests to. Supports http/https and file protocol. | *Required* | | 2.0 | -| [headers](#u__8__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | +| [url](#u__9__url) | `string` | The URL to send the HTTP requests to. Supports http/https and file protocol. | *Required* | | 2.0 | +| [headers](#u__9__headers) | `map of string` | HTTP headers to add to the request. Any header key, value can be inserted. | *Optional* | | 2.3 | ##### Parameter details -

    earlyStart

    +

    earlyStart

    **Since version:** `2.0` ∙ **Type:** `duration` ∙ **Cardinality:** `Optional` ∙ **Default value:** `"PT0S"` -**Path:** /updaters/[8] +**Path:** /updaters/[9] This value is subtracted from the actual validity defined in the message. @@ -119,10 +119,10 @@ Normally the planned departure time is used, so setting this to 10s will cause t SX-message to be included in trip-results 10 seconds before the the planned departure time. -

    url

    +

    url

    **Since version:** `2.0` ∙ **Type:** `string` ∙ **Cardinality:** `Required` -**Path:** /updaters/[8] +**Path:** /updaters/[9] The URL to send the HTTP requests to. Supports http/https and file protocol. @@ -135,10 +135,10 @@ renamed by the loader when processed: -

    headers

    +

    headers

    **Since version:** `2.3` ∙ **Type:** `map of string` ∙ **Cardinality:** `Optional` -**Path:** /updaters/[8] +**Path:** /updaters/[9] HTTP headers to add to the request. Any header key, value can be inserted. diff --git a/src/test/resources/standalone/config/router-config.json b/src/test/resources/standalone/config/router-config.json index 1a5eec22a28..5abb5ef87a6 100644 --- a/src/test/resources/standalone/config/router-config.json +++ b/src/test/resources/standalone/config/router-config.json @@ -283,6 +283,14 @@ "Authorization": "A-Token" } }, + // Streaming GTFS-RT TripUpdates through an MQTT broker + { + "type": "mqtt-gtfs-rt-updater", + "url": "tcp://pred.rt.hsl.fi", + "topic": "gtfsrt/v2/fi/hsl/tu", + "feedId": "HSL", + "fuzzyTripMatching": true + }, // Polling for GTFS-RT Vehicle Positions - output can be fetched via trip pattern GraphQL API { "type": "vehicle-positions", From 31896ea58e69190f6520fc39e268f9c9509f7501 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 02:09:23 +0000 Subject: [PATCH 101/103] Update dependency org.mockito:mockito-core to v5.9.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index abd70a60749..e5f86fe5b66 100644 --- a/pom.xml +++ b/pom.xml @@ -713,7 +713,7 @@ org.mockito mockito-core - 5.8.0 + 5.9.0 test From c6306b8bd0eb50f9e4d02a5a75159c9d99d07f45 Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 16 Jan 2024 11:24:05 +0100 Subject: [PATCH 102/103] Set 2.0 as the version the MQTT updater was added --- docs/UpdaterConfig.md | 10 +++++----- .../updaters/MqttGtfsRealtimeUpdaterConfig.java | 12 ++++++------ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/UpdaterConfig.md b/docs/UpdaterConfig.md index 212a2d55370..a819a898240 100644 --- a/docs/UpdaterConfig.md +++ b/docs/UpdaterConfig.md @@ -179,11 +179,11 @@ This system powers the realtime updates in Helsinki and more information can be |-----------------------------------------------------------------------|:---------:|----------------------------------------------|:----------:|----------------------|:-----:| | type = "mqtt-gtfs-rt-updater" | `enum` | The type of the updater. | *Required* | | 1.5 | | [backwardsDelayPropagationType](#u__6__backwardsDelayPropagationType) | `enum` | How backwards propagation should be handled. | *Optional* | `"required-no-data"` | 2.2 | -| feedId | `string` | The feed id to apply the updates to. | *Required* | | na | -| fuzzyTripMatching | `boolean` | Whether to match trips fuzzily. | *Optional* | `false` | na | -| qos | `integer` | QOS level. | *Optional* | `0` | na | -| topic | `string` | The topic to subscribe to. | *Required* | | na | -| url | `string` | URL of the MQTT broker. | *Required* | | na | +| feedId | `string` | The feed id to apply the updates to. | *Required* | | 2.0 | +| fuzzyTripMatching | `boolean` | Whether to match trips fuzzily. | *Optional* | `false` | 2.0 | +| qos | `integer` | QOS level. | *Optional* | `0` | 2.0 | +| topic | `string` | The topic to subscribe to. | *Required* | | 2.0 | +| url | `string` | URL of the MQTT broker. | *Required* | | 2.0 | ##### Parameter details diff --git a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/MqttGtfsRealtimeUpdaterConfig.java b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/MqttGtfsRealtimeUpdaterConfig.java index 372bd36227e..ccc4ca5e80f 100644 --- a/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/MqttGtfsRealtimeUpdaterConfig.java +++ b/src/main/java/org/opentripplanner/standalone/config/routerconfig/updaters/MqttGtfsRealtimeUpdaterConfig.java @@ -1,6 +1,6 @@ package org.opentripplanner.standalone.config.routerconfig.updaters; -import static org.opentripplanner.standalone.config.framework.json.OtpVersion.NA; +import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_0; import static org.opentripplanner.standalone.config.framework.json.OtpVersion.V2_2; import org.opentripplanner.standalone.config.framework.json.NodeAdapter; @@ -12,13 +12,13 @@ public class MqttGtfsRealtimeUpdaterConfig { public static MqttGtfsRealtimeUpdaterParameters create(String configRef, NodeAdapter c) { return new MqttGtfsRealtimeUpdaterParameters( configRef, - c.of("feedId").since(NA).summary("The feed id to apply the updates to.").asString(), - c.of("url").since(NA).summary("URL of the MQTT broker.").asString(), - c.of("topic").since(NA).summary("The topic to subscribe to.").asString(), - c.of("qos").since(NA).summary("QOS level.").asInt(0), + c.of("feedId").since(V2_0).summary("The feed id to apply the updates to.").asString(), + c.of("url").since(V2_0).summary("URL of the MQTT broker.").asString(), + c.of("topic").since(V2_0).summary("The topic to subscribe to.").asString(), + c.of("qos").since(V2_0).summary("QOS level.").asInt(0), c .of("fuzzyTripMatching") - .since(NA) + .since(V2_0) .summary("Whether to match trips fuzzily.") .asBoolean(false), c From cec3655f5e55b2b2666fe554b407f6322c52f15d Mon Sep 17 00:00:00 2001 From: Leonard Ehrenfried Date: Tue, 16 Jan 2024 13:02:03 +0100 Subject: [PATCH 103/103] Add comment to visualizer [ci skip] --- .../java/org/opentripplanner/visualizer/GraphVisualizer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java index 73516b0348f..9f8bbffb22d 100644 --- a/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java +++ b/src/main/java/org/opentripplanner/visualizer/GraphVisualizer.java @@ -157,6 +157,10 @@ public DisplayVertex getElementAt(int index) { * TransitStops only, and allows a user to select stops, examine incoming and outgoing edges, and * examine trip patterns. It's meant mainly for debugging, so it's totally OK if it develops (say) a * bunch of weird buttons designed to debug specific cases. + *

    + * 2024-01-26: We talked about the visualizer in the developer meeting and while the code is a bit + * dusty, we decided that we want to keep the option open to build make the visualization of routing + * steps work again in the future and won't delete it. */ public class GraphVisualizer extends JFrame implements VertexSelectionListener {